Как я использую несколько где пункты в GHCi?

Я играю вокруг с GHCi впервые, и я испытываю некоторые затруднения при записи многострочных функций. Мой код следующие:

Prelude> :{
Prelude| let diffSquares lst = abs $ squareOfSums lst - sumOfSquares lst
Prelude|   where
Prelude|     squareOfSums lst = (fst (sumsAndSquares lst))^2
Prelude|     sumOfSquares lst = snd (sumsAndSquares lst)
Prelude|     sumsAndSquares = foldl (\(sms,sqrs) x -> (sms+x,sqrs+x^2)) (0,0)
Prelude| :}

Это дает следующую ошибку:

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

Кто-то мог любезно указать на меня в направлении того, что я пропускаю?

19
задан T.R. 18 June 2010 в 07:35
поделиться

1 ответ

Из справочного руководства ghci (http://www.haskell.org/ghc/docs/6.10.4/html/users_guide/interactive-evaluation.html):

Такие многострочные команды могут использоваться с любой командой GHCi, и строки между :{ и :} просто объединяются в одну строку для интерпретации. Это подразумевает, что каждая такая группа при объединении должна образовывать одну допустимую команду, и что не используется правило компоновки.

Поэтому вы должны вставить точку с запятой между каждым определением, например,

Prelude> :{
Prelude| let a x = g
Prelude|   where
Prelude|     g = p x x;      {- # <----- # -}
Prelude|     p a b = a + b
Prelude| :}

Edit: It seems you need a pair of braces instead in the recent version of GHCi.

Prelude> :{
Prelude| let { a x = g
Prelude|   where
Prelude|     g = p x x
Prelude|     p a b = a + b
Prelude| }
Prelude| :}
Prelude> a 5
10
30
ответ дан 30 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: