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> 
Другие вопросы по тегам