Looking for haskell Answers? Try Ask4KnowledgeBase
Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageProfesor


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 Ejemplos relacionados