Определение логических операторов в Haskell

В моем домашнем задании я должен определить логические операторы следующим образом:
Используя эту структуру данных:

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

Я не знаю, что я здесь делаю не так.

5
задан Gilles 'SO- stop being evil' 2 October 2012 в 09:23
поделиться