我正在运行以下代码来演示图书中的模式匹配:
lucky :: (Num a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"
lucky x = "Sorry, you're out of luck, pal!"
这会出现以下错误:
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错误是什么 - 输入'='的解析错误是什么意思?
答案 0 :(得分:0)
Eq
used to be a constraint on Num
:
class (Eq a, Show a) => Num a where
class Num a where
因此,使用相等(包括模式匹配,隐式相等)必须带有Eq
约束。
至于你的具体错误信息,我怀疑这是一个糟糕的IDE集成,但GHC中预期行为的改变将导致其他人试图诊断并回答你的问题时的混淆,如果没有明确的话考虑到了。
答案 1 :(得分:0)
显示问题的原因是从IDE中无法过滤掉的PDF中复制的垃圾空白。 (感谢大家的帮助)。