haskell-mode打印“* Main>”使用putChar后在同一行?

时间:2012-08-02 00:33:33

标签: haskell emacs haskell-mode

代码:

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

当我运行上述代码时,我正在

*Main> main
teh*Main>

但我期待

*Main> main
teh
*Main>

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

我正在使用emacs23和haskell-mode。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

如果真的困扰你,你可以随时定义

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

定义main,如:

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

现在:

*Main> main
teh
*Main>