Ошибка разбора ошибки Haskell на входе'='


Я новичок в Haskell и после запуска ghci пробовал:

f x = 2 * x

и я получил:

<interactive>:1:4: parse error on input `='

чего я не понимаю.

как ни странно, это хорошо работало раньше. Я полагаю, что я неправильно настроил Haskell. Переустановка ghc6 не решает проблему.

для информации я использую Ubuntu 10.4, а версия ghc6 - 6.12.1-12

4 106

4 ответа:

В GHCi 7.x или ниже, вам нужно let чтобы определить вещи в нем.

Prelude> let f x = x * 2
Prelude> f 4
8

начиная с GHC 8.0.1,привязки верхнего уровня поддерживаются в GHCi, поэтому код OP будет работать без изменений.

GHCi, version 8.0.1.20161213: http://www.haskell.org/ghc/  :? for help
Prelude> f x = x * 2
Prelude> f 4
8

при вводе в исходный файл Haskell,

f x = 2 * x

- это правильно.

когда вы вводите непосредственно в ghci, вам нужно ввести let в начале строки:

let f x = 2 * x

хорошее эмпирическое правило для использования ghci заключается в том, что любой код, который вы вводите, должен соответствовать семантике do-block; То есть вы можете предположить синтаксически что вы программируете в монаде IO (если это новая терминология, не волнуйтесь! Я настоятельно рекомендую прочитать это учебник).

этой ответ иллюстрирует этот момент примером и может обеспечить более глубокое понимание природы IO и ghci.

начиная с GHC 8.0.1 это больше не будет генерировать ошибку.