2016-12-19 15 views
0

私は次のようなデータ構造を有する:複数の宣言

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

(EQとショーを導出)

ブール式を定義していますが、私は次のエラーを取得するコンパイルするたびに:

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

私は私のファイルに一度、どこにもそれを定義しています。これらの

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

一つは、新しいコンストラクタ名に変更する必要があります。

+0

「データBExp = BConst Bool | BExpではない| BExp '' And'' BExp | BExp「Or」「BExp」。バッククォートは普通の名前を中置演算子に変えることができます。 _私は二重のものを持っている単一のバックティックを使用する - 私はMarkdownショーを得る方法を理解することができなかった単一のbackticks._ – ach

+0

思い出してくれてありがとう! – Karatawi

答えて

4

あなたは、コンパイラが言う同じように、定義された2つのBExpコンストラクタを持っています。

編集

あなたのコメントをもとに、あなたは本当にこのように、コンストラクタ名としてAndOrを使用したい:

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

次のようにして、その後、中置関数としてそれらを使用することができます。

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

だから私はこれらの2つを書くと: 'とBExp BExp'それは解決する必要がありますか? – Karatawi

+0

はい。その場合、あなたのコンストラクタ名は 'And'です(あなたもそれを変更すると仮定して' Or')。 –

+0

それはうまくいった、ありがとう! – Karatawi