module Pandora.Pattern.Object.Setoid (Boolean (..), (&&), (||), (?), not, bool, Setoid (..)) where
infixr ||
infixr 1 ?
infixr 3 &&
infix 4 ==, /=
data Boolean = True | False
(&&) :: Boolean -> Boolean -> Boolean
True && True = True
_ && _ = False
(||) :: Boolean -> Boolean -> Boolean
True || _ = True
_ || True = True
_ || _ = False
not :: Boolean -> Boolean
not True = False
not False = True
bool :: a -> a -> Boolean -> a
bool x _ False = x
bool _ y True = y
(?) :: Boolean -> a -> a -> a
(?) True x _ = x
(?) False _ y = y
class Setoid a where
{-# MINIMAL (==) #-}
(==) :: a -> a -> Boolean
(/=) :: a -> a -> Boolean
(/=) x y = not (x == y)