module Logic.Connectives where
import Data.Monoid
import Data.Foldable
import Data.Traversable
import Data.Typeable
import Data.Generics
import Data.Binary
import Control.Basics
import Control.Monad.Disj
import Control.DeepSeq
newtype Conj a = Conj { getConj :: [a] }
deriving (Monoid, Foldable, Traversable, Eq, Ord, Show, Binary,
Functor, Applicative, Monad, MonadPlus, Typeable, Data, NFData)
newtype Disj a = Disj { getDisj :: [a] }
deriving (Monoid, Foldable, Traversable, Eq, Ord, Show, Binary,
Functor, Applicative, Monad, MonadPlus, Typeable, Data, NFData)
instance MonadDisj Disj where
contradictoryBecause _ = Disj mzero
disjunction m1 m2 = Disj $ getDisj m1 `mplus` getDisj m2