haskell-mode печатает "*Main>" в той же строке после использования putChar?
Код:
main = do
putChar 't'
putChar 'e'
putChar 'h'
Пока я запускаю вышеупомянутый код, я получаю
*Main> main
teh*Main>
Но я ожидаю
*Main> main
teh
*Main>
Мой вопрос: почему вместо основного идет " Main", а затем " Main" в другой строке?
Я использую emacs23 с haskell-mode.
2 ответа
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>