我正在使用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)