我有一个类型
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
请给我一些指示如何完成上述任务。
由于
答案 0 :(得分:5)
为此,您必须验证monad laws。它们有几种(等价的)形式,最接近Haskell monads
x >>= return = x
return x >>= f = f x
(x >>= f) >>= g = x >>= (\y -> f y >>= g)
从第一个开始,应用>>=
和return
的定义。您可能希望按案例进行操作:x
为Nothing
,或者Just a
为某个值a
...