我想创建一个循环,该循环将在循环的每次迭代期间接受用户输入,即getLine。这是可能在main中实现还是通过参数传递中的getLine函数实现或根本不实现?我对Haskell来说还比较陌生,我已经全神贯注了,但是我不确定。显然,将使用模式匹配来退出它,但是如何获得用户输入。我试图自己解决这个问题,但每次失败。预先感谢。
答案 0 :(得分:4)
您必须使用IO monad进行功能,要进行循环,您只需进行递归调用,请查看以下示例:
-- This just wraps the getLine funtion but you could operate over the input before return the final result
processInput :: IO String
processInput = do
line <- getLine
return $ map toUpper line
-- This is our main loop, it handles when to exit
loop :: IO ()
loop = do
line <- processInput
putStrLn line
case line of
"quit" -> return ()
otherwise -> loop
-- main is the program entry point
main :: IO ()
main = do
putStrLn "Welcome to the haskel input example"
loop
这里有live example