profunctors-5.2.1: Profunctors

Copyright(C) 2014-2015 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityprovisional
PortabilityRank2Types
Safe HaskellSafe
LanguageHaskell2010

Data.Profunctor.Strong

Contents

Description

 

Synopsis

Strength

class Profunctor p => Strong p where Source #

Generalizing Star of a strong Functor

Note: Every Functor in Haskell is strong with respect to (,).

This describes profunctor strength with respect to the product structure of Hask.

http://www-kb.is.s.u-tokyo.ac.jp/~asada/papers/arrStrMnd.pdf

Minimal complete definition

first' | second'

Methods

first' :: p a b -> p (a, c) (b, c) Source #

Laws:

first'dimap swap swap . second'
lmap fstrmap fst . first'
lmap (second f) . first'rmap (second f) . first
first' . first'dimap assoc unassoc . first' where
  assoc ((a,b),c) = (a,(b,c))
  unassoc (a,(b,c)) = ((a,b),c)

second' :: p a b -> p (c, a) (c, b) Source #

Laws:

second'dimap swap swap . first'
lmap sndrmap snd . second'
lmap (first f) . second'rmap (first f) . second'
second' . second'dimap unassoc assoc . second' where
  assoc ((a,b),c) = (a,(b,c))
  unassoc (a,(b,c)) = ((a,b),c)

Instances

Strong (->) Source # 

Methods

first' :: (a -> b) -> (a, c) -> (b, c) Source #

second' :: (a -> b) -> (c, a) -> (c, b) Source #

Monad m => Strong (Kleisli m) Source # 

Methods

first' :: Kleisli m a b -> Kleisli m (a, c) (b, c) Source #

second' :: Kleisli m a b -> Kleisli m (c, a) (c, b) Source #

Strong (Forget r) Source # 

Methods

first' :: Forget r a b -> Forget r (a, c) (b, c) Source #

second' :: Forget r a b -> Forget r (c, a) (c, b) Source #

Arrow p => Strong (WrappedArrow p) Source #

Arrow is Strong Category

Methods

first' :: WrappedArrow p a b -> WrappedArrow p (a, c) (b, c) Source #

second' :: WrappedArrow p a b -> WrappedArrow p (c, a) (c, b) Source #

Functor m => Strong (Star m) Source # 

Methods

first' :: Star m a b -> Star m (a, c) (b, c) Source #

second' :: Star m a b -> Star m (c, a) (c, b) Source #

Strong (Pastro p) Source # 

Methods

first' :: Pastro p a b -> Pastro p (a, c) (b, c) Source #

second' :: Pastro p a b -> Pastro p (c, a) (c, b) Source #

Profunctor p => Strong (Tambara p) Source # 

Methods

first' :: Tambara p a b -> Tambara p (a, c) (b, c) Source #

second' :: Tambara p a b -> Tambara p (c, a) (c, b) Source #

Strong p => Strong (Closure p) Source # 

Methods

first' :: Closure p a b -> Closure p (a, c) (b, c) Source #

second' :: Closure p a b -> Closure p (c, a) (c, b) Source #

Strong (FreeTraversing p) Source # 

Methods

first' :: FreeTraversing p a b -> FreeTraversing p (a, c) (b, c) Source #

second' :: FreeTraversing p a b -> FreeTraversing p (c, a) (c, b) Source #

Profunctor p => Strong (CofreeTraversing p) Source # 

Methods

first' :: CofreeTraversing p a b -> CofreeTraversing p (a, c) (b, c) Source #

second' :: CofreeTraversing p a b -> CofreeTraversing p (c, a) (c, b) Source #

Strong (FreeMapping p) Source # 

Methods

first' :: FreeMapping p a b -> FreeMapping p (a, c) (b, c) Source #

second' :: FreeMapping p a b -> FreeMapping p (c, a) (c, b) Source #

Profunctor p => Strong (CofreeMapping p) Source # 

Methods

first' :: CofreeMapping p a b -> CofreeMapping p (a, c) (b, c) Source #

second' :: CofreeMapping p a b -> CofreeMapping p (c, a) (c, b) Source #

Strong p => Strong (Coyoneda p) Source # 

Methods

first' :: Coyoneda p a b -> Coyoneda p (a, c) (b, c) Source #

second' :: Coyoneda p a b -> Coyoneda p (c, a) (c, b) Source #

Strong p => Strong (Yoneda p) Source # 

Methods

first' :: Yoneda p a b -> Yoneda p (a, c) (b, c) Source #

second' :: Yoneda p a b -> Yoneda p (c, a) (c, b) Source #

(Functor f, Strong p) => Strong (Cayley f p) Source # 

Methods

first' :: Cayley f p a b -> Cayley f p (a, c) (b, c) Source #

second' :: Cayley f p a b -> Cayley f p (c, a) (c, b) Source #

(Strong p, Strong q) => Strong (Procompose p q) Source # 

Methods

first' :: Procompose p q a b -> Procompose p q (a, c) (b, c) Source #

second' :: Procompose p q a b -> Procompose p q (c, a) (c, b) Source #

Contravariant f => Strong (Clown * * f) Source # 

Methods

first' :: Clown * * f a b -> Clown * * f (a, c) (b, c) Source #

second' :: Clown * * f a b -> Clown * * f (c, a) (c, b) Source #

(Strong p, Strong q) => Strong (Product * * p q) Source # 

Methods

first' :: Product * * p q a b -> Product * * p q (a, c) (b, c) Source #

second' :: Product * * p q a b -> Product * * p q (c, a) (c, b) Source #

(Functor f, Strong p) => Strong (Tannen * * * f p) Source # 

Methods

first' :: Tannen * * * f p a b -> Tannen * * * f p (a, c) (b, c) Source #

second' :: Tannen * * * f p a b -> Tannen * * * f p (c, a) (c, b) Source #

uncurry' :: Strong p => p a (b -> c) -> p (a, b) c Source #

newtype Tambara p a b Source #

Tambara cofreely makes any Profunctor Strong.

Constructors

Tambara 

Fields

Instances

ProfunctorComonad Tambara Source # 
ProfunctorFunctor Tambara Source # 

Methods

promap :: Profunctor p => (p :-> q) -> Tambara p :-> Tambara q Source #

ProfunctorAdjunction Pastro Tambara Source # 
Arrow p => Arrow (Tambara p) Source # 

Methods

arr :: (b -> c) -> Tambara p b c #

first :: Tambara p b c -> Tambara p (b, d) (c, d) #

second :: Tambara p b c -> Tambara p (d, b) (d, c) #

(***) :: Tambara p b c -> Tambara p b' c' -> Tambara p (b, b') (c, c') #

(&&&) :: Tambara p b c -> Tambara p b c' -> Tambara p b (c, c') #

ArrowZero p => ArrowZero (Tambara p) Source # 

Methods

zeroArrow :: Tambara p b c #

ArrowPlus p => ArrowPlus (Tambara p) Source # 

Methods

(<+>) :: Tambara p b c -> Tambara p b c -> Tambara p b c #

ArrowChoice p => ArrowChoice (Tambara p) Source # 

Methods

left :: Tambara p b c -> Tambara p (Either b d) (Either c d) #

right :: Tambara p b c -> Tambara p (Either d b) (Either d c) #

(+++) :: Tambara p b c -> Tambara p b' c' -> Tambara p (Either b b') (Either c c') #

(|||) :: Tambara p b d -> Tambara p c d -> Tambara p (Either b c) d #

ArrowApply p => ArrowApply (Tambara p) Source # 

Methods

app :: Tambara p (Tambara p b c, b) c #

ArrowLoop p => ArrowLoop (Tambara p) Source # 

Methods

loop :: Tambara p (b, d) (c, d) -> Tambara p b c #

Profunctor p => Profunctor (Tambara p) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Tambara p b c -> Tambara p a d Source #

lmap :: (a -> b) -> Tambara p b c -> Tambara p a c Source #

rmap :: (b -> c) -> Tambara p a b -> Tambara p a c Source #

(#.) :: Coercible * c b => (b -> c) -> Tambara p a b -> Tambara p a c Source #

(.#) :: Coercible * b a => Tambara p b c -> (a -> b) -> Tambara p a c Source #

Profunctor p => Strong (Tambara p) Source # 

Methods

first' :: Tambara p a b -> Tambara p (a, c) (b, c) Source #

second' :: Tambara p a b -> Tambara p (c, a) (c, b) Source #

Choice p => Choice (Tambara p) Source # 

Methods

left' :: Tambara p a b -> Tambara p (Either a c) (Either b c) Source #

right' :: Tambara p a b -> Tambara p (Either c a) (Either c b) Source #

Category * p => Category * (Tambara p) Source # 

Methods

id :: cat a a #

(.) :: cat b c -> cat a b -> cat a c #

Profunctor p => Functor (Tambara p a) Source # 

Methods

fmap :: (a -> b) -> Tambara p a a -> Tambara p a b #

(<$) :: a -> Tambara p a b -> Tambara p a a #

(Profunctor p, Arrow p) => Applicative (Tambara p a) Source # 

Methods

pure :: a -> Tambara p a a #

(<*>) :: Tambara p a (a -> b) -> Tambara p a a -> Tambara p a b #

(*>) :: Tambara p a a -> Tambara p a b -> Tambara p a b #

(<*) :: Tambara p a a -> Tambara p a b -> Tambara p a a #

(Profunctor p, ArrowPlus p) => Alternative (Tambara p a) Source # 

Methods

empty :: Tambara p a a #

(<|>) :: Tambara p a a -> Tambara p a a -> Tambara p a a #

some :: Tambara p a a -> Tambara p a [a] #

many :: Tambara p a a -> Tambara p a [a] #

ArrowPlus p => Monoid (Tambara p a b) Source # 

Methods

mempty :: Tambara p a b #

mappend :: Tambara p a b -> Tambara p a b -> Tambara p a b #

mconcat :: [Tambara p a b] -> Tambara p a b #

tambara :: Strong p => (p :-> q) -> p :-> Tambara q Source #

tambara (untambara f) ≡ f
untambara (tambara f) ≡ f

untambara :: Profunctor q => (p :-> Tambara q) -> p :-> q Source #

tambara (untambara f) ≡ f
untambara (tambara f) ≡ f

data Pastro p a b where Source #

Pastro -| Tambara

Pastro p ~ exists z. Costar ((,)z) Procompose p Procompose Star ((,)z)

Pastro freely makes any Profunctor Strong.

Constructors

Pastro :: ((y, z) -> b) -> p x y -> (a -> (x, z)) -> Pastro p a b 

Instances

ProfunctorMonad Pastro Source # 
ProfunctorFunctor Pastro Source # 

Methods

promap :: Profunctor p => (p :-> q) -> Pastro p :-> Pastro q Source #

ProfunctorAdjunction Pastro Tambara Source # 
Profunctor (Pastro p) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Pastro p b c -> Pastro p a d Source #

lmap :: (a -> b) -> Pastro p b c -> Pastro p a c Source #

rmap :: (b -> c) -> Pastro p a b -> Pastro p a c Source #

(#.) :: Coercible * c b => (b -> c) -> Pastro p a b -> Pastro p a c Source #

(.#) :: Coercible * b a => Pastro p b c -> (a -> b) -> Pastro p a c Source #

Strong (Pastro p) Source # 

Methods

first' :: Pastro p a b -> Pastro p (a, c) (b, c) Source #

second' :: Pastro p a b -> Pastro p (c, a) (c, b) Source #

pastro :: Strong q => (p :-> q) -> Pastro p :-> q Source #

pastro (unpastro f) ≡ f
unpastro (pastro f) ≡ f

unpastro :: (Pastro p :-> q) -> p :-> q Source #

pastro (unpastro f) ≡ f
unpastro (pastro f) ≡ f

Costrength

class Profunctor p => Costrong p where Source #

Analogous to ArrowLoop, loop = unfirst

Minimal complete definition

unfirst | unsecond

Methods

unfirst :: p (a, d) (b, d) -> p a b Source #

Laws:

unfirstunsecond . dimap swap swap
lmap (,()) ≡ unfirst . rmap (,())
unfirst . lmap (second f) ≡ unfirst . rmap (second f)
unfirst . unfirst = unfirst . dimap assoc unassoc where
  assoc ((a,b),c) = (a,(b,c))
  unassoc (a,(b,c)) = ((a,b),c)

unsecond :: p (d, a) (d, b) -> p a b Source #

Laws:

unsecondunfirst . dimap swap swap
lmap ((),) ≡ unsecond . rmap ((),)
unsecond . lmap (first f) ≡ unsecond . rmap (first f)
unsecond . unsecond = unsecond . dimap unassoc assoc where
  assoc ((a,b),c) = (a,(b,c))
  unassoc (a,(b,c)) = ((a,b),c)

Instances

Costrong (->) Source # 

Methods

unfirst :: ((a, d) -> (b, d)) -> a -> b Source #

unsecond :: ((d, a) -> (d, b)) -> a -> b Source #

MonadFix m => Costrong (Kleisli m) Source # 

Methods

unfirst :: Kleisli m (a, d) (b, d) -> Kleisli m a b Source #

unsecond :: Kleisli m (d, a) (d, b) -> Kleisli m a b Source #

Functor f => Costrong (Cokleisli f) Source # 

Methods

unfirst :: Cokleisli f (a, d) (b, d) -> Cokleisli f a b Source #

unsecond :: Cokleisli f (d, a) (d, b) -> Cokleisli f a b Source #

Costrong (Tagged *) Source # 

Methods

unfirst :: Tagged * (a, d) (b, d) -> Tagged * a b Source #

unsecond :: Tagged * (d, a) (d, b) -> Tagged * a b Source #

ArrowLoop p => Costrong (WrappedArrow p) Source # 

Methods

unfirst :: WrappedArrow p (a, d) (b, d) -> WrappedArrow p a b Source #

unsecond :: WrappedArrow p (d, a) (d, b) -> WrappedArrow p a b Source #

Functor f => Costrong (Costar f) Source # 

Methods

unfirst :: Costar f (a, d) (b, d) -> Costar f a b Source #

unsecond :: Costar f (d, a) (d, b) -> Costar f a b Source #

Costrong (Copastro p) Source # 

Methods

unfirst :: Copastro p (a, d) (b, d) -> Copastro p a b Source #

unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b Source #

Costrong (Cotambara p) Source # 

Methods

unfirst :: Cotambara p (a, d) (b, d) -> Cotambara p a b Source #

unsecond :: Cotambara p (d, a) (d, b) -> Cotambara p a b Source #

Costrong p => Costrong (Coyoneda p) Source # 

Methods

unfirst :: Coyoneda p (a, d) (b, d) -> Coyoneda p a b Source #

unsecond :: Coyoneda p (d, a) (d, b) -> Coyoneda p a b Source #

Costrong p => Costrong (Yoneda p) Source # 

Methods

unfirst :: Yoneda p (a, d) (b, d) -> Yoneda p a b Source #

unsecond :: Yoneda p (d, a) (d, b) -> Yoneda p a b Source #

(Corepresentable p, Corepresentable q) => Costrong (Procompose p q) Source # 

Methods

unfirst :: Procompose p q (a, d) (b, d) -> Procompose p q a b Source #

unsecond :: Procompose p q (d, a) (d, b) -> Procompose p q a b Source #

(Costrong p, Costrong q) => Costrong (Product * * p q) Source # 

Methods

unfirst :: Product * * p q (a, d) (b, d) -> Product * * p q a b Source #

unsecond :: Product * * p q (d, a) (d, b) -> Product * * p q a b Source #

(Functor f, Costrong p) => Costrong (Tannen * * * f p) Source # 

Methods

unfirst :: Tannen * * * f p (a, d) (b, d) -> Tannen * * * f p a b Source #

unsecond :: Tannen * * * f p (d, a) (d, b) -> Tannen * * * f p a b Source #

data Cotambara q a b where Source #

Cotambara cofreely constructs costrength

Constructors

Cotambara :: Costrong r => (r :-> q) -> r a b -> Cotambara q a b 

Instances

ProfunctorComonad Cotambara Source # 
ProfunctorFunctor Cotambara Source # 

Methods

promap :: Profunctor p => (p :-> q) -> Cotambara p :-> Cotambara q Source #

ProfunctorAdjunction Copastro Cotambara Source # 
Profunctor (Cotambara p) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Cotambara p b c -> Cotambara p a d Source #

lmap :: (a -> b) -> Cotambara p b c -> Cotambara p a c Source #

rmap :: (b -> c) -> Cotambara p a b -> Cotambara p a c Source #

(#.) :: Coercible * c b => (b -> c) -> Cotambara p a b -> Cotambara p a c Source #

(.#) :: Coercible * b a => Cotambara p b c -> (a -> b) -> Cotambara p a c Source #

Costrong (Cotambara p) Source # 

Methods

unfirst :: Cotambara p (a, d) (b, d) -> Cotambara p a b Source #

unsecond :: Cotambara p (d, a) (d, b) -> Cotambara p a b Source #

Functor (Cotambara p a) Source # 

Methods

fmap :: (a -> b) -> Cotambara p a a -> Cotambara p a b #

(<$) :: a -> Cotambara p a b -> Cotambara p a a #

newtype Copastro p a b Source #

Copastro -| Cotambara

Copastro freely constructs costrength

Constructors

Copastro 

Fields

Instances

ProfunctorMonad Copastro Source # 
ProfunctorFunctor Copastro Source # 

Methods

promap :: Profunctor p => (p :-> q) -> Copastro p :-> Copastro q Source #

ProfunctorAdjunction Copastro Cotambara Source # 
Profunctor (Copastro p) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Copastro p b c -> Copastro p a d Source #

lmap :: (a -> b) -> Copastro p b c -> Copastro p a c Source #

rmap :: (b -> c) -> Copastro p a b -> Copastro p a c Source #

(#.) :: Coercible * c b => (b -> c) -> Copastro p a b -> Copastro p a c Source #

(.#) :: Coercible * b a => Copastro p b c -> (a -> b) -> Copastro p a c Source #

Costrong (Copastro p) Source # 

Methods

unfirst :: Copastro p (a, d) (b, d) -> Copastro p a b Source #

unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b Source #