为什么Hugs在我的数据类型声明中抱怨`|`?

时间:2010-03-17 23:05:40

标签: haskell hugs

我正在使用haskell编写一个小的lisp解释器。在此过程中,我定义了此数据类型,以获得较少类型的数字。

data Number = _Int Integer
            | _Rational Rational
            | _Float Double
    deriving(Eq,Show)

使用拥抱进行编译失败,并显示以下错误:

  

错误“types.hs”:16 - 数据类型声明中的语法错误(意外的“|”)

第16行是上面代码中第一个|的行。

1 个答案:

答案 0 :(得分:13)

拥抱在这里有点迂回曲折。实际问题不是|,而是构造函数名称开头的下划线 - 不允许以下划线开头。这不仅仅是一个约束,构造函数以大写字母开头,而是Haskell语法的一部分。

我最好猜测Hugs正在“思考”的是,因为你的第一个构造函数没有正确命名,后来当你提供另一个构造函数时,Hugs说,“等等,我还没见过有效的构造函数! 这是怎么回事?”

GHC给出了更明确的错误:

types.hs:1:14: Not a constructor: `_Int'