В моем домашнем задании я должен определить логические операторы следующим образом:
Используя эту структуру данных:
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)
, ответ должен быть : Ложь
.
По словам моего учителя, функция должна быть вызвана в этом случае : &:
и должна получать типы MyBool
, поэтому я попытался реализовать вот так:
infixr 3 :&:
(:&:) :: MyBool -> MyBool -> MyBool
Cierto :&: x = x
Falso :&: x = Falso
, но когда Пытаюсь загрузить, там написано:
Invalid type signature
Я не знаю, что я здесь делаю не так.