1

代码:

main = do
  putChar 't'
  putChar 'e'
  putChar 'h'

当我运行上述代码时,我得到了

*Main> main
teh*Main>

但我期待

*Main> main
teh
*Main>

我的问题:为什么teh*Main来而不是teh然后*Main在另一行?

我正在使用带有haskell-mode的emacs23。

4

2 回答 2

3

putChar c仅将那个字符写入控制台。这就是它的目的。因此,除非您之后将换行符打印到控制台putCharputStr否则无论是使用 还是其他任何方法,以下输出都会转到同一行。行为与 C 相同,或者如果您cat的文件没有尾随换行符。它无处不在。唯一可行的替代方案(检查每个输出是否以换行符结尾是不可行的)是在 ghci 或 shell 提示符之前无条件地输出换行符,这会导致许多烦人的空白行。

于 2012-08-02T02:00:00.063 回答
2

如果它真的困扰你,你总是可以定义

putCharLn :: Char -> IO ()
putCharLn c = do putChar c
                 putChar '\n'

定义main如下:

main = do putChar 't'
          putChar 'e'
          putCharLn 'h'

现在:

*Main> main
teh
*Main> 
于 2012-08-02T05:23:29.957 回答