代碼:使用putChar後,haskell-mode在同一行打印「* Main>」?
main = do
putChar 't'
putChar 'e'
putChar 'h'
當我運行上述代碼中,我得到
*Main> main
teh*Main>
但我期待
*Main> main
teh
*Main>
我的問題:爲什麼德*主要來而不是teh然後*主要在另一行?
我正在使用ekcs23與haskell模式。
代碼:使用putChar後,haskell-mode在同一行打印「* Main>」?
main = do
putChar 't'
putChar 'e'
putChar 'h'
當我運行上述代碼中,我得到
*Main> main
teh*Main>
但我期待
*Main> main
teh
*Main>
我的問題:爲什麼德*主要來而不是teh然後*主要在另一行?
我正在使用ekcs23與haskell模式。
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>
「因爲沒有換行」 :P〜(現在誰負責..是問題。) – 2012-08-02 00:37:10
@pst:那麼,我必須接受它,因爲它或? – Optimight 2012-08-02 00:44:57
那麼,你總是可以編輯.el,或者可能有一個設置..我不使用haskell(或相關的模式),但:-)其他的方法可能只是把一個換行符字符(\ n應該足夠)或通過putStrLn強制它。 – 2012-08-02 00:58:36