Scala 中的高级函数式编程与并发工具
1. 函数式编程中的 Monad
在函数式编程里,Monad 是一个关键概念。下面是一些相关代码示例:
import scala.language.higherKinds
val seqf: Int => Seq[Int] = i => 1 to i
val optf: Int => Option[Int] = i => Option(i + 1)
SeqM.flatMap(List(1,2,3))(seqf) // Seq[Int]: List(1,1,2,1,2,3)
SeqM.flatMap(List.empty[Int])(seqf) // Seq[Int]: List()
OptionM.flatMap(Some(2))(optf) // Option[Int]: Some(3)
OptionM.flatMap(Option.empty[Int])(optf) // Option[Int]: None
flatMap 可以从左侧容器中提取类型为 A 的元素,并将其绑定到新容器实例中的新元素上。它和 map 一样,减轻了从 M[A] 中提取元素的负担。不过,函数参数似乎需要知道如何构建新的 M[B],但实际上可以调用 unit 来完成。
Monad 遵循以下法则:
- 单位元法则 :
- flatMap(unit(x))(f) == f(x) ,其中 x
超级会员免费看
订阅专栏 解锁全文
761

被折叠的 条评论
为什么被折叠?



