在函數式程式設計中,函子(functor)是受到範疇論函子啟發的一種設計模式,它允許泛化類型在內部應用一個函數而不改變泛化類型的結構。函子形成了更複雜的抽象如應用式、單子、Comonad的基礎。
概述
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++中,名字「函子」指稱的是函數對象而非這裏的定義。
參見
外部連結
- 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 (頁面存檔備份,存於互聯網檔案館)
這是一篇與軟件相關的小作品。您可以透過編輯或修訂擴充其內容。 |
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.