所以我试图使用编译代码中的返回值将一行文本打印到终端窗口。该程序如下所示:
module Main
where
import System.IO
main = do
askForWords
askForWords = do
putStrLn "Pleas enter a word:"
word <- getLine
if word == ""
then return []
else do
rest <- askForWords
return (word ++ " " ++ rest)
Run Code Online (Sandbox Code Playgroud)
当我在 GHCi 中运行它时,它工作正常
*Main> main
Pleas enter a word:
Hello
Pleas enter a word:
World
Pleas enter a word:
"Hello World "
*Main>
Run Code Online (Sandbox Code Playgroud)
当我尝试运行 Unix 可执行文件时,程序不打印最后一个字符串
% /Users/tobyone/Workspace/Haskell/yaht/Yaht ; exit;
Pleas enter a word:
Hello
Pleas enter a word:
World
Pleas enter a word:
[Process completed]
Run Code Online (Sandbox Code Playgroud)
我试过askForWords在 main with 中打印出来,putStrLn但得到了错误
<interactive>:2:10: error:
Couldn't match type ‘IO [Char]’ with ‘[Char]’
...
...
Run Code Online (Sandbox Code Playgroud)
你不是在打印输出,你只是在返回它。您的可执行文件有效地忽略了 的返回值main,它通常具有IO ()强调这一点的类型。
module Main
where
import System.IO
main = do
result <- askForWords
putStrLn result
askForWords = do
putStrLn "Pleas enter a word:"
word <- getLine
if word == ""
then return []
else do
rest <- askForWords
return (word ++ " " ++ rest)Run Code Online (Sandbox Code Playgroud)
在 GHCi 中(就像大多数语言中的 REPL),表达式的值被打印到终端。
main 也可以更简单地定义为
main = askForWords >>= putStrLn
Run Code Online (Sandbox Code Playgroud)