profunctors-5.6.3: Profunctors

Copyright | (C) 2014-2015 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | provisional
Portability | Rank2Types
Safe Haskell | Safe
Language | Haskell2010

Data.Profunctor.Choice

Contents

- Strength
- Costrength

Description

Synopsis

- class Profunctor p => Choice (p :: Type -> Type -> Type) where
  - left' :: p a b -> p (Either a c) (Either b c)
  - right' :: p a b -> p (Either c a) (Either c b)
- newtype TambaraSum (p :: Type -> Type -> Type) a b = TambaraSum {
  - runTambaraSum :: forall c. p (Either a c) (Either b c)
  }
- tambaraSum :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Choice p => (p :-> q) -> p :-> TambaraSum q
- untambaraSum :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> TambaraSum q) -> p :-> q
- data PastroSum (p :: Type -> Type -> Type) a b where
  - PastroSum :: forall y z b (p :: Type -> Type -> Type) x a. (Either y z -> b) -> p x y -> (a -> Either x z) -> PastroSum p a b
- class Profunctor p => Cochoice (p :: Type -> Type -> Type) where
  - unleft :: p (Either a d) (Either b d) -> p a b
  - unright :: p (Either d a) (Either d b) -> p a b
- data CotambaraSum (q :: Type -> Type -> Type) a b where
  - CotambaraSum :: forall (r :: Type -> Type -> Type) (q :: Type -> Type -> Type) a b. Cochoice r => (r :-> q) -> r a b -> CotambaraSum q a b
- cotambaraSum :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Cochoice p => (p :-> q) -> p :-> CotambaraSum q
- uncotambaraSum :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> CotambaraSum q) -> p :-> q
- newtype CopastroSum (p :: Type -> Type -> Type) a b = CopastroSum {
  - runCopastroSum :: forall (r :: Type -> Type -> Type). Cochoice r => (forall x y. p x y -> r x y) -> r a b
  }

# Strength

class Profunctor p => Choice (p :: Type -> Type -> Type) where Source #

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) Source #

Laws:

    left' ≡ dimap swapE swapE . right' where
      swapE :: Either a b -> Either b a
      swapE = either Right Left
    rmap Left ≡ lmap Left . left'
    lmap (right f) . left' ≡ rmap (right f) . left'
    left' . left' ≡ dimap assocE unassocE . left' where
      assocE :: Either (Either a b) c -> Either a (Either b c)
      assocE (Left (Left a)) = Left a
      assocE (Left (Right b)) = Right (Left b)
      assocE (Right c) = Right (Right c)
      unassocE :: Either a (Either b c) -> Either (Either a b) c
      unassocE (Left a) = Left (Left a)
      unassocE (Right (Left b)) = Left (Right b)
      unassocE (Right (Right c)) = Right c

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

Laws:

    right' ≡ dimap swapE swapE . left' where
      swapE :: Either a b -> Either b a
      swapE = either Right Left
    rmap Right ≡ lmap Right . right'
    lmap (left f) . right' ≡ rmap (left f) . right'
    right' . right' ≡ dimap unassocE assocE . right' where
      assocE :: Either (Either a b) c -> Either a (Either b c)
      assocE (Left (Left a)) = Left a
      assocE (Left (Right b)) = Right (Left b)
      assocE (Right c) = Right (Right c)
      unassocE :: Either a (Either b c) -> Either (Either a b) c
      unassocE (Left a) = Left (Left a)
      unassocE (Right (Left b)) = Left (Right b)
      unassocE (Right (Right c)) = Right c

#### Instances

Instances details

Monad m => Choice (Kleisli m) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Kleisli m a b -> Kleisli m (Either a c) (Either b c) Source # right' :: Kleisli m a b -> Kleisli m (Either c a) (Either c b) Source #
Choice (PastroSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: PastroSum p a b -> PastroSum p (Either a c) (Either b c) Source # right' :: PastroSum p a b -> PastroSum p (Either c a) (Either c b) Source #
Profunctor p => Choice (TambaraSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: TambaraSum p a b -> TambaraSum p (Either a c) (Either b c) Source # right' :: TambaraSum p a b -> TambaraSum p (Either c a) (Either c b) Source #
Profunctor p => Choice (CofreeMapping p) Source # |
Instance details Defined in Data.Profunctor.Mapping Methods left' :: CofreeMapping p a b -> CofreeMapping p (Either a c) (Either b c) Source # right' :: CofreeMapping p a b -> CofreeMapping p (Either c a) (Either c b) Source #
Choice (FreeMapping p) Source # |
Instance details Defined in Data.Profunctor.Mapping Methods left' :: FreeMapping p a b -> FreeMapping p (Either a c) (Either b c) Source # right' :: FreeMapping p a b -> FreeMapping p (Either c a) (Either c b) Source #
Choice p => Choice (Tambara p) Source # |
Instance details Defined in Data.Profunctor.Choice 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 #
Profunctor p => Choice (CofreeTraversing p) Source # |
Instance details Defined in Data.Profunctor.Traversing Methods left' :: CofreeTraversing p a b -> CofreeTraversing p (Either a c) (Either b c) Source # right' :: CofreeTraversing p a b -> CofreeTraversing p (Either c a) (Either c b) Source #
Choice (FreeTraversing p) Source # |
Instance details Defined in Data.Profunctor.Traversing Methods left' :: FreeTraversing p a b -> FreeTraversing p (Either a c) (Either b c) Source # right' :: FreeTraversing p a b -> FreeTraversing p (Either c a) (Either c b) Source #
Choice p => Choice (Coyoneda p) Source # |
Instance details Defined in Data.Profunctor.Yoneda Methods left' :: Coyoneda p a b -> Coyoneda p (Either a c) (Either b c) Source # right' :: Coyoneda p a b -> Coyoneda p (Either c a) (Either c b) Source #
Choice p => Choice (Yoneda p) Source # |
Instance details Defined in Data.Profunctor.Yoneda Methods left' :: Yoneda p a b -> Yoneda p (Either a c) (Either b c) Source # right' :: Yoneda p a b -> Yoneda p (Either c a) (Either c b) Source #
Choice (Tagged :: Type -> Type -> Type) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Tagged a b -> Tagged (Either a c) (Either b c) Source # right' :: Tagged a b -> Tagged (Either c a) (Either c b) Source #
Comonad w => Choice (Cokleisli w) Source # | `extract` approximates `costrength`
Instance details Defined in Data.Profunctor.Choice Methods left' :: Cokleisli w a b -> Cokleisli w (Either a c) (Either b c) Source # right' :: Cokleisli w a b -> Cokleisli w (Either c a) (Either c b) Source #
Monoid r => Choice (Forget r :: Type -> Type -> Type) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Forget r a b -> Forget r (Either a c) (Either b c) Source # right' :: Forget r a b -> Forget r (Either c a) (Either c b) Source #
Applicative f => Choice (Star f) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Star f a b -> Star f (Either a c) (Either b c) Source # right' :: Star f a b -> Star f (Either c a) (Either c b) Source #
Choice (->) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: (a -> b) -> Either a c -> Either b c Source # right' :: (a -> b) -> Either c a -> Either c b Source #
Functor f => Choice (Joker f :: Type -> Type -> Type) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Joker f a b -> Joker f (Either a c) (Either b c) Source # right' :: Joker f a b -> Joker f (Either c a) (Either c b) Source #
ArrowChoice p => Choice (WrappedArrow p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: WrappedArrow p a b -> WrappedArrow p (Either a c) (Either b c) Source # right' :: WrappedArrow p a b -> WrappedArrow p (Either c a) (Either c b) Source #
(Choice p, Choice q) => Choice (Product p q) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Product p q a b -> Product p q (Either a c) (Either b c) Source # right' :: Product p q a b -> Product p q (Either c a) (Either c b) Source #
(Choice p, Choice q) => Choice (Sum p q) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Sum p q a b -> Sum p q (Either a c) (Either b c) Source # right' :: Sum p q a b -> Sum p q (Either c a) (Either c b) Source #
(Functor f, Choice p) => Choice (Tannen f p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: Tannen f p a b -> Tannen f p (Either a c) (Either b c) Source # right' :: Tannen f p a b -> Tannen f p (Either c a) (Either c b) Source #
(Functor f, Choice p) => Choice (Cayley f p) Source # |
Instance details Defined in Data.Profunctor.Cayley Methods left' :: Cayley f p a b -> Cayley f p (Either a c) (Either b c) Source # right' :: Cayley f p a b -> Cayley f p (Either c a) (Either c b) Source #
(Choice p, Choice q) => Choice (Procompose p q) Source # |
Instance details Defined in Data.Profunctor.Composition Methods left' :: Procompose p q a b -> Procompose p q (Either a c) (Either b c) Source # right' :: Procompose p q a b -> Procompose p q (Either c a) (Either c b) Source #

newtype TambaraSum (p :: Type -> Type -> Type) a b Source #

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

- runTambaraSum :: forall c. p (Either a c) (Either b c)

#### Instances

Instances details

ProfunctorComonad TambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods proextract :: forall (p :: Type -> Type -> Type). Profunctor p => TambaraSum p :-> p Source # produplicate :: forall (p :: Type -> Type -> Type). Profunctor p => TambaraSum p :-> TambaraSum (TambaraSum p) Source #
ProfunctorAdjunction PastroSum TambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> TambaraSum (PastroSum p) Source # counit :: forall (p :: Type -> Type -> Type). Profunctor p => PastroSum (TambaraSum p) :-> p Source #
ProfunctorFunctor TambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> TambaraSum p :-> TambaraSum q Source #
Category p => Category (TambaraSum p :: Type -> Type -> Type) Source # |
Instance details Defined in Data.Profunctor.Choice Methods id :: TambaraSum p a a Source # (.) :: TambaraSum p b c -> TambaraSum p a b -> TambaraSum p a c Source #
Profunctor p => Choice (TambaraSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: TambaraSum p a b -> TambaraSum p (Either a c) (Either b c) Source # right' :: TambaraSum p a b -> TambaraSum p (Either c a) (Either c b) Source #
Profunctor p => Profunctor (TambaraSum p) Source # |

Instance details

Defined in Data.Profunctor.Choice

Methods

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

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

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

(#.) :: forall a b c q. Coercible c b => q b c -> TambaraSum p a b -> TambaraSum p a c Source #

(.#) :: forall a b c q. Coercible b a => TambaraSum p b c -> q a b -> TambaraSum p a c Source #

Profunctor p => Functor (TambaraSum p a) Source # |
Instance details Defined in Data.Profunctor.Choice Methods fmap :: (a0 -> b) -> TambaraSum p a a0 -> TambaraSum p a b Source # (<$) :: a0 -> TambaraSum p a b -> TambaraSum p a a0 Source #

tambaraSum :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Choice p => (p :-> q) -> p :-> TambaraSum q Source #

    tambaraSum . untambaraSum ≡ id
    untambaraSum . tambaraSum ≡ id

untambaraSum :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> TambaraSum q) -> p :-> q Source #

    tambaraSum . untambaraSum ≡ id
    untambaraSum . tambaraSum ≡ id

data PastroSum (p :: Type -> Type -> Type) a b where Source #

PastroSum -| TambaraSum

PastroSum freely constructs strength with respect to Either.

Constructors

PastroSum :: forall y z b (p :: Type -> Type -> Type) x a. (Either y z -> b) -> p x y -> (a -> Either x z) -> PastroSum p a b |

#### Instances

Instances details

ProfunctorMonad PastroSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> PastroSum p Source # projoin :: forall (p :: Type -> Type -> Type). Profunctor p => PastroSum (PastroSum p) :-> PastroSum p Source #
ProfunctorAdjunction PastroSum TambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> TambaraSum (PastroSum p) Source # counit :: forall (p :: Type -> Type -> Type). Profunctor p => PastroSum (TambaraSum p) :-> p Source #
ProfunctorFunctor PastroSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> PastroSum p :-> PastroSum q Source #
Choice (PastroSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods left' :: PastroSum p a b -> PastroSum p (Either a c) (Either b c) Source # right' :: PastroSum p a b -> PastroSum p (Either c a) (Either c b) Source #
Profunctor (PastroSum p) Source # |

Instance details

Defined in Data.Profunctor.Choice

Methods

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

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

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

(#.) :: forall a b c q. Coercible c b => q b c -> PastroSum p a b -> PastroSum p a c Source #

(.#) :: forall a b c q. Coercible b a => PastroSum p b c -> q a b -> PastroSum p a c Source #

Functor (PastroSum p a) Source # |
Instance details Defined in Data.Profunctor.Choice Methods fmap :: (a0 -> b) -> PastroSum p a a0 -> PastroSum p a b Source # (<$) :: a0 -> PastroSum p a b -> PastroSum p a a0 Source #

# Costrength

class Profunctor p => Cochoice (p :: Type -> Type -> Type) where Source #

Minimal complete definition

unleft | unright

Methods

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

Laws:

    unleft ≡ unright . dimap swapE swapE where
      swapE :: Either a b -> Either b a
      swapE = either Right Left
    rmap (either id absurd) ≡ unleft . lmap (either id absurd)
    unfirst . rmap (second f) ≡ unfirst . lmap (second f)
    unleft . unleft ≡ unleft . dimap assocE unassocE where
      assocE :: Either (Either a b) c -> Either a (Either b c)
      assocE (Left (Left a)) = Left a
      assocE (Left (Right b)) = Right (Left b)
      assocE (Right c) = Right (Right c)
      unassocE :: Either a (Either b c) -> Either (Either a b) c
      unassocE (Left a) = Left (Left a)
      unassocE (Right (Left b)) = Left (Right b)
      unassocE (Right (Right c)) = Right c

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

Laws:

    unright ≡ unleft . dimap swapE swapE where
      swapE :: Either a b -> Either b a
      swapE = either Right Left
    rmap (either absurd id) ≡ unright . lmap (either absurd id)
    unsecond . rmap (first f) ≡ unsecond . lmap (first f)
    unright . unright ≡ unright . dimap unassocE assocE where
      assocE :: Either (Either a b) c -> Either a (Either b c)
      assocE (Left (Left a)) = Left a
      assocE (Left (Right b)) = Right (Left b)
      assocE (Right c) = Right (Right c)
      unassocE :: Either a (Either b c) -> Either (Either a b) c
      unassocE (Left a) = Left (Left a)
      unassocE (Right (Left b)) = Left (Right b)
      unassocE (Right (Right c)) = Right c

#### Instances

Instances details

Cochoice (CopastroSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: CopastroSum p (Either a d) (Either b d) -> CopastroSum p a b Source # unright :: CopastroSum p (Either d a) (Either d b) -> CopastroSum p a b Source #
Cochoice (CotambaraSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: CotambaraSum p (Either a d) (Either b d) -> CotambaraSum p a b Source # unright :: CotambaraSum p (Either d a) (Either d b) -> CotambaraSum p a b Source #
Cochoice p => Cochoice (Coyoneda p) Source # |
Instance details Defined in Data.Profunctor.Yoneda Methods unleft :: Coyoneda p (Either a d) (Either b d) -> Coyoneda p a b Source # unright :: Coyoneda p (Either d a) (Either d b) -> Coyoneda p a b Source #
Cochoice p => Cochoice (Yoneda p) Source # |
Instance details Defined in Data.Profunctor.Yoneda Methods unleft :: Yoneda p (Either a d) (Either b d) -> Yoneda p a b Source # unright :: Yoneda p (Either d a) (Either d b) -> Yoneda p a b Source #
Applicative f => Cochoice (Costar f) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Costar f (Either a d) (Either b d) -> Costar f a b Source # unright :: Costar f (Either d a) (Either d b) -> Costar f a b Source #
Cochoice (Forget r :: Type -> Type -> Type) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Forget r (Either a d) (Either b d) -> Forget r a b Source # unright :: Forget r (Either d a) (Either d b) -> Forget r a b Source #
Traversable f => Cochoice (Star f) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Star f (Either a d) (Either b d) -> Star f a b Source # unright :: Star f (Either d a) (Either d b) -> Star f a b Source #
Cochoice (->) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: (Either a d -> Either b d) -> a -> b Source # unright :: (Either d a -> Either d b) -> a -> b Source #
(Cochoice p, Cochoice q) => Cochoice (Product p q) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Product p q (Either a d) (Either b d) -> Product p q a b Source # unright :: Product p q (Either d a) (Either d b) -> Product p q a b Source #
(Cochoice p, Cochoice q) => Cochoice (Sum p q) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Sum p q (Either a d) (Either b d) -> Sum p q a b Source # unright :: Sum p q (Either d a) (Either d b) -> Sum p q a b Source #
(Functor f, Cochoice p) => Cochoice (Tannen f p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: Tannen f p (Either a d) (Either b d) -> Tannen f p a b Source # unright :: Tannen f p (Either d a) (Either d b) -> Tannen f p a b Source #
(Functor f, Cochoice p) => Cochoice (Cayley f p) Source # |
Instance details Defined in Data.Profunctor.Cayley Methods unleft :: Cayley f p (Either a d) (Either b d) -> Cayley f p a b Source # unright :: Cayley f p (Either d a) (Either d b) -> Cayley f p a b Source #

data CotambaraSum (q :: Type -> Type -> Type) a b where Source #

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

Constructors

CotambaraSum :: forall (r :: Type -> Type -> Type) (q :: Type -> Type -> Type) a b. Cochoice r => (r :-> q) -> r a b -> CotambaraSum q a b |

#### Instances

Instances details

ProfunctorComonad CotambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods proextract :: forall (p :: Type -> Type -> Type). Profunctor p => CotambaraSum p :-> p Source # produplicate :: forall (p :: Type -> Type -> Type). Profunctor p => CotambaraSum p :-> CotambaraSum (CotambaraSum p) Source #
ProfunctorAdjunction CopastroSum CotambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> CotambaraSum (CopastroSum p) Source # counit :: forall (p :: Type -> Type -> Type). Profunctor p => CopastroSum (CotambaraSum p) :-> p Source #
ProfunctorFunctor CotambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> CotambaraSum p :-> CotambaraSum q Source #
Cochoice (CotambaraSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: CotambaraSum p (Either a d) (Either b d) -> CotambaraSum p a b Source # unright :: CotambaraSum p (Either d a) (Either d b) -> CotambaraSum p a b Source #
Profunctor (CotambaraSum p) Source # |

Instance details

Defined in Data.Profunctor.Choice

Methods

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

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

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

(#.) :: forall a b c q. Coercible c b => q b c -> CotambaraSum p a b -> CotambaraSum p a c Source #

(.#) :: forall a b c q. Coercible b a => CotambaraSum p b c -> q a b -> CotambaraSum p a c Source #

Functor (CotambaraSum p a) Source # |
Instance details Defined in Data.Profunctor.Choice Methods fmap :: (a0 -> b) -> CotambaraSum p a a0 -> CotambaraSum p a b Source # (<$) :: a0 -> CotambaraSum p a b -> CotambaraSum p a a0 Source #

cotambaraSum :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Cochoice p => (p :-> q) -> p :-> CotambaraSum q Source #

    cotambaraSum . uncotambaraSum ≡ id
    uncotambaraSum . cotambaraSum ≡ id

uncotambaraSum :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> CotambaraSum q) -> p :-> q Source #

    cotambaraSum . uncotambaraSum ≡ id
    uncotambaraSum . cotambaraSum ≡ id

newtype CopastroSum (p :: Type -> Type -> Type) a b Source #

CopastroSum -| CotambaraSum

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

Constructors

CopastroSum |

Fields

- runCopastroSum :: forall (r :: Type -> Type -> Type). Cochoice r => (forall x y. p x y -> r x y) -> r a b

#### Instances

Instances details

ProfunctorMonad CopastroSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> CopastroSum p Source # projoin :: forall (p :: Type -> Type -> Type). Profunctor p => CopastroSum (CopastroSum p) :-> CopastroSum p Source #
ProfunctorAdjunction CopastroSum CotambaraSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> CotambaraSum (CopastroSum p) Source # counit :: forall (p :: Type -> Type -> Type). Profunctor p => CopastroSum (CotambaraSum p) :-> p Source #
ProfunctorFunctor CopastroSum Source # |
Instance details Defined in Data.Profunctor.Choice Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> CopastroSum p :-> CopastroSum q Source #
Cochoice (CopastroSum p) Source # |
Instance details Defined in Data.Profunctor.Choice Methods unleft :: CopastroSum p (Either a d) (Either b d) -> CopastroSum p a b Source # unright :: CopastroSum p (Either d a) (Either d b) -> CopastroSum p a b Source #
Profunctor (CopastroSum p) Source # |

Instance details

Defined in Data.Profunctor.Choice

Methods

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

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

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

(#.) :: forall a b c q. Coercible c b => q b c -> CopastroSum p a b -> CopastroSum p a c Source #

(.#) :: forall a b c q. Coercible b a => CopastroSum p b c -> q a b -> CopastroSum p a c Source #

Functor (CopastroSum p a) Source # |
Instance details Defined in Data.Profunctor.Choice Methods fmap :: (a0 -> b) -> CopastroSum p a a0 -> CopastroSum p a b Source # (<$) :: a0 -> CopastroSum p a b -> CopastroSum p a a0 Source #