深入理解函子(Functor)与单子(Monad)
1. 抽象接口的引入
在编程中,我们常常会遇到代码重复的问题。为了解决这个问题,我们可以引入抽象接口,将一些通用的操作抽象出来,从而避免代码的重复编写。这里我们将介绍两个重要的抽象接口:函子(Functor)和单子(Monad)。
2. 函子(Functor)
2.1 泛化 map 函数
在之前的编程实践中,我们为不同的数据类型实现了 map 函数,例如 Gen 、 Parser 和 Option :
extension [A](ga: Gen[A])
def map[B](f: A => B): Gen[B]
extension [A](pa: Parser[A])
def map[B](f: A => B): Parser[B]
extension [A](oa: Option[A])
def map[B](f: A => B): Option[B]
可以发现,这些类型签名仅在具体的数据类型上有所不同。我们可以使用 Scala 特质来捕获实现 map 的数据类型的概念:
trait Functor[F[_]]:
extension [A](fa: F[A])
def map[B](f:
超级会员免费看
订阅专栏 解锁全文
345

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



