宿題では、論理演算子を次のように定義する必要があります。
このデータ構造の使用:
data MyBool = Cierto|Falso deriving (Show,Eq) -- Cierto = True and Falso = False
data PQR = A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z deriving (Show,Eq)
data Formula = VarProp PQR
|Neg Formula -- logic not
|Formula :|: Formula -- logic or
|Formula :&: Formula -- logic and... etc
|Formula :->: Formula
|Formula :<->: Formula deriving (Show,Eq)
そして、与えられた数式がTrueかFalseかを教えてくれる関数を定義する必要があるので、たとえば、私が書く場合(Cierto :&: Falso)、答えは次のようになりますFalso。
私の先生によると、この場合は関数を呼び出す必要があり、型:&:を受け取るMyBool必要があるため、次のように実装しようとしました。
infixr 3 :&:
(:&:) :: MyBool -> MyBool -> MyBool
Cierto :&: x = x
Falso :&: x = Falso
しかし、私がそれをロードしようとすると、それは言います:
Invalid type signature
ここで何が間違っているのかわかりません。