我在Haskell上完成了新手。
我的Haskell脚本GHCi
,
Prelude> let a = putStrLn getLine
发生这样的错误。
<interactive>:1:17:
Couldn't match expected type `String'
against inferred type `IO String'
In the first argument of `putStrLn', namely `getLine'
In the expression: putStrLn getLine
In the definition of `a': a = putStrLn getLine
Prelude>
为什么不起作用,如何从stdin
打印输入内容?
答案 0 :(得分:14)
putStrLn :: String -> IO ()
getLine :: IO String
类型不匹配。 getLine
是IO
操作,putStrLn
采用纯字符串。
您需要做的是绑定IO
monad中的行,以便将其传递给putStrLn
。以下是等效的:
a = do line <- getLine
putStrLn line
a = getLine >>= \line -> putStrLn line
a = getLine >>= putStrLn