Если проблема в том, что я думаю, то ваша проблема в том, что IO Хаскелла буферизируется: этот вопрос объясняет, что происходит. Когда вы запускаете скомпилированную программу на Haskell, GHC сохраняет вывод в буфере и только периодически сбрасывает его на экран; это происходит, если (а) буфер переполнен, (б) если печатается новая строка, или (в), если вы вызываете hFlush stdout
.
Другая проблема, с которой вы можете столкнуться, заключается в том, что getChar
может не сработать, пока не будет прочитана новая строка, но тогда новая строка будет в вашем входном потоке; Вы могли бы решить эту проблему с помощью дополнительного getChar
, чтобы проглотить новую строку, но, вероятно, должен быть лучший способ.