Functor, Applicative 和 Monad

来自wrc's Wiki
Weirane讨论 | 贡献2021年7月11日 (日) 03:21的版本 (建立内容为“Category:Haskell == 关系 == <code>Monad</code> 是 <code>Applicative</code> 的 superclass,<code>Applicative</code> 是 <code>Functor</code> 的 supercla…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

关系

MonadApplicative 的 superclass,ApplicativeFunctor 的 superclass。

相关函数的关系

对于一个 Monad

  • liftMfmap 可互换
  • ap(<*>) 可互换
  • returnpure 可互换

运用

需要给一个类型实现 Monad 时,应从 Functor 开始实现,再实现 ApplicativeMonad。如下

instance Functor Foo where
    fmap = -- etc.

instance Applicative Foo where
    pure = -- etc.
    (<*>) = -- etc.

instance Monad Foo where
    (>>=) = -- etc.

但由于 returnMonad 版本的 pureapMonad 版本的 (<*>),为了方便也可如下实现

instance Monad Foo where
    return = -- etc.
    (>>=) = -- etc.

instance Applicative Foo where
    pure = return
    (<*>) = ap

instance Functor Foo where
    fmap = liftM