函子 (函数式编程)

在函数式编程中，函子（functor）是受到范畴论函子启发的一种设计模式，它允许泛化类型在内部应用一个函数而不改变泛化类型的结构。函子形成了更复杂的抽象如应用式、单子、Comonad的基础。

概述
这个想法在Haskell中使用类型类来编码实现：

class Functor f where
  fmap :: (a -> b) -> f a -> f b

具有叫做“函子定律”的条件：

fmap id = id
fmap (g . h) = (fmap g) . (fmap h)

在Scala中使用高类型：

trait Functor[F[_]] {
  def map[A,B](a: F[A])(f: A => B): F[B]
}

其简单的例子是可选类型和搜集类型。函子可用于建模“函数作用”来向仍未完成的计算应用一个函数。

在C++中，名字“函子”指称的是函数对象而非这里的定义。

参见
类型类
map (高阶函数)
单子
应用式函子

外部链接 

 section about Functor in Haskell Typeclassopedia 
 chapter 11 Functors, Applicative Functors and Monoids in Learn You a Haskell for Great Good! 
 documentation for Functor in Cats library  (in scala)
 section about Functor in lemastero/scala_typeclassopedia 

函数式编程
软件设计模式