我在Haskell上完成了新手.我的Haskell脚本GHCi
,
Prelude> let a = putStrLn getLine
Run Code Online (Sandbox Code Playgroud)
发生这样的错误.
<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>
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用,我如何打印输入的东西stdin
?
eph*_*ent 14
putStrLn :: String -> IO ()
getLine :: IO String
Run Code Online (Sandbox Code Playgroud)
类型不匹配. getLine
是一个IO
动作,并putStrLn
采用一个普通的字符串.
您需要做的是绑定IO
monad中的行以将其传递给putStrLn
.以下是等效的:
a = do line <- getLine
putStrLn line
a = getLine >>= \line -> putStrLn line
a = getLine >>= putStrLn
Run Code Online (Sandbox Code Playgroud)