代码:
main = do
putChar 't'
putChar 'e'
putChar 'h'
当我运行上述代码时,我正在
*Main> main
teh*Main>
但我期待
*Main> main
teh
*Main>
我的问题:为什么 teh * Main 而不是 teh ,然后 * Main 在另一行?
我正在使用emacs23和haskell-mode。
答案 0 :(得分:3)
putChar c
只将一个字符写入控制台。这就是它的目的。因此,除非您之后在控制台上打印换行符,无论是使用putChar
,putStr
还是其他任何方法,以下输出都会转到同一行。行为与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>