Buscar..


Introducción

Profunctor es una clase de tipos proporcionada por el profunctors paquete en Data.Profunctor .

Consulte la sección "Comentarios" para obtener una explicación completa.

Sintaxis

  • dimap :: Profunctor p => (a -> b) -> (c -> d) -> pbc -> pad
  • lmap :: Profunctor p => (a -> b) -> pbc -> pac
  • rmap :: Profunctor p => (b -> c) -> pab -> pac
  • ID de dimap id = id
  • lmap id = id
  • rmap id = id
  • dimap fg = lmap f. rmap g
  • lmap f = dimap f id
  • rmap f = dimap id f

Observaciones

Los expertos son, según lo descrito por los documentos en Hackage, "un bifunctor donde el primer argumento es contravariante y el segundo argumento es covariante".

Entonces, ¿qué significa esto? Bueno, un bifunctor es como un funtor normal, excepto que tiene dos parámetros en lugar de uno, cada uno con su propia función fmap para mapear en él.

Ser "covariante" significa que el segundo argumento para un profunctor es como un funtor normal: su función de mapeo ( rmap ) tiene una firma de tipo de Profunctor p => (b -> c) -> pab -> pac . Simplemente mapea la función en el segundo argumento.

Ser "contravariante" hace que el primer argumento sea un poco más extraño. En lugar de mapear como un funtor normal, su función de mapeo ( lmap ) tiene una firma de tipo de Profunctor p => (a -> b) -> pbc -> pac . Esta asignación aparentemente hacia atrás tiene más sentido para las entradas a una función: ejecutaría a -> b en la entrada, y luego la otra función, dejando la nueva entrada como a .

Nota: la denominación de los funtores normales de un argumento es un poco engañosa: la clase de tipos Functor implementa funtores "covariantes", mientras que los functores "contravariantes" se implementan en la clase de Data.Functor.Contravariant Contravariant en Data.Functor.Contravariant , y anteriormente el (nombre erróneo) Cofunctor typeclass en Data.Cofunctor .

(->) Profesor

(->) es un ejemplo simple de un profunctor: el argumento de la izquierda es la entrada a una función, y el argumento de la derecha es el mismo que el de la instancia del functor del lector.

instance Profunctor (->) where
    lmap f g = g . f
    rmap f g = g . g


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow