타입 Set :: * → *도 이론상 모나드이니까,

이것도 이론상 모나드 아닌가요?

class Logical a where some :: (a -> Bool) -> Bool newtype Pred a = Pred { runPred :: a -> Bool } deriving () instance Monad Pred where return a = Pred go where go a' = a == a' x >>= f = Pred go where go b = let condition a = runPred x a && runPred (f a) b in some condition fail _ = Pred go where go _ = False data Nat = Zero | Succ Nat deriving (Eq, Logical) plus :: Nat -> Nat -> Pred Nat plus x Zero = do return x plus x (Succ pr) = do y <- plus x pr return (Succ y)