getLine
ожидает ввода символа новой строки (\n
), потому что, что, если пользователь набрал набор символов, но никогда не нажимал клавишу ввода?Тогда было бы ошибкой, если часть «строки» уже была обработана, если эта «строка» в конце концов не была строкой.
Вместо этого следует использовать getContents
, которая будет возвращать все, что естьнабирается в терминале.
Кроме того, вы используете следующую строку:
then hGetContents =<< openFile (head args) ReadMode
Это откроет файл и никогда не закроет его.Это хорошо для вашей короткой программы, но в будущем лучше бы привыкнуть к этому:
then readFile $ head args