2012-08-02 20 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>