Copyright | (C) 2014-2015 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | GADTs, TFs, MPTCs, RankN |
Safe Haskell | Safe |
Language | Haskell2010 |
Synopsis
-
data
Procompose
p q d c
where
- Procompose :: p x c -> q d x -> Procompose p q d c
- procomposed :: Category p => Procompose p p a b -> p a b
- idl :: Profunctor q => Iso ( Procompose (->) q d c) ( Procompose (->) r d' c') (q d c) (r d' c')
- idr :: Profunctor q => Iso ( Procompose q (->) d c) ( Procompose r (->) d' c') (q d c) (r 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)
- eta :: ( Profunctor p, Category p) => (->) :-> p
- mu :: Category p => Procompose p p :-> p
- 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')
- 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')
- 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')
- 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')
-
newtype
Rift
p q a b =
Rift
{
- runRift :: forall x. p b x -> q a x
- decomposeRift :: Procompose p ( Rift p q) :-> q
Profunctor Composition
data Procompose p q d c where Source #
is the
Procompose
p q
Profunctor
composition of the
Profunctor
s
p
and
q
.
For a good explanation of
Profunctor
composition in Haskell
see Dan Piponi's article:
http://blog.sigfpe.com/2011/07/profunctors-in-haskell.html
Procompose
has a polymorphic kind since
5.6
.
Procompose :: p x c -> q d x -> Procompose p q d c |
Instances
procomposed :: Category p => Procompose p p a b -> p a b Source #
Unitors and Associator
idl :: Profunctor q => Iso ( Procompose (->) q d c) ( Procompose (->) r d' c') (q d c) (r d' c') Source #
(->)
functions as a lax identity for
Profunctor
composition.
This provides an
Iso
for the
lens
package that witnesses the
isomorphism between
and
Procompose
(->) q d c
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') Source #
(->)
functions as a lax identity for
Profunctor
composition.
This provides an
Iso
for the
lens
package that witnesses the
isomorphism between
and
Procompose
q (->) d c
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) Source #
The associator for
Profunctor
composition.
This provides an
Iso
for the
lens
package that witnesses the
isomorphism between
and
Procompose
p (
Procompose
q r) a b
, which arises because
Procompose
(
Procompose
p q) r a b
Prof
is only a bicategory, rather than a strict 2-category.
Categories as monoid objects
eta :: ( Profunctor p, Category p) => (->) :-> p Source #
a
Category
that is also a
Profunctor
is a
Monoid
in
Prof
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') Source #
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') Source #
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') Source #
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') Source #
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
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.
Rift
has a polymorphic kind since
5.6
.
Instances
p ~ q => Category ( Rift p q :: k1 -> k1 -> Type ) Source # |
|
ProfunctorFunctor ( Rift p :: ( Type -> Type -> Type ) -> Type -> k -> Type ) Source # | |
Category p => ProfunctorComonad ( Rift p :: ( Type -> Type -> Type ) -> Type -> Type -> Type ) Source # | |
Defined in Data.Profunctor.Composition proextract :: forall (p0 :: Type -> Type -> Type ). Profunctor p0 => Rift p p0 :-> p0 Source # produplicate :: forall (p0 :: Type -> Type -> Type ). Profunctor p0 => Rift p p0 :-> Rift p ( Rift p p0) Source # |
|
ProfunctorAdjunction ( Procompose p :: ( Type -> Type -> Type ) -> Type -> Type -> Type ) ( Rift p :: ( Type -> Type -> Type ) -> Type -> Type -> Type ) Source # | |
Defined in Data.Profunctor.Composition unit :: forall (p0 :: Type -> Type -> Type ). Profunctor p0 => p0 :-> Rift p ( Procompose p p0) Source # counit :: forall (p0 :: Type -> Type -> Type ). Profunctor p0 => Procompose p ( Rift p p0) :-> p0 Source # |
|
( Profunctor p, Profunctor q) => Profunctor ( Rift p q) Source # | |
Defined in Data.Profunctor.Composition dimap :: (a -> b) -> (c -> d) -> Rift p q b c -> Rift p q a d Source # lmap :: (a -> b) -> Rift p q b c -> Rift p q a c Source # rmap :: (b -> c) -> Rift p q a b -> Rift p q a c Source # (#.) :: forall a b c q0. Coercible c b => q0 b c -> Rift p q a b -> Rift p q a c Source # (.#) :: forall a b c q0. Coercible b a => Rift p q b c -> q0 a b -> Rift p q a c Source # |
|
Profunctor p => Functor ( Rift p q a) Source # | |
decomposeRift :: Procompose p ( Rift p q) :-> q Source #
The 2-morphism that defines a left Kan lift.
Note: When
p
is right adjoint to
then
Rift
p (->)
decomposeRift
is the
counit
of the adjunction.