3

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

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

用 hugs 编译它失败并出现以下错误:

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

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

4

1 回答 1

13

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

关于 Hugs 的“想法”,我最好的猜测是,由于您的第一个构造函数没有正确命名,当您之后提供替代构造函数时,Hugs 说,“等等,我还没有看到有效的构造函数!发生了什么上?”

GHC 给出了更清晰的错误:

types.hs:1:14: Not a constructor: `_Int'
于 2010-03-17T23:19:54.137 回答