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

kei*_*ter 3 haskell hugs

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

data Number = _Int Integer
            | _Rational Rational
            | _Float Double
    deriving(Eq,Show)
Run Code Online (Sandbox Code Playgroud)

用拥抱编译它失败,出现以下错误:

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

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

Chu*_*uck 13

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

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

GHC给出了更明确的错误:

types.hs:1:14: Not a constructor: `_Int'
Run Code Online (Sandbox Code Playgroud)