深入理解 Monad:法则、实例与意义
1. Monad 组合子与练习
在探索 Monad 的过程中,我们会遇到一些有趣的组合子和练习。首先思考 replicateM 对于不同类型 F 的行为。例如,在 List 单子和 Option 单子中,它的表现会有所不同。 replicateM 通常用于重复执行某个操作多次,并将结果组合起来。
还有一个组合子 product ,它可以将两个生成器转换为一个生成对的生成器。对于任何单子 F ,可以这样实现 product :
extension [A](fa: F[A]) def product[B](fb: F[B]): F[(A, B)] =
fa.map2(fb)((_, _))
我们还可以实现 filterM 函数,它类似于 filter ,但接受的是一个返回 F[Boolean] 的函数:
def filterM[A](as: List[A])(f: A => F[Boolean]): F[List[A]]
2. Monad 法则
Monad 有两个重要的法则:
超级会员免费看
订阅专栏 解锁全文
39

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



