运行以下代码时,我没有遇到运行时错误:
printReverse :: IO ()
printReverse = do
line <- getLine
when (not $ null line) $
do putStrLn $ reverse line
printReverse
return ()
Run Code Online (Sandbox Code Playgroud)
但是,当我运行只是我更换了相同的代码getLine有readLn :: 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之间的区别是什么?
看看类型.
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格式.
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |