Ответ 1
Это связано с различной буферизацией в GHCi и GHC. GHCi имеет стандартный (стандартный поток ввода) с использованием NoBuffering
по умолчанию, а скомпилированные двоичные файлы GHC/runhaskell
используют LineBuffering
по умолчанию. Если вы явно делаете
hSetBuffering stdin NoBuffering
в вашей программе Haskell, вы сможете воспроизвести поведение GHCi. Если вы делаете
hSetBuffering stdin LineBuffering
в GHCi, у вас будет много нежелательных побочных эффектов, но можно воспроизвести поведение runhaskell
.