Functor, Applicative 和 Monad
Weirane(讨论 | 贡献)2021年7月11日 (日) 03:21的版本 (建立内容为“Category:Haskell == 关系 == <code>Monad</code> 是 <code>Applicative</code> 的 superclass,<code>Applicative</code> 是 <code>Functor</code> 的 supercla…”的新页面)
关系
Monad
是 Applicative
的 superclass,Applicative
是 Functor
的 superclass。
相关函数的关系
对于一个 Monad
:
liftM
与fmap
可互换ap
与(<*>)
可互换return
与pure
可互换
运用
需要给一个类型实现 Monad
时,应从 Functor
开始实现,再实现 Applicative
和 Monad
。如下
instance Functor Foo where
fmap = -- etc.
instance Applicative Foo where
pure = -- etc.
(<*>) = -- etc.
instance Monad Foo where
(>>=) = -- etc.
但由于 return
是 Monad
版本的 pure
,ap
是 Monad
版本的 (<*>)
,为了方便也可如下实现
instance Monad Foo where
return = -- etc.
(>>=) = -- etc.
instance Applicative Foo where
pure = return
(<*>) = ap
instance Functor Foo where
fmap = liftM