2017-02-12 10 views
1

По какой-то причине Haskell на моей машине никогда не возвращается с любого вызова getLine. Например, я попытался запустить следующий код прямо из Learn You в Haskell для Добра:Haskell не возвращается с getLine

main = do 
    putStrLn "Hello, what's your name?" 
    name <- getLine 
    putStrLn ("Hey " ++ name ++ ", you rock!") 

Когда я запускаю его, первая строка печатается, и я вижу, мой вход, когда я набираю имя, однако когда я нажимаю Enter, программа просто блокирует его и никогда не печатает окончательную строку.

Как это исправить?

редактировать: Я бегу это от Блистательной IDE, возможно, что-то делать с ним

+0

Как вы используете программу? Из IDE/редактора (какой?) Или из командной строки (какой эмулятор терминала, ОС и т. Д.)? И когда вы говорите, что это блокирует, это означает, что программа продолжает работать (т. Е. Это не значит, что окно (если оно есть) просто закрывается или вы возвращаетесь в командную строку), он просто не производит вывод, правильно? Перемещает ли курсор на следующую строку, когда вы нажимаете кнопку ввода, или это так, как будто вы даже не нажали кнопку ввода? – sepp2k

+0

Спасибо, что спросил, я должен был упомянуть об этом. Я запускаю его из среды IDE: Sublime – misja111

ответ

6

После этого быстрый поиск как Sublime пробеги программы, я нашел a youtube video (редактирование: и this SO post), который говорит, что Функция «запуска программы» Sublime может отображать только вывод и не способна считывать ввод.

Похоже, вам нужно будет запускать свою программу из командной строки или из GHCi, используя :main. Последнее может быть самым удобным, так как Sublime фактически поддерживает вкладку GHCi, поэтому вы все равно можете делать все, начиная с Sublime.

3

Это, кажется, ограничение в команде Sublime Build (предполагая, что это то, что вы используете).

Sublime выполняет сценарий с использованием runhaskell, но, по-видимому, он не захватывает STDIN (что делает результаты с точки зрения смысла, как правило, доступными только для чтения, а не интерактивный сеанс).

Решение: запустить скрипт из командной строки с

runhaskell script.hs 

и все работает, как ожидалось