代码:
main = do
putChar 't'
putChar 'e'
putChar 'h'
当我运行上述代码时,我得到了
*Main> main
teh*Main>
但我期待
*Main> main
teh
*Main>
我的问题:为什么teh*Main来而不是teh然后*Main在另一行?
我正在使用带有haskell-mode的emacs23。
代码:
main = do
putChar 't'
putChar 'e'
putChar 'h'
当我运行上述代码时,我得到了
*Main> main
teh*Main>
但我期待
*Main> main
teh
*Main>
我的问题:为什么teh*Main来而不是teh然后*Main在另一行?
我正在使用带有haskell-mode的emacs23。
putChar c
仅将那个字符写入控制台。这就是它的目的。因此,除非您之后将换行符打印到控制台putChar
,putStr
否则无论是使用 还是其他任何方法,以下输出都会转到同一行。行为与 C 相同,或者如果您cat
的文件没有尾随换行符。它无处不在。唯一可行的替代方案(检查每个输出是否以换行符结尾是不可行的)是在 ghci 或 shell 提示符之前无条件地输出换行符,这会导致许多烦人的空白行。
如果它真的困扰你,你总是可以定义
putCharLn :: Char -> IO ()
putCharLn c = do putChar c
putChar '\n'
定义main
如下:
main = do putChar 't'
putChar 'e'
putCharLn 'h'
现在:
*Main> main
teh
*Main>