コード:
main = do
putChar 't'
putChar 'e'
putChar 'h'
上記のコードを実行している間、私は得ています
*Main> main
teh*Main>
しかし、私は期待しています
*Main> main
teh
*Main>
私の質問: tehの代わりに teh*Main が来て、次に* Mainが別の行にあるのはなぜですか?
haskell-mode で emacs23 を使用しています。
コード:
main = do
putChar 't'
putChar 'e'
putChar 'h'
上記のコードを実行している間、私は得ています
*Main> main
teh*Main>
しかし、私は期待しています
*Main> main
teh
*Main>
私の質問: tehの代わりに teh*Main が来て、次に* Mainが別の行にあるのはなぜですか?
haskell-mode で emacs23 を使用しています。
putChar c
その1文字だけをコンソールに書き込みます。それが意図されたものです。したがって、後で改行をコンソールに出力しない限り、putChar
、putStr
またはその他の方法を使用しても、次の出力は同じ行に出力されます。動作は、C の場合と同じです。または、cat
末尾に改行がないファイルの場合も同様です。どこにでもあります。実行可能な唯一の代替手段 (各出力が改行で終わっているかどうかを確認することはできません) は、無条件に ghci またはシェル プロンプトの前に改行を出力することです。
それが本当にあなたを悩ませているなら、あなたはいつでも定義することができます
putCharLn :: Char -> IO ()
putCharLn c = do putChar c
putChar '\n'
main
次のように定義します。
main = do putChar 't'
putChar 'e'
putCharLn 'h'
そして今:
*Main> main
teh
*Main>