profunctors-5.3: Profunctors

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.

Minimal complete definition

Methods

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

Laws:

first' ≡ dimap swap swap . second'
lmap fst ≡ rmap 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 snd ≡ rmap 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
 Monad m => Strong (Kleisli m) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Closed Methodsfirst' :: Closure p a b -> Closure p (a, c) (b, c) Source #second' :: Closure p a b -> Closure p (c, a) (c, b) Source # Source # Instance detailsDefined in Data.Profunctor.Traversing Methodsfirst' :: FreeTraversing p a b -> FreeTraversing p (a, c) (b, c) Source #second' :: FreeTraversing p a b -> FreeTraversing p (c, a) (c, b) Source # Source # Instance detailsDefined in Data.Profunctor.Traversing Methodsfirst' :: CofreeTraversing p a b -> CofreeTraversing p (a, c) (b, c) Source #second' :: CofreeTraversing p a b -> CofreeTraversing p (c, a) (c, b) Source # Source # Instance detailsDefined in Data.Profunctor.Mapping Methodsfirst' :: FreeMapping p a b -> FreeMapping p (a, c) (b, c) Source #second' :: FreeMapping p a b -> FreeMapping p (c, a) (c, b) Source # Source # Instance detailsDefined in Data.Profunctor.Mapping Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Yoneda Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Yoneda Methodsfirst' :: Yoneda p a b -> Yoneda p (a, c) (b, c) Source #second' :: Yoneda p a b -> Yoneda p (c, a) (c, b) Source # Strong ((->) :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: (a -> b) -> (a, c) -> (b, c) Source #second' :: (a -> b) -> (c, a) -> (c, b) Source # (Strong p, Strong q) => Strong (Procompose p q) Source # Instance detailsDefined in Data.Profunctor.Composition Methodsfirst' :: 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 # (Functor f, Strong p) => Strong (Cayley f p) Source # Instance detailsDefined in Data.Profunctor.Cayley Methodsfirst' :: 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 # Contravariant f => Strong (Clown f :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 FieldsrunTambara :: forall c. p (a, c) (b, c)
Instances
 Source # Instance detailsDefined in Data.Profunctor.Strong Methods Source # Instance detailsDefined in Data.Profunctor.Strong Methodspromap :: Profunctor p => (p :-> q) -> Tambara p :-> Tambara q Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunit :: Profunctor p => p :-> Tambara (Pastro p) Source #counit :: Profunctor p => Pastro (Tambara p) :-> p Source # Arrow p => Arrow (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsarr :: (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 # Instance detailsDefined in Data.Profunctor.Strong MethodszeroArrow :: Tambara p b c # ArrowPlus p => ArrowPlus (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Strong Methods(<+>) :: Tambara p b c -> Tambara p b c -> Tambara p b c # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsleft :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsapp :: Tambara p (Tambara p b c, b) c # ArrowLoop p => ArrowLoop (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsloop :: Tambara p (b, d) (c, d) -> Tambara p b c # Profunctor p => Profunctor (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsdimap :: (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 => q b c -> Tambara p a b -> Tambara p a c Source #(.#) :: Coercible b a => Tambara p b c -> q a b -> Tambara p a c Source # Profunctor p => Strong (Tambara p) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 # 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 # Category p => Category (Tambara p :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsid :: Tambara p a a #(.) :: Tambara p b c -> Tambara p a b -> Tambara p a c # Profunctor p => Functor (Tambara p a) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfmap :: (a0 -> b) -> Tambara p a a0 -> Tambara p a b #(<$) :: a0 -> Tambara p a b -> Tambara p a a0 # (Profunctor p, Arrow p) => Applicative (Tambara p a) Source # Instance detailsDefined in Data.Profunctor.Strong Methodspure :: a0 -> Tambara p a a0 #(<*>) :: Tambara p a (a0 -> b) -> Tambara p a a0 -> Tambara p a b #liftA2 :: (a0 -> b -> c) -> Tambara p a a0 -> Tambara p a b -> Tambara p a c #(*>) :: Tambara p a a0 -> Tambara p a b -> Tambara p a b #(<*) :: Tambara p a a0 -> Tambara p a b -> Tambara p a a0 # (Profunctor p, ArrowPlus p) => Alternative (Tambara p a) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsempty :: Tambara p a a0 #(<|>) :: Tambara p a a0 -> Tambara p a a0 -> Tambara p a a0 #some :: Tambara p a a0 -> Tambara p a [a0] #many :: Tambara p a a0 -> Tambara p a [a0] # ArrowPlus p => Semigroup (Tambara p a b) Source # Instance detailsDefined in Data.Profunctor.Strong Methods(<>) :: Tambara p a b -> Tambara p a b -> Tambara p a b #sconcat :: NonEmpty (Tambara p a b) -> Tambara p a b #stimes :: Integral b0 => b0 -> Tambara p a b -> Tambara p a b # ArrowPlus p => Monoid (Tambara p a b) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsmempty :: 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  Source # Instance detailsDefined in Data.Profunctor.Strong Methodsproreturn :: Profunctor p => p :-> Pastro p Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodspromap :: Profunctor p => (p :-> q) -> Pastro p :-> Pastro q Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunit :: Profunctor p => p :-> Tambara (Pastro p) Source #counit :: Profunctor p => Pastro (Tambara p) :-> p Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsdimap :: (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 => q b c -> Pastro p a b -> Pastro p a c Source #(.#) :: Coercible b a => Pastro p b c -> q a b -> Pastro p a c Source # Strong (Pastro p) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsfirst' :: 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 Methods unfirst :: p (a, d) (b, d) -> p a b Source # Laws: unfirst ≡ unsecond . 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: unsecond ≡ unfirst . 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  MonadFix m => Costrong (Kleisli m) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Kleisli m (a, d) (b, d) -> Kleisli m a b Source #unsecond :: Kleisli m (d, a) (d, b) -> Kleisli m a b Source # Costrong (Tagged :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Tagged (a, d) (b, d) -> Tagged a b Source #unsecond :: Tagged (d, a) (d, b) -> Tagged a b Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Costar f (a, d) (b, d) -> Costar f a b Source #unsecond :: Costar f (d, a) (d, b) -> Costar f a b Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Copastro p (a, d) (b, d) -> Copastro p a b Source #unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Yoneda Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Yoneda Methodsunfirst :: Yoneda p (a, d) (b, d) -> Yoneda p a b Source #unsecond :: Yoneda p (d, a) (d, b) -> Yoneda p a b Source # Costrong ((->) :: * -> * -> *) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: ((a, d) -> (b, d)) -> a -> b Source #unsecond :: ((d, a) -> (d, b)) -> a -> b Source # Functor f => Costrong (Cokleisli f) Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Cokleisli f (a, d) (b, d) -> Cokleisli f a b Source #unsecond :: Cokleisli f (d, a) (d, b) -> Cokleisli f a b Source # (Corepresentable p, Corepresentable q) => Costrong (Procompose p q) Source # Instance detailsDefined in Data.Profunctor.Composition Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: 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  Source # Instance detailsDefined in Data.Profunctor.Strong Methods Source # Instance detailsDefined in Data.Profunctor.Strong Methodspromap :: Profunctor p => (p :-> q) -> Cotambara p :-> Cotambara q Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunit :: Profunctor p => p :-> Cotambara (Copastro p) Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsdimap :: (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 => q b c -> Cotambara p a b -> Cotambara p a c Source #(.#) :: Coercible b a => Cotambara p b c -> q a b -> Cotambara p a c Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: 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 # Instance detailsDefined in Data.Profunctor.Strong Methodsfmap :: (a0 -> b) -> Cotambara p a a0 -> Cotambara p a b #(<$) :: a0 -> Cotambara p a b -> Cotambara p a a0 #

cotambara :: Costrong p => (p :-> q) -> p :-> Cotambara q Source #

cotambara . uncotambara ≡ id
uncotambara . cotambara ≡ id


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

cotambara . uncotambara ≡ id
uncotambara . cotambara ≡ id


newtype Copastro p a b Source #

Copastro -| Cotambara

Copastro freely constructs costrength

Constructors

 Copastro FieldsrunCopastro :: forall r. Costrong r => (forall x y. p x y -> r x y) -> r a b
Instances
 Source # Instance detailsDefined in Data.Profunctor.Strong Methods Source # Instance detailsDefined in Data.Profunctor.Strong Methodspromap :: Profunctor p => (p :-> q) -> Copastro p :-> Copastro q Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunit :: Profunctor p => p :-> Cotambara (Copastro p) Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsdimap :: (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 => q b c -> Copastro p a b -> Copastro p a c Source #(.#) :: Coercible b a => Copastro p b c -> q a b -> Copastro p a c Source # Source # Instance detailsDefined in Data.Profunctor.Strong Methodsunfirst :: Copastro p (a, d) (b, d) -> Copastro p a b Source #unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b Source #