我正在使用haskell编写一个小的lisp解释器。在此过程中,我定义了此数据类型,以获得较少类型的数字。
data Number = _Int Integer
| _Rational Rational
| _Float Double
deriving(Eq,Show)
使用拥抱进行编译失败,并显示以下错误:
错误“types.hs”:16 - 数据类型声明中的语法错误(意外的“|”)
第16行是上面代码中第一个|
的行。
答案 0 :(得分:13)
拥抱在这里有点迂回曲折。实际问题不是|
,而是构造函数名称开头的下划线 - 不允许以下划线开头。这不仅仅是一个约束,构造函数以大写字母开头,而是Haskell语法的一部分。
我最好猜测Hugs正在“思考”的是,因为你的第一个构造函数没有正确命名,后来当你提供另一个构造函数时,Hugs说,“等等,我还没见过有效的构造函数! 这是怎么回事?”
GHC给出了更明确的错误:
types.hs:1:14: Not a constructor: `_Int'