haskell模式打印“*Main>&引用;在使用putChar后在同一行上?

haskell模式打印“*Main>&引用;在使用putChar后在同一行上?,haskell,emacs,haskell-mode,Haskell,Emacs,Haskell Mode,代码: 当我运行上述代码时,我得到 main = do putChar 't' putChar 'e' putChar 'h' 但我期待着 *Main> main teh*Main> 我的问题是:为什么teh*Main代替teh,然后*Main进入另一行 我在haskell模式下使用emacs23。putcharc只将一个字符写入控制台。这就是它的目的。因此,除非随后使用putChar、putStr或任何其他方法将换行符打印到控制台,否则以下输出将转到同一行。该行为与

代码:

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

main = do
  putChar 't'
  putChar 'e'
  putChar 'h'
但我期待着

*Main> main
teh*Main>
我的问题是:为什么teh*Main代替teh,然后*Main进入另一行


我在haskell模式下使用emacs23。

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

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

如果它真的困扰您,您可以定义它

*Main> main
teh
*Main>
定义
main
如下:

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

main = do putChar 't'
          putChar 'e'
          putCharLn 'h'
如果它真的困扰你,你可以定义它

*Main> main
teh
*Main>
定义
main
如下:

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

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

“因为没有换行符”:P(现在问题是谁对它负责。)@pst:所以,我必须接受它的原样,或者?你可以随时编辑.el,或者有一个设置。。我不使用haskell(或相关模式),但是:-)其他方法可能只是放置一个换行字符(\n应该足够)或强制它通过putStrLn。“因为没有换行”:P~(现在是谁负责的问题。)@pst:所以,我必须接受它,或者?好吧,你可以随时编辑.el,或者可能有一个设置。。我不使用haskell(或相关模式),但是:-)其他方法可能只是放置一个换行符(\n应该足够了)或强制它通过putstrn。