Haskell:验证构造函数是否为Monad

时间:2015-12-12 16:43:19

标签: haskell monads

我有一个类型

data Maybe a = Nothing | Just a

我需要验证以下类型构造函数Maybe是否为Monad

instance Monad Maybe where
        return x = Just x
        Nothing >>= f = Just (f (Nothing))
        (Just x) >>= f = f x

请给我一些指示如何完成上述任务。

由于

1 个答案:

答案 0 :(得分:5)

为此,您必须验证monad laws。它们有几种(等价的)形式,最接近Haskell monads

x >>= return     =  x
return x >>= f   =  f x
(x >>= f) >>= g  =  x >>= (\y -> f y >>= g)

从第一个开始,应用>>=return的定义。您可能希望按案例进行操作:xNothing,或者Just a为某个值a ...