module Bool where import Data.Semigroup import Test.QuickCheck newtype BoolConj = BoolConj Bool deriving (Eq, Show) instance Semigroup BoolConj where (BoolConj True) <> (BoolConj True) = BoolConj True _ <> _ = BoolConj False instance Monoid BoolConj where mempty = BoolConj True mappend = (<>) instance Arbitrary BoolConj where arbitrary = fmap BoolConj arbitrary newtype BoolDisj = BoolDisj Bool deriving (Eq, Show) instance Semigroup BoolDisj where (BoolDisj False) <> (BoolDisj False) = BoolDisj False _ <> _ = BoolDisj True instance Monoid BoolDisj where mempty = BoolDisj False mappend = (<>) instance Arbitrary BoolDisj where arbitrary = fmap BoolDisj arbitrary