2012-08-02 62 views
1

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

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

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

*Main> main 
teh*Main> 

但我期待

*Main> main 
teh 
*Main> 

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

我正在使用ekcs23与haskell模式。

+0

“因为没有换行” :P〜(现在谁负责..是问题。) – 2012-08-02 00:37:10

+0

@pst:那么,我必须接受它,因为它或? – Optimight 2012-08-02 00:44:57

+0

那么,你总是可以编辑.el,或者可能有一个设置..我不使用haskell(或相关的模式),但:-)其他的方法可能只是把一个换行符字符(\ n应该足够)或通过putStrLn强制它。 – 2012-08-02 00:58:36

回答

3

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

2

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

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

定义main像:

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

现在:

*Main> main 
teh 
*Main>