2010-03-17 82 views
3

我正在编写haskell中的一个小lisp解释器。在这个过程中,我定义了这个数据类型,以获得更少的类型数字。为什么Hugs在我的数据类型声明中抱怨`|`?

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

与拥抱编译此失败,出现以下错误:

ERROR "types.hs":16 - Syntax error in data type declaration (unexpected `|')

线16与在上面的代码中的第一|线。

+0

什么编译您使用的? GHCi(v 6.10.4)抱怨下划线,但是当我s/_/M /时,它编译得很好。 – perimosocordiae 2010-03-17 23:10:36

+0

我正在使用hugs98 200609-4。这确实是导致问题的下划线。 :) – keiter 2010-03-17 23:25:02

+8

正如一个侧面说明,我会建议几乎在任何情况下GHC超过拥抱。许多较老的文件都说Hugs对初学者更好,因为它拥有REPL,但GHCi实际上比Hugs提供更好的REPL并非如此。 – Chuck 2010-03-17 23:30:54

回答

13

拥抱在这里有点迂回。实际的问题不是|,而是在构造函数名称的开始处的下划线 - 它们不允许以下划线开头。这不仅仅是一个约定,构造函数以大写字母开始,而是Haskell语法的一部分。我最好猜测Hugs是什么“思考”是因为你的第一个构造函数没有正确命名,所以当你提供一个替代构造函数后,Hugs说:“等等,我没有看到一个有效的构造函数但是!发生了什么事?“

GHC提供了更清晰的错误:

types.hs:1:14: Not a constructor: `_Int' 
相关问题