profunctors-5.2.2: Profunctors

Data.Profunctor.Choice

Contents

Description

Synopsis

# Strength

class Profunctor p => Choice p 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

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
 Monad m => Choice (Kleisli m) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Comonad w => Choice (Cokleisli w) Source # extract approximates costrength Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Choice (Tagged :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: Tagged a b -> Tagged (Either a c) (Either b c) Source #right' :: Tagged a b -> Tagged (Either c a) (Either c b) Source # Monoid r => Choice (Forget r) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Traversable w => Choice (Costar w) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: Costar w a b -> Costar w (Either a c) (Either b c) Source #right' :: Costar w a b -> Costar w (Either c a) (Either c b) Source # Applicative f => Choice (Star f) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 p => Choice (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Traversing Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Traversing Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Mapping Methodsleft' :: 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 # Source # Instance detailsDefined in Data.Profunctor.Mapping Methodsleft' :: 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 p => Choice (Coyoneda p) Source # Instance detailsDefined in Data.Profunctor.Yoneda Methodsleft' :: 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 detailsDefined in Data.Profunctor.Yoneda Methodsleft' :: 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 ((->) :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: (a -> b) -> Either a c -> Either b c Source #right' :: (a -> b) -> Either c a -> Either c b Source # (Choice p, Choice q) => Choice (Procompose p q) Source # Instance detailsDefined in Data.Profunctor.Composition Methodsleft' :: 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 # (Functor f, Choice p) => Choice (Cayley f p) Source # Instance detailsDefined in Data.Profunctor.Cayley Methodsleft' :: 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 # Functor f => Choice (Joker f :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # (Choice p, Choice q) => Choice (Product p q) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # (Functor f, Choice p) => Choice (Tannen f p) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 #

newtype TambaraSum p 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 FieldsrunTambaraSum :: forall c. p (Either a c) (Either b c)
Instances
 Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodspromap :: Profunctor p => (p :-> q) -> TambaraSum p :-> TambaraSum q Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunit :: Profunctor p => p :-> TambaraSum (PastroSum p) Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsdimap :: (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 #(#.) :: Coercible c b => (b -> c) -> TambaraSum p a b -> TambaraSum p a c Source #(.#) :: Coercible b a => TambaraSum p b c -> (a -> b) -> TambaraSum p a c Source # Profunctor p => Choice (TambaraSum p) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # Category p => Category (TambaraSum p :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsid :: TambaraSum p a a #(.) :: TambaraSum p b c -> TambaraSum p a b -> TambaraSum p a c # Profunctor p => Functor (TambaraSum p a) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsfmap :: (a0 -> b) -> TambaraSum p a a0 -> TambaraSum p a b #(<$) :: a0 -> TambaraSum p a b -> TambaraSum p a a0 # tambaraSum :: Choice p => (p :-> q) -> p :-> TambaraSum q Source # tambaraSum . untambaraSum ≡ id untambaraSum . tambaraSum ≡ id  untambaraSum :: Profunctor q => (p :-> TambaraSum q) -> p :-> q Source # tambaraSum . untambaraSum ≡ id untambaraSum . tambaraSum ≡ id  data PastroSum p a b where Source # 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  Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodspromap :: Profunctor p => (p :-> q) -> PastroSum p :-> PastroSum q Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunit :: Profunctor p => p :-> TambaraSum (PastroSum p) Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsdimap :: (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 #(#.) :: Coercible c b => (b -> c) -> PastroSum p a b -> PastroSum p a c Source #(.#) :: Coercible b a => PastroSum p b c -> (a -> b) -> PastroSum p a c Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsleft' :: 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 # # Costrength class Profunctor p => Cochoice p where Source # Minimal complete definition 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  Applicative f => Cochoice (Costar f) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # Traversable f => Cochoice (Star f) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 detailsDefined in Data.Profunctor.Yoneda Methodsunleft :: 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 detailsDefined in Data.Profunctor.Yoneda Methodsunleft :: 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 # Cochoice ((->) :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: (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 detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # (Functor f, Cochoice p) => Cochoice (Tannen f p) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # data CotambaraSum q a b where Source # CotambaraSum cofreely constructs costrength with respect to Either (aka Choice) Constructors  CotambaraSum :: Cochoice r => (r :-> q) -> r a b -> CotambaraSum q a b Instances  Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodspromap :: Profunctor p => (p :-> q) -> CotambaraSum p :-> CotambaraSum q Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodsdimap :: (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 #(#.) :: Coercible c b => (b -> c) -> CotambaraSum p a b -> CotambaraSum p a c Source #(.#) :: Coercible b a => CotambaraSum p b c -> (a -> b) -> CotambaraSum p a c Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 # Functor (CotambaraSum p a) Source # Instance detailsDefined in Data.Profunctor.Choice Methodsfmap :: (a0 -> b) -> CotambaraSum p a a0 -> CotambaraSum p a b #(<$) :: a0 -> CotambaraSum p a b -> CotambaraSum p a a0 #

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

cotambaraSum . uncotambaraSum ≡ id
uncotambaraSum . cotambaraSum ≡ id


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

cotambaraSum . uncotambaraSum ≡ id
uncotambaraSum . cotambaraSum ≡ id


newtype CopastroSum p a b Source #

CopastroSum -| CotambaraSum

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

Constructors

 CopastroSum FieldsrunCopastroSum :: forall r. Cochoice r => (forall x y. p x y -> r x y) -> r a b
Instances
 Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodspromap :: Profunctor p => (p :-> q) -> CopastroSum p :-> CopastroSum q Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methods Source # Instance detailsDefined in Data.Profunctor.Choice Methodsdimap :: (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 #(#.) :: Coercible c b => (b -> c) -> CopastroSum p a b -> CopastroSum p a c Source #(.#) :: Coercible b a => CopastroSum p b c -> (a -> b) -> CopastroSum p a c Source # Source # Instance detailsDefined in Data.Profunctor.Choice Methodsunleft :: 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 #