Functor (functional programming)


In functional programming, a functor is a design pattern inspired by the definition from category theory, that allows for a generic type to apply a function inside without changing the structure of the generic type.
This idea is encoded in Haskell using type class

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

with conditions called functor laws

fmap id = id
fmap = .

In Scala higher kinded types are used

trait FunctorF[_

[Simple
examples of this are Option and collection types. Functors are very useful in modeling functional effects to apply a function to computations that did not yet finish.
Functors form a base for more complex abstractions like Applicative, Monad, Comonad.
In C++, the name functor refers to a function object instead of this definition.