“BExp”的多个声明

时间:2016-12-19 16:03:48

标签: haskell

我有以下数据结构:

data BExp = BConst Bool | Not BExp | BExp And BExp | BExp Or BExp

(导出Eq和Show)

定义了一个布尔表达式,但每当我编译时,我都会收到以下错误:

Multiple declarations of 'BExp' Declared at: PData.hs:9:38 PData.hs:9:54

我只在我的文件中定义了一次而没有其他地方。

1 个答案:

答案 0 :(得分:4)

您定义了两个BExp构造函数,就像编译器说的那样:

data BExp = BConst Bool | Not BExp | BExp And BExp | BExp Or BExp
                                     ^               ^
                                     |               |
                                    Here         ... and here

其中一个需要更改为新的构造函数名称。

修改

根据您的评论,您确实希望使用AndOr作为构造函数名称,如下所示:

data BExp = BConst Bool | Not BExp | And BExp BExp | Or BExp BExp

然后您可以将它们用作中缀函数,如下所示:

someBExp = (BConst True) `And` (BConst False)