函数式编程:上线文、包裹、容器-我们可以将一个值用Context(上下文)包裹起来

Functor,即函子,是 Haskell 中普遍存在的、最基本的类型类。你可以用以下两种方式来理解 Functor:

  • 它代表某种容器,该容器能够将某一函数应用到其每一个元素上。
  • 它代表某种“可计算上下文”(computational context)。
整体上代表封装的概念,重点是函数的封装,及函数运行的上下文环境。
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]
}


https://www.cnblogs.com/feng9exe/p/8656389.html

猜你喜欢

转载自www.cnblogs.com/feng9exe/p/9700779.html