profunctors-5.2: Profunctors

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

Data.Profunctor.Choice

Contents

Description

 

Synopsis

Strength

class Profunctor p => Choice p where #

The generalization of Costar of Functor that is strong with respect to Either.

Note: This is also a notion of strength, except with regards to another monoidal structure that we can choose to equip Hask with: the cocartesian coproduct.

Minimal complete definition

left' | right'

Methods

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

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

Instances

Choice (->) # 

Methods

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

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

Monad m => Choice (Kleisli m) # 

Methods

left' :: Kleisli m a b -> Kleisli m (Either a c) (Either b c) #

right' :: Kleisli m a b -> Kleisli m (Either c a) (Either c b) #

Comonad w => Choice (Cokleisli w) #

extract approximates costrength

Methods

left' :: Cokleisli w a b -> Cokleisli w (Either a c) (Either b c) #

right' :: Cokleisli w a b -> Cokleisli w (Either c a) (Either c b) #

Choice (Tagged *) # 

Methods

left' :: Tagged * a b -> Tagged * (Either a c) (Either b c) #

right' :: Tagged * a b -> Tagged * (Either c a) (Either c b) #

Monoid r => Choice (Forget r) # 

Methods

left' :: Forget r a b -> Forget r (Either a c) (Either b c) #

right' :: Forget r a b -> Forget r (Either c a) (Either c b) #

ArrowChoice p => Choice (WrappedArrow p) # 

Methods

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

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

Traversable w => Choice (Costar w) # 

Methods

left' :: Costar w a b -> Costar w (Either a c) (Either b c) #

right' :: Costar w a b -> Costar w (Either c a) (Either c b) #

Applicative f => Choice (Star f) # 

Methods

left' :: Star f a b -> Star f (Either a c) (Either b c) #

right' :: Star f a b -> Star f (Either c a) (Either c b) #

Choice p => Choice (Tambara p) # 

Methods

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

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

Choice (PastroSum p) # 

Methods

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

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

Profunctor p => Choice (TambaraSum p) # 

Methods

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

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

Choice (FreeTraversing p) # 

Methods

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

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

Profunctor p => Choice (CofreeTraversing p) # 

Methods

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

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

Choice (FreeMapping p) # 

Methods

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

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

Profunctor p => Choice (CofreeMapping p) # 

Methods

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

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

(Functor f, Choice p) => Choice (Cayley f p) # 

Methods

left' :: Cayley f p a b -> Cayley f p (Either a c) (Either b c) #

right' :: Cayley f p a b -> Cayley f p (Either c a) (Either c b) #

(Choice p, Choice q) => Choice (Procompose p q) # 

Methods

left' :: 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) #

Functor f => Choice (Joker * * f) # 

Methods

left' :: Joker * * f a b -> Joker * * f (Either a c) (Either b c) #

right' :: Joker * * f a b -> Joker * * f (Either c a) (Either c b) #

(Choice p, Choice q) => Choice (Product * * p q) # 

Methods

left' :: Product * * p q a b -> Product * * p q (Either a c) (Either b c) #

right' :: Product * * p q a b -> Product * * p q (Either c a) (Either c b) #

(Functor f, Choice p) => Choice (Tannen * * * f p) # 

Methods

left' :: Tannen * * * f p a b -> Tannen * * * f p (Either a c) (Either b c) #

right' :: Tannen * * * f p a b -> Tannen * * * f p (Either c a) (Either c b) #

newtype TambaraSum p a b #

TambaraSum is cofreely adjoins strength with respect to Either.

Note: this is not dual to Tambara. It is Tambara with respect to a different tensor.

Constructors

TambaraSum 

Fields

Instances

ProfunctorComonad TambaraSum # 
ProfunctorFunctor TambaraSum # 

Methods

promap :: Profunctor p => (p :-> q) -> TambaraSum p :-> TambaraSum q #

ProfunctorAdjunction PastroSum TambaraSum # 
Profunctor p => Profunctor (TambaraSum p) # 

Methods

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

lmap :: (a -> b) -> TambaraSum p b c -> TambaraSum p a c #

rmap :: (b -> c) -> TambaraSum p a b -> TambaraSum p a c #

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

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

Profunctor p => Choice (TambaraSum p) # 

Methods

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

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

Category * p => Category * (TambaraSum p) # 

Methods

id :: cat a a #

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

Profunctor p => Functor (TambaraSum p a) # 

Methods

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

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

data PastroSum p a b where #

PastroSum -| TambaraSum

PastroSum freely constructs strength with respect to Either.

Constructors

PastroSum :: (Either y z -> b) -> p x y -> (a -> Either x z) -> PastroSum p a b 

Instances

ProfunctorMonad PastroSum # 
ProfunctorFunctor PastroSum # 

Methods

promap :: Profunctor p => (p :-> q) -> PastroSum p :-> PastroSum q #

ProfunctorAdjunction PastroSum TambaraSum # 
Profunctor (PastroSum p) # 

Methods

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

lmap :: (a -> b) -> PastroSum p b c -> PastroSum p a c #

rmap :: (b -> c) -> PastroSum p a b -> PastroSum p a c #

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

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

Choice (PastroSum p) # 

Methods

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

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

Costrength

class Profunctor p => Cochoice p where #

Minimal complete definition

unleft | unright

Methods

unleft :: p (Either a d) (Either b d) -> p a b #

unright :: p (Either d a) (Either d b) -> p a b #

Instances

Cochoice (->) # 

Methods

unleft :: (Either a d -> Either b d) -> a -> b #

unright :: (Either d a -> Either d b) -> a -> b #

Applicative f => Cochoice (Costar f) # 

Methods

unleft :: Costar f (Either a d) (Either b d) -> Costar f a b #

unright :: Costar f (Either d a) (Either d b) -> Costar f a b #

Traversable f => Cochoice (Star f) # 

Methods

unleft :: Star f (Either a d) (Either b d) -> Star f a b #

unright :: Star f (Either d a) (Either d b) -> Star f a b #

Cochoice (CopastroSum p) # 

Methods

unleft :: CopastroSum p (Either a d) (Either b d) -> CopastroSum p a b #

unright :: CopastroSum p (Either d a) (Either d b) -> CopastroSum p a b #

Cochoice (CotambaraSum p) # 

Methods

unleft :: CotambaraSum p (Either a d) (Either b d) -> CotambaraSum p a b #

unright :: CotambaraSum p (Either d a) (Either d b) -> CotambaraSum p a b #

(Cochoice p, Cochoice q) => Cochoice (Product * * p q) # 

Methods

unleft :: Product * * p q (Either a d) (Either b d) -> Product * * p q a b #

unright :: Product * * p q (Either d a) (Either d b) -> Product * * p q a b #

(Functor f, Cochoice p) => Cochoice (Tannen * * * f p) # 

Methods

unleft :: Tannen * * * f p (Either a d) (Either b d) -> Tannen * * * f p a b #

unright :: Tannen * * * f p (Either d a) (Either d b) -> Tannen * * * f p a b #

data CotambaraSum q a b where #

CotambaraSum cofreely constructs costrength with respect to Either (aka Choice)

Constructors

CotambaraSum :: Cochoice r => (r :-> q) -> r a b -> CotambaraSum q a b 

Instances

ProfunctorComonad CotambaraSum # 
ProfunctorFunctor CotambaraSum # 

Methods

promap :: Profunctor p => (p :-> q) -> CotambaraSum p :-> CotambaraSum q #

ProfunctorAdjunction CopastroSum CotambaraSum # 
Profunctor (CotambaraSum p) # 

Methods

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

lmap :: (a -> b) -> CotambaraSum p b c -> CotambaraSum p a c #

rmap :: (b -> c) -> CotambaraSum p a b -> CotambaraSum p a c #

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

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

Cochoice (CotambaraSum p) # 

Methods

unleft :: CotambaraSum p (Either a d) (Either b d) -> CotambaraSum p a b #

unright :: CotambaraSum p (Either d a) (Either d b) -> CotambaraSum p a b #

Functor (CotambaraSum p a) # 

Methods

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

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

newtype CopastroSum p a b #

CopastroSum -| CotambaraSum

CopastroSum freely constructs costrength with respect to Either (aka Choice)

Constructors

CopastroSum 

Fields

Instances

ProfunctorMonad CopastroSum # 
ProfunctorFunctor CopastroSum # 

Methods

promap :: Profunctor p => (p :-> q) -> CopastroSum p :-> CopastroSum q #

ProfunctorAdjunction CopastroSum CotambaraSum # 
Profunctor (CopastroSum p) # 

Methods

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

lmap :: (a -> b) -> CopastroSum p b c -> CopastroSum p a c #

rmap :: (b -> c) -> CopastroSum p a b -> CopastroSum p a c #

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

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

Cochoice (CopastroSum p) # 

Methods

unleft :: CopastroSum p (Either a d) (Either b d) -> CopastroSum p a b #

unright :: CopastroSum p (Either d a) (Either d b) -> CopastroSum p a b #