profunctors-5.3: Profunctors

Data.Profunctor.Composition

Description

Synopsis

# Profunctor Composition

data Procompose p q d c where #

Procompose p q is the Profunctor composition of the Profunctors p and q.

For a good explanation of Profunctor composition in Haskell see Dan Piponi's article:

 # Instance detailsDefined in Data.Profunctor.Composition Methodsproreturn :: Profunctor p0 => p0 :-> Procompose p p0 #projoin :: Profunctor p0 => Procompose p (Procompose p p0) :-> Procompose p p0 # # Instance detailsDefined in Data.Profunctor.Composition Methodspromap :: Profunctor p0 => (p0 :-> q) -> Procompose p p0 :-> Procompose p q # # Instance detailsDefined in Data.Profunctor.Composition Methodsunit :: Profunctor p0 => p0 :-> Rift p (Procompose p p0) #counit :: Profunctor p0 => Procompose p (Rift p p0) :-> p0 # (Profunctor p, Profunctor q) => Profunctor (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsdimap :: (a -> b) -> (c -> d) -> Procompose p q b c -> Procompose p q a d #lmap :: (a -> b) -> Procompose p q b c -> Procompose p q a c #rmap :: (b -> c) -> Procompose p q a b -> Procompose p q a c #(#.) :: Coercible c b => q0 b c -> Procompose p q a b -> Procompose p q a c #(.#) :: Coercible b a => Procompose p q b c -> q0 a b -> Procompose p q a c # (Corepresentable p, Corepresentable q) => Costrong (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsunfirst :: Procompose p q (a, d) (b, d) -> Procompose p q a b #unsecond :: Procompose p q (d, a) (d, b) -> Procompose p q a b # (Strong p, Strong q) => Strong (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsfirst' :: Procompose p q a b -> Procompose p q (a, c) (b, c) #second' :: Procompose p q a b -> Procompose p q (c, a) (c, b) # (Closed p, Closed q) => Closed (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsclosed :: Procompose p q a b -> Procompose p q (x -> a) (x -> b) # (Choice p, Choice q) => Choice (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsleft' :: Procompose p q a b -> Procompose p q (Either a c) (Either b c) #right' :: Procompose p q a b -> Procompose p q (Either c a) (Either c b) # (Traversing p, Traversing q) => Traversing (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodstraverse' :: Traversable f => Procompose p q a b -> Procompose p q (f a) (f b) #wander :: (forall (f :: Type -> Type). Applicative f => (a -> f b) -> s -> f t) -> Procompose p q a b -> Procompose p q s t # (Mapping p, Mapping q) => Mapping (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsmap' :: Functor f => Procompose p q a b -> Procompose p q (f a) (f b) # # Instance detailsDefined in Data.Profunctor.Composition Associated Typestype Corep (Procompose p q) :: Type -> Type # Methodscotabulate :: (Corep (Procompose p q) d -> c) -> Procompose p q d c # (Representable p, Representable q) => Representable (Procompose p q) # The composition of two Representable Profunctors is Representable by the composition of their representations. Instance detailsDefined in Data.Profunctor.Composition Associated Typestype Rep (Procompose p q) :: Type -> Type # Methodstabulate :: (d -> Rep (Procompose p q) c) -> Procompose p q d c # (Cosieve p f, Cosieve q g) => Cosieve (Procompose p q) (Compose f g) # Instance detailsDefined in Data.Profunctor.Composition Methodscosieve :: Procompose p q a b -> Compose f g a -> b # (Sieve p f, Sieve q g) => Sieve (Procompose p q) (Compose g f) # Instance detailsDefined in Data.Profunctor.Composition Methodssieve :: Procompose p q a b -> a -> Compose g f b # Profunctor p => Functor (Procompose p q a) # Instance detailsDefined in Data.Profunctor.Composition Methodsfmap :: (a0 -> b) -> Procompose p q a a0 -> Procompose p q a b #(<$) :: a0 -> Procompose p q a b -> Procompose p q a a0 # type Corep (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition type Corep (Procompose p q) = Compose (Corep p) (Corep q) type Rep (Procompose p q) # Instance detailsDefined in Data.Profunctor.Composition type Rep (Procompose p q) = Compose (Rep q) (Rep p) procomposed :: Category p => Procompose p p a b -> p a b # # Unitors and Associator idl :: Profunctor q => Iso (Procompose (->) q d c) (Procompose (->) r d' c') (q d c) (r d' c') # (->) functions as a lax identity for Profunctor composition. This provides an Iso for the lens package that witnesses the isomorphism between Procompose (->) q d c and q d c, which is the left identity law. idl :: Profunctor q => Iso' (Procompose (->) q d c) (q d c)  idr :: Profunctor q => Iso (Procompose q (->) d c) (Procompose r (->) d' c') (q d c) (r d' c') # (->) functions as a lax identity for Profunctor composition. This provides an Iso for the lens package that witnesses the isomorphism between Procompose q (->) d c and q d c, which is the right identity law. idr :: Profunctor q => Iso' (Procompose q (->) d c) (q d c)  assoc :: Iso (Procompose p (Procompose q r) a b) (Procompose x (Procompose y z) a b) (Procompose (Procompose p q) r a b) (Procompose (Procompose x y) z a b) # The associator for Profunctor composition. This provides an Iso for the lens package that witnesses the isomorphism between Procompose p (Procompose q r) a b and Procompose (Procompose p q) r a b, which arises because Prof is only a bicategory, rather than a strict 2-category. # Categories as monoid objects eta :: (Profunctor p, Category p) => (->) :-> p # a Category that is also a Profunctor is a Monoid in Prof mu :: Category p => Procompose p p :-> p # # Generalized Composition stars :: Functor g => Iso (Procompose (Star f) (Star g) d c) (Procompose (Star f') (Star g') d' c') (Star (Compose g f) d c) (Star (Compose g' f') d' c') # Profunctor composition generalizes Functor composition in two ways. This is the first, which shows that exists b. (a -> f b, b -> g c) is isomorphic to a -> f (g c). stars :: Functor f => Iso' (Procompose (Star f) (Star g) d c) (Star (Compose f g) d c) kleislis :: Monad g => Iso (Procompose (Kleisli f) (Kleisli g) d c) (Procompose (Kleisli f') (Kleisli g') d' c') (Kleisli (Compose g f) d c) (Kleisli (Compose g' f') d' c') # This is a variant on stars that uses Kleisli instead of Star. kleislis :: Monad f => Iso' (Procompose (Kleisli f) (Kleisli g) d c) (Kleisli (Compose f g) d c) costars :: Functor f => Iso (Procompose (Costar f) (Costar g) d c) (Procompose (Costar f') (Costar g') d' c') (Costar (Compose f g) d c) (Costar (Compose f' g') d' c') # Profunctor composition generalizes Functor composition in two ways. This is the second, which shows that exists b. (f a -> b, g b -> c) is isomorphic to g (f a) -> c. costars :: Functor f => Iso' (Procompose (Costar f) (Costar g) d c) (Costar (Compose g f) d c) cokleislis :: Functor f => Iso (Procompose (Cokleisli f) (Cokleisli g) d c) (Procompose (Cokleisli f') (Cokleisli g') d' c') (Cokleisli (Compose f g) d c) (Cokleisli (Compose f' g') d' c') # This is a variant on costars that uses Cokleisli instead of Costar. cokleislis :: Functor f => Iso' (Procompose (Cokleisli f) (Cokleisli g) d c) (Cokleisli (Compose g f) d c) # Right Kan Lift newtype Rift p q a b # This represents the right Kan lift of a Profunctor q along a Profunctor p in a limited version of the 2-category of Profunctors where the only object is the category Hask, 1-morphisms are profunctors composed and compose with Profunctor composition, and 2-morphisms are just natural transformations. Constructors  Rift FieldsrunRift :: forall x. p b x -> q a x Instances  # Instance detailsDefined in Data.Profunctor.Composition Methodsproextract :: Profunctor p0 => Rift p p0 :-> p0 #produplicate :: Profunctor p0 => Rift p p0 :-> Rift p (Rift p p0) # # Instance detailsDefined in Data.Profunctor.Composition Methodspromap :: Profunctor p0 => (p0 :-> q) -> Rift p p0 :-> Rift p q # # Instance detailsDefined in Data.Profunctor.Composition Methodsunit :: Profunctor p0 => p0 :-> Rift p (Procompose p p0) #counit :: Profunctor p0 => Procompose p (Rift p p0) :-> p0 # p ~ q => Category (Rift p q :: Type -> Type -> Type) # Rift p p forms a Monad in the Profunctor 2-category, which is isomorphic to a Haskell Category instance. Instance detailsDefined in Data.Profunctor.Composition Methodsid :: Rift p q a a #(.) :: Rift p q b c -> Rift p q a b -> Rift p q a c # (Profunctor p, Profunctor q) => Profunctor (Rift p q) # Instance detailsDefined in Data.Profunctor.Composition Methodsdimap :: (a -> b) -> (c -> d) -> Rift p q b c -> Rift p q a d #lmap :: (a -> b) -> Rift p q b c -> Rift p q a c #rmap :: (b -> c) -> Rift p q a b -> Rift p q a c #(#.) :: Coercible c b => q0 b c -> Rift p q a b -> Rift p q a c #(.#) :: Coercible b a => Rift p q b c -> q0 a b -> Rift p q a c # Profunctor p => Functor (Rift p q a) # Instance detailsDefined in Data.Profunctor.Composition Methodsfmap :: (a0 -> b) -> Rift p q a a0 -> Rift p q a b #(<$) :: a0 -> Rift p q a b -> Rift p q a a0 #
Note: When p is right adjoint to Rift p (->) then decomposeRift is the counit of the adjunction.