title: 【函数式】Monads模式初探——Monad概念
date: 2016-03-01 10:12:21
category: Functional Programming
tags:
- Scala
- Functional Programming
单子
单子(Monad)是一种将函子组合应用的方法。在计算机科学里,单子经常用来代表计算(computation)。单子能用来把与业务无关的通用程序行为抽象出来,比如有用来处理并行(Future)、异常(Option和Try等)、甚至副作用的单子。
单子的flatMap和unit操作作为构建数据类型的基本操作,可以实现很多复杂的高阶函数。
单子的程序描述
Monad定义了unit和flatMap两个函数。Monad都是Functor,因为我们可以用flatMap+unit来实现map。我们可以定义Monad继承自Functor特质。
trait Functor[F[_]] {
def map[A, B](fa: F[A])(f: A => B): F[B]
}
trait Monad[M[_]] extends Functor[M] {
def unit[A](a: A): M[A]
def flatMap[A, B](ma: M[A])(f: A => M[B])