En programación funcional , un functor es un patrón de diseño inspirado en la definición de la teoría de categorías , que permite que un tipo genérico aplique una función en su interior sin cambiar la estructura del tipo genérico.
Esta idea está codificada en Haskell usando la clase de tipo
clase Functor f donde fmap :: ( a -> b ) -> f a -> f b
con condiciones llamadas leyes de functor
fmap id = id fmap ( g . h ) = ( fmap g ) . ( fmap h )
En Scala se utilizan tipos de kinded superiores
Rasgo Functor [ F [ _ ]] { def map [ A , B ] ( a : F [ A ]) ( f : A => B ) : F [ B ] }
Ejemplos simples de esto son los tipos de opciones y colecciones. Los funciones son muy útiles en el modelado de efectos funcionales para aplicar una función a cálculos que aún no se terminaron.
Functors formar una base para abstracciones más complejas como Aplicativo , Mónada , Comonad .
En C ++ , el nombre functor se refiere a un objeto de función en lugar de esta definición.