函子 (函數式程式設計)

函數式程式設計中,函子(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中使用高種類英語Kind (type theory)類型:

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

其簡單的例子是可選類型搜集類型。函子可用於建模「函數作用」來向仍未完成的計算應用一個函數。

在C++中,名字「函子」指稱的是函數對象而非這裏的定義。

參見

外部連結