这个Haskell错误 - 输入'='的解析错误是什么意思?

时间:2017-10-31 10:40:29

标签: haskell pattern-matching

我正在运行以下代码来演示图书中的模式匹配:

lucky :: (Num a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"
lucky x = "Sorry, you're out of luck, pal!"

enter image description here

这会出现以下错误:

parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'

我可以在其他类似的情况下看到这样的错误是由于Haskell的语法改变以使旧书无效而引起的。

自编写本书以来,Haskell的语法是否已更改为使此代码无效?

我的问题是:这个Haskell错误是什么 - 输入'='的解析错误是什么意思?

2 个答案:

答案 0 :(得分:0)

Eq used to be a constraint on Num

class (Eq a, Show a) => Num a where

This is no longer the case

class Num a where

因此,使用相等(包括模式匹配,隐式相等)必须带有Eq约束。

至于你的具体错误信息,我怀疑这是一个糟糕的IDE集成,但GHC中预期行为的改变将导致其他人试图诊断并回答你的问题时的混淆,如果没有明确的话考虑到了。

答案 1 :(得分:0)

显示问题的原因是从IDE中无法过滤掉的PDF中复制的垃圾空白。 (感谢大家的帮助)。