Functor& Monad解读
amp 解读 Monad
2023-09-11 14:18:45 时间
整体上代表封装的概念,重点是函数的封装,及函数运行的上下文环境。
trait Functor[F[_]]
Functor:代表整体封装;
F[_]:代表封装后的目标域。
A、B:代表普通的对象;
f:代表对象间转换的函数。
Functor[F[_]] :映射的结果和源在同一个范畴内;
Functor的代码表示
trait Functor[F[_]] {
def map[A, B](a: F[A])(f: A => B): F[B]
}
//list Functor的实现
def listFunctor = new Functor[List] {
def map[A, B](a: List[A])(f: (A) => B) = a.map(f)
}
接下来我们用Scala实现Monad的定义:
trait Monad[M[_]] {
def unit[A](a: A): M[A] //identity
def join[A](mma: M[M[A]]): M[A]
}
还有一种更为常见的定义方式,在Scala中Monad也是以这种方式出现:
trait Monad[M[_]] {
def unit[A](a: A): M[A]
def flatMap[A, B](fa: M[A])(f: A => M[B]): M[B]
}
要满足这两点,我们需要一个类型构造器
trait Functor[F[_]] {
def typeMap[A]: F[A]
def funcMap[A,B](f: A=>B): F[A]=>F[B]
}
我们现在可以把这个定义再简化一些,类型的映射方法可以不用,并把它作为一个type class
:
trait Functor[F[_]] {
def map[A,B](fa: F[A], f: A=>B): F[B]
}
相关文章
- Leetcode: Reorder List && Summary: Reverse a LinkedList
- jQuery -> 获取/设置HTML或TEXT内容
- 连接器 -- Scatter File & Linker Script File
- <IDEA 使用小技巧&&常用键联合操作>
- 激活函数:Sigmod&tanh&Softplus&Relu详解
- Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述
- 【前端学习之HTML&CSS】-- HTML第三篇 -- 首个网页
- 大神们都在用的两个国外的免费离线下载:Rain& LoadBT
- css伪元素&伪类的妙用
- 【从零之六&完结】android口语对话系统(RavenClaw java版 含所有源代码)
- China Mobile may roll out LTE network in