n + k模式的模式中的haskell解析错误

时间:2013-01-10 04:13:26

标签: haskell pattern-matching ghci

我已经开始通过Erik Meijer的13-part lectures(以及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模式?

2 个答案:

答案 0 :(得分:34)

您必须按-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

答案 1 :(得分:9)

  

我不明白如何使用n + k模式?

实际上,现在n+k模式被认为是不好的做法。主要原因是语法在Haskell中看起来并不像其他任何东西,+部分实际上并没有使用范围内的+,不像{{1符号有效。此外,viewpatterns扩展程序是一种在许多更多设置中有用的泛化。

有关其删除原因的更多信息here