Почему интерпретатору Haskell (GHCI 7.10.3) нужны определения функций в выражении let, но компилятор Haskell (GHC 7.10.3) выдает ошибку парсера, если определение функции находится внутри выражения let?
Я прорабатываю «Learn You a Haskell for Great Good!» Первая функция ребенка - doubleMe: doubleMe x = x + x
Почему интерпретатор принимает это определение, если оно находится в выражении let, а в противном случае выдает ошибку синтаксического анализа при вводе '='? Между тем, если я компилирую ту же функцию из файла, почему GHC выдает ошибку синтаксического анализа, если определение функции находится в выражении let, и компилирует определение, если оно не входит в выражение let? Исходя из опыта работы с Lisp, я удивлен, что интерактивный Haskell, а также загрузка и компиляция файлов Haskell по-разному трактует эти определения.
1+1
была бы ошибкой, как иprint (2,3)
. Вместо этого GCHi решил использовать небольшое волшебство, чтобы принять как эти выражения, так иlet
определения. О том, почемуx=1
без let отклоняется - я не думаю, что есть четкий ответ на этот вопрос, за исключением того, что для этого потребуется больше магии. - person chi   schedule 17.10.2016doubleMe x = x + x
. Достаточно людей вроде вас жаловались, что добавили для этого особый случай. :) - person Alec   schedule 17.10.2016