История изменений
Исправление Softwayer, (текущая версия) :
Можно просто протаскивать старое значение ручками:
myLoop :: Int -> IO ()
myLoop oldVal = do
line <- getLine
let newVal = read line :: Int
print $ newVal - oldVal
myLoop newVal
main :: IO ()
main = myLoop 0
Можно абстрагировать работу с состоянием через StateT:
myLoop :: StateT Int IO ()
myLoop = forever $ do
line <- liftIO getLine
let newVal = read line :: Int
oldVal <- get
liftIO $ print $ newVal - oldVal
put newVal
main :: IO ()
main = evalStateT myLoop 0
Исходная версия Softwayer, :
Можно просто протаскивать старое значение ручками:
myLoop :: Int -> IO ()
myLoop oldVal = do
line <- getLine
let newVal = read line :: Int
print $ newVal - oldVal
myLoop newVal
main :: IO ()
main = myLoop 0
Можно абстрагировать работу с состоянием через StateT:
myLoop :: StateT Int IO ()
myLoop = do
line <- liftIO getLine
let newVal = read line :: Int
oldVal <- get
liftIO $ print $ newVal - oldVal
put newVal
myLoop
main :: IO ()
main = evalStateT myLoop 0