Haskell-如何制作包含getLine的循环?

时间:2019-04-19 02:09:56

标签: haskell function-call

我想创建一个循环,该循环将在循环的每次迭代期间接受用户输入,即getLine。这是可能在main中实现还是通过参数传递中的getLine函数实现或根本不实现?我对Haskell来说还比较陌生,我已经全神贯注了,但是我不确定。显然,将使用模式匹配来退出它,但是如何获得用户输入。我试图自己解决这个问题,但每次失败。预先感谢。

1 个答案:

答案 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