Подтвердить что ты не робот

Ошибка анализа синтаксиса haskell в шаблоне для n + k pattern

Я начал прокладывать себе путь через Erik Meijer 13-секционные лекции (и Graham Hutton slides), чтобы узнать Haskell.

На слайдах для главы 4, на стр. 13, он вводит синтаксис соответствия шаблону для шаблонов n + k. В частности, он говорит:

Как и в математике, функции на целых числах можно определить, используя n + k шаблоны, где n - целочисленная переменная, а k > 0 - целое число константа.

pred :: Int -> Int
pred (n+1) = n

Когда я попробовал это самостоятельно, в REPL я получил сообщение об ошибке:

*Main> let mypred (n+1) = n

<interactive>:65:13: Parse error in pattern: n + 1

Аналогично, если я попробую его в файле *.hs

mypred :: Int -> Int
mypred (n+1) = n

Компилятор дает аналогичную жалобу:

/Users/pohl/Code/praxis-haskell/helloworld.hs:14:9:
    Parse error in pattern: n + 1

Я не понимаю, как использовать n + k шаблоны?

4b9b3361

Ответ 1

Вы должны включить его с помощью -XNPlusKPatterns.

ghci -XNPlusKPatterns
Prelude> let mypred (n+1) = n
Prelude> mypred 2
1

Аналогично в файле hs.

{-# LANGUAGE NPlusKPatterns #-}

mypred :: Int -> Int
mypred (n+1) = n

После загрузки в ghci

*Main> mypred 2
1

Ответ 2

Я не понимаю, как использовать n + k шаблоны?

На самом деле, сегодня n+k шаблоны считаются плохой практикой. Основная причина этого в том, что синтаксис на самом деле не похож на что-либо еще в Haskell, часть + на самом деле не использует +, который находится в области видимости, в отличие от того, как работает нотация do. Кроме того, расширение viewpatterns является своего рода обобщением, которое полезно во многих других параметрах.

Здесь больше информации о том, почему он был удален.