在函数式编程中,函子(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.