Zoeken…


Invoering

Profunctor is een typeclass aangeboden door het profunctors pakket in Data.Profunctor .

Zie de sectie "Opmerkingen" voor een volledige uitleg.

Syntaxis

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

Opmerkingen

Profunctors zijn, zoals beschreven in de documenten over Hackage, "een bifunctor waar het eerste argument tegenstrijdig is en het tweede argument covariant is".

Dus wat betekent dit? Welnu, een bifunctor is als een normale functor, behalve dat het twee parameters heeft in plaats van één, elk met zijn eigen fmap achtige functie om erop in kaart te brengen.

"Covariant" zijn betekent dat het tweede argument voor een profunctor net als een normale functor is: de mappingfunctie ( rmap ) heeft een typeaanduiding van Profunctor p => (b -> c) -> pab -> pac . Het geeft alleen de functie van het tweede argument weer.

"Contravariant" zijn maakt het eerste argument een beetje vreemder. In plaats van het toewijzen als een normale functor, heeft de toewijzingsfunctie ( lmap ) een typeaanduiding van Profunctor p => (a -> b) -> pbc -> pac . Deze ogenschijnlijk achterwaartse toewijzing is het meest logisch voor invoer voor een functie: u voert a -> b op de invoer en vervolgens op uw andere functie en laat de nieuwe invoer als a .

Opmerking: de naamgeving voor de normale, één argument functors is een beetje misleidend: de Functor typeclass implementeert "covariante" functors, terwijl "contravariante" functors worden geïmplementeerd in de Contravariant typeclass in Data.Functor.Contravariant , en eerder de (misleidend genoemde) Cofunctor typeclass in Data.Cofunctor .

(->) Profunctor

(->) is een eenvoudig voorbeeld van een profunctor: het linkerargument is de invoer voor een functie en het rechterargument is hetzelfde als de instantie van de lezerfunctor.

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow