我有以下数据结构:
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
我只在我的文件中定义了一次而没有其他地方。
答案 0 :(得分:4)
您定义了两个BExp
构造函数,就像编译器说的那样:
data BExp = BConst Bool | Not BExp | BExp And BExp | BExp Or BExp
^ ^
| |
Here ... and here
其中一个需要更改为新的构造函数名称。
修改强>
根据您的评论,您确实希望使用And
和Or
作为构造函数名称,如下所示:
data BExp = BConst Bool | Not BExp | And BExp BExp | Or BExp BExp
然后您可以将它们用作中缀函数,如下所示:
someBExp = (BConst True) `And` (BConst False)