【发布时间】:2020-07-07 00:18:26
【问题描述】:
所以我尝试使用编译代码中的返回值将一行文本打印到终端窗口。程序如下所示:
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)
当我在 GHCi 中运行它时,它运行良好
*Main> main
Pleas enter a word:
Hello
Pleas enter a word:
World
Pleas enter a word:
"Hello World "
*Main>
当我尝试运行 Unix 可执行文件时,程序不打印最后一个字符串
% /Users/tobyone/Workspace/Haskell/yaht/Yaht ; exit;
Pleas enter a word:
Hello
Pleas enter a word:
World
Pleas enter a word:
[Process completed]
我尝试使用 putStrLn 在 main 中打印出 askForWords 但出现错误
<interactive>:2:10: error:
Couldn't match type ‘IO [Char]’ with ‘[Char]’
...
...
【问题讨论】:
-
你是如何尝试使用
putStrLn的?看来你做错了,但如果你不表明你的错误,我们不知道如何纠正它。 -
GHCi 有一些魔力。当您编写
1+2时,它实际上运行print (1+2)。当您编写return (1+2)时,它实际上运行do it <- return (1+2) ; print it。在您的代码中,您在main中运行askForWords,但默默地丢弃它的结果。 GHCi 会将其转换为do it <- askForWords ; print it,但在程序中您必须明确说明(并且可能使用putStrLn而不是print)。