getLine和readLn之间的区别

Sta*_*nko 5 io haskell

运行以下代码时,我没有遇到运行时错误:

printReverse :: IO ()
printReverse = do
    line <- getLine
    when (not $ null line) $
            do putStrLn $ reverse line
               printReverse
    return ()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行只是我更换了相同的代码getLinereadLn :: IO String,我得到一个解析错误.

码:

printReverse :: IO ()
printReverse = do
    line <- readLn :: IO String
    when (not $ null line) $
            do putStrLn $ reverse line
               printReverse
    return ()
Run Code Online (Sandbox Code Playgroud)

错误:

*** Exception: user error (Prelude.readIO: no parse)
Run Code Online (Sandbox Code Playgroud)

getLine和readLn之间的区别是什么?

Don*_*art 7

看看类型.

readLn :: Read a => IO a
Run Code Online (Sandbox Code Playgroud)

getLine :: IO String
Run Code Online (Sandbox Code Playgroud)

readLn根据结果​​类型的"读取"格式解析输入.这与格式相同show.

因此,您正在尝试以输入格式输入readHaskell字符串值,show这是令人困惑的,除非该字符串已经是双qyoted haskell格式.