Recherche…


Introduction

Profunctor est une classe de types fournis par le profunctors paquet dans Data.Profunctor .

Voir la section "Remarques" pour une explication complète.

Syntaxe

  • 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 = id dimap f

Remarques

Les descripteurs sont, comme décrit par les documents sur Hackage, "un bifunctor où le premier argument est contravariant et le second argument est covariant".

Qu'est-ce que cela signifie? Eh bien, un bifunctor est comme un foncteur normal, sauf qu'il a deux paramètres au lieu d'un, chacun avec sa propre fonction de type fmap pour le mapper.

Etre "covariant" signifie que le second argument de la source est comme un foncteur normal: sa fonction de mappage ( rmap ) a un type signature de Profunctor p => (b -> c) -> pab -> pac . Il ne fait que mapper la fonction sur le second argument.

Être "contravariant" rend le premier argument un peu plus étrange. Au lieu de mapper comme un foncteur normal, sa fonction de mappage ( lmap ) a une signature de type Profunctor p => (a -> b) -> pbc -> pac . Cette correspondance apparemment en arrière est très utile pour les entrées d'une fonction: vous exécuteriez a -> b sur l'entrée, puis votre autre fonction, en laissant la nouvelle entrée sous la forme d' a .

Note: La dénomination des foncteurs normaux à un argument est un peu trompeuse: la Functor Functor implémente des foncteurs "covariants", tandis que les foncteurs "contravariant" sont implémentés dans la classe Contravariant dans Data.Functor.Contravariant , et précédemment la (dénomination trompeuse) Cofunctor cofunctor dans Data.Cofunctor .

(->) Profunctor

(->) est un exemple simple de source: l'argument de gauche est l'entrée d'une fonction et l'argument de droite est le même que l'instance de foncteur de lecteur.

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow