Приглашение ввода печатается после ввода Haskell
При выполнении следующего кода не происходит вывода приглашения к вводу перед непосредственно вводом (что ожидается). Программа сначала ждёт ввод, а только после него выводит приглашение и строку с использованием введённого имени. Что я делаю не так?
main :: IO ()
main = do
putStrLn "Please enter your name:"
name <- getLine
putStrLn ("Hello, " ++ name ++ ", how are you?")
Вывод:
5
Please enter your name:
Hello, 5, how are you?
Ответы (1 шт):
Это просто буферизация консоли так работает. По умолчанию консоль накапливает вывод пока не случится что-нибудь неординарное - например ввод или достаточно много вывода накопится, - и тогда печатает всё, что накопилось. По моему опыту это так работает только в Windows, и я думаю, что это баг.
Но это легко починить: вы можете явно указать, чтобы буфер копился только до ближайшего перевода строки. Чтобы это сделать, воспользуйтесь функцией hSetBuffering:
import System.IO (BufferMode (LineBuffering), hSetBuffering)
main = do
hSetBuffering stdout LineBuffering
...