在我的作业中,我必须按如下方式定义逻辑运算符:
使用此数据结构:
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)
而且我必须定义函数来告诉我给定公式是真还是假,例如,如果我写(Cierto :&: Falso)
答案必须是:Falso
。
根据我的老师的说法,在这种情况下必须调用函数:&:
并且必须接收MyBool
类型,所以我尝试像这样实现:
infixr 3 :&:
(:&:) :: MyBool -> MyBool -> MyBool
Cierto :&: x = x
Falso :&: x = Falso
但是当我尝试加载它时,它说:
Invalid type signature
我不知道我在这里做错了什么。