与“学习haskell”中的信息相反,在我的Windows系统上,ghci将CTRL-D
转换为EOT
,而不是EOF
。
因此,当我执行以下操作时:
input <- getContents
doSomething input
,其中doSomething
是使用输入的函数。
这样做,我必须按CTRL-Z
来结束输入文本,这是有道理的,因为getContents
用于过程管道...
但是,如果我第二次重复上述步骤,则会失败,因为stdin
已关闭。
因此,在浏览System.IO时,我找不到getContents
的替代方案,它将对EOT
做出反应。
我是否必须自己编写这样的函数,或者可以在另一个软件包中找到它?
顺便说一句,我使用的GHCI版本是8.2.2
。
另外,我不希望单行处理。我知道getLine
,但这不是我想要的。
答案 0 :(得分:1)
这是我想要的功能:
getContentsEOT :: IO String
getContentsEOT =
getChar >>= \c ->
if c == '\EOT'
then return ""
else getContentsEOT >>= \s ->
return (c:s)