functor applicative 和 monad

Monad 函数式编程中的一个概念, 在 Haskell 和 Scala 语言中用的比较多。

这个概念来源于数学中的范畴学,过于学术化,我看国内的文章介绍的很多,但是准确、清晰而简要的介绍的文章却没有看到。

我也不准备介绍,因为我对它的理解也不够深,这里引用 Functors, Applicatives, And Monads In Pictures一文中的图片和总结,来加深一下自己的理解。

  • functors: you apply a function to a wrapped value using fmap or <$>
  • applicatives: you apply a wrapped function to a wrapped value using <*> or liftA
  • monads: you apply a function that returns a wrapped value, to a wrapped value using >>= or liftM

Functor 的作用就是应用一个函数到一个上下文中的值

Applicative 的作用则是应用一个上下文中的函数到一个上下文中的值

Monad 应用的是一个返回上下文的值的函数,将这个函数应用在一个上下文中的值上

这篇文章已经被翻译成中文: Functor, Applicative, 以及 Monad 的图片阐释
kotlin中文版: Kotlin 版图解 Functor、Applicative 与 Monad