2013-06-02 2 views
3

Я только что написал свою первую программу Haskell, но есть ошибка, которую я не могу понять. Я думаю, что это правильно, потому что я просто написал это, как пример из книги. Может ли кто-нибудь помочь мне, пожалуйста?Haskell: ошибка синтаксического анализа на входе 'putStrLn'

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

Сообщение об ошибке: ошибка

синтаксического анализа на входе 'putStrLn'

Это странно.

+4

Проверьте свои пробелы, чтобы убедиться, что в нем нет символов табуляции (см., Например, [этот вопрос] (http://stackoverflow.com/questions/16870038/haskell-syntax-error-for-where-statement)). – hammar

+0

ОН БОГ! Большое спасибо! Оно работает! Я думаю, что это немного сложно. : D – Mel

+0

В стороне: это не похоже на полное сообщение об ошибке. Ошибки GHC имеют номер строки и столбца. Это было бы проще для людей (включая вас!) С этой информацией, поэтому обязательно указывайте полное сообщение об ошибке. :-) – shachaf

ответ

7

Хотя невозможно сказать из вашего опубликованного кода, потому что SO конвертирует вкладки в пробелы, по крайней мере, некоторое время, проблема в том, что вы вводите символ символа табуляции перед putStrLn вместо четырех пробелов, как и для двух других линий в вашем блоке do, или наоборот.

Все утверждения в блоке do должны начинаться с одного и того же пробела, а не просто отображаться визуально. Если вы используете текстовый редактор, который может отображать литеральные вкладки особым образом, настройте его для этого; это избавит вас от некоторых головных болей.

+0

Да, это проблема. Я действительно этого не замечал, когда писал. Ваш ответ действительно полезен. Спасибо! – Mel

+2

@Mel: На самом деле вы можете смешивать вкладки и пробелы в разных комбинациях при отступы нескольких строк; важная вещь здесь состоит в том, что [Отчет Haskell] (http://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3) указывает, что символ табуляции насчитывает 8 пробелов, а не 4, как вам кажется настройте свой редактор. – yatima2975