Articulo de referencia

Functor (programación funcional)

Al aplicarlo fmap (+1) a un árbol binario de enteros, se incrementa en uno cada entero del árbol. En programación funcional , un functor es un patrón de diseño inspirado en la d...

Al aplicarlo fmap (+1)a un árbol binario de enteros, se incrementa en uno cada entero del árbol.

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 aplicar una función a valores dentro de un tipo genérico sin cambiar la estructura de dicho tipo. En Haskell, esta idea se puede plasmar en una clase de tipo :

clase Functor f donde fmap :: ( a -> b ) -> f a -> f b

Esta declaración dice que cualquier instancia de Functordebe admitir un método fmap, que mapea una función sobre los elementos de la instancia.

Los functores en Haskell también deben obedecer las llamadas leyes de functores , [ 1 ] que establecen que la operación de mapeo preserva la función identidad y la composición de funciones:

fmap id = id fmap ( g . h ) = ( fmap g ) . ( fmap h )

donde .significa composición de funciones .

En Scala, en su lugar, se puede utilizar un rasgo :

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

Los functores constituyen la base de abstracciones más complejas, como los functores aplicativos , las mónadas y las comónadas , que se construyen sobre una estructura de functor canónico. Los functores son útiles para modelar efectos funcionales mediante valores de tipos de datos parametrizados. Los cálculos modificables se modelan permitiendo que una función pura se aplique a valores del tipo "interno", creando así el nuevo valor global que representa el cálculo modificado (que aún no se ha ejecutado).

Ejemplos

En Haskell, las listas son un ejemplo sencillo de un functor. Podemos implementarlo fmapcomo

fmap f [] = [] fmap f ( x : xs ) = ( f x ) : fmap f xs

Un árbol binario puede describirse de forma similar como un functor:

datos Árbol a = Hoja | Nodo a ( Árbol a ) ( Árbol a ) instancia Functor Árbol donde fmap f Hoja = Hoja fmap f ( Nodo x l r ) = Nodo ( f x ) ( fmap f l ) ( fmap f r )

Si tenemos un árbol binario y una función , la función se aplicará a cada elemento de . Por ejemplo, si es , sumar 1 a cada elemento de se puede expresar como . [ 2 ]tr :: Tree af :: a -> bfmap f trftraInttrfmap (+ 1) tr

Véase también

Referencias

  1. ^ Yorgey, Brent. «Functor > Leyes» . HaskellWiki . Consultado el 17 de junio de 2023 .
  2. "Functores" . Perlas funcionales . Universidad de Maryland . Consultado el 12 de diciembre de 2022 .
  • Sección sobre Functor en la Typeclassopedia de Haskell
  • Capítulo 11 Funtores, funtores aplicativos y monoides en ¡Aprende Haskell para un gran bien!
  • Documentación para Functor en la biblioteca Cats
  • Sección sobre Functor en lemastero/scala_typeclassopedia