profunctors-5.6.2: 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.Strong

Contents

- Strength
- Costrength

Description

Synopsis

- class Profunctor p => Strong (p :: Type -> Type -> Type) where
  - first' :: p a b -> p (a, c) (b, c)
  - second' :: p a b -> p (c, a) (c, b)
- uncurry' :: Strong p => p a (b -> c) -> p (a, b) c
- strong :: Strong p => (a -> b -> c) -> p a b -> p a c
- newtype Tambara (p :: Type -> Type -> Type) a b = Tambara {
  - runTambara :: forall c. p (a, c) (b, c)
  }
- tambara :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Strong p => (p :-> q) -> p :-> Tambara q
- untambara :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> Tambara q) -> p :-> q
- data Pastro (p :: Type -> Type -> Type) a b where
  - Pastro :: forall y z b (p :: Type -> Type -> Type) x a. ((y, z) -> b) -> p x y -> (a -> (x, z)) -> Pastro p a b
- pastro :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Strong q => (p :-> q) -> Pastro p :-> q
- unpastro :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). (Pastro p :-> q) -> p :-> q
- class Profunctor p => Costrong (p :: Type -> Type -> Type) where
  - unfirst :: p (a, d) (b, d) -> p a b
  - unsecond :: p (d, a) (d, b) -> p a b
- data Cotambara (q :: Type -> Type -> Type) a b where
  - Cotambara :: forall (r :: Type -> Type -> Type) (q :: Type -> Type -> Type) a b. Costrong r => (r :-> q) -> r a b -> Cotambara q a b
- cotambara :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Costrong p => (p :-> q) -> p :-> Cotambara q
- uncotambara :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> Cotambara q) -> p :-> q
- newtype Copastro (p :: Type -> Type -> Type) a b = Copastro {
  - runCopastro :: forall (r :: Type -> Type -> Type). Costrong r => (forall x y. p x y -> r x y) -> r a b
  }

# Strength

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

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.riec.tohoku.ac.jp/~asada/papers/arrStrMnd.pdf

Minimal complete definition

first' | second'

Methods

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

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

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

Instances details

Monad m => Strong (Kleisli m) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Kleisli m a b -> Kleisli m (a, c) (b, c) # second' :: Kleisli m a b -> Kleisli m (c, a) (c, b) #
Strong p => Strong (Closure p) # |
Instance details Defined in Data.Profunctor.Closed Methods first' :: Closure p a b -> Closure p (a, c) (b, c) # second' :: Closure p a b -> Closure p (c, a) (c, b) #
Profunctor p => Strong (CofreeMapping p) # |
Instance details Defined in Data.Profunctor.Mapping Methods first' :: CofreeMapping p a b -> CofreeMapping p (a, c) (b, c) # second' :: CofreeMapping p a b -> CofreeMapping p (c, a) (c, b) #
Strong (FreeMapping p) # |
Instance details Defined in Data.Profunctor.Mapping Methods first' :: FreeMapping p a b -> FreeMapping p (a, c) (b, c) # second' :: FreeMapping p a b -> FreeMapping p (c, a) (c, b) #
Strong (Pastro p) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Pastro p a b -> Pastro p (a, c) (b, c) # second' :: Pastro p a b -> Pastro p (c, a) (c, b) #
Profunctor p => Strong (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Tambara p a b -> Tambara p (a, c) (b, c) # second' :: Tambara p a b -> Tambara p (c, a) (c, b) #
Profunctor p => Strong (CofreeTraversing p) # |
Instance details Defined in Data.Profunctor.Traversing Methods first' :: CofreeTraversing p a b -> CofreeTraversing p (a, c) (b, c) # second' :: CofreeTraversing p a b -> CofreeTraversing p (c, a) (c, b) #
Strong (FreeTraversing p) # |
Instance details Defined in Data.Profunctor.Traversing Methods first' :: FreeTraversing p a b -> FreeTraversing p (a, c) (b, c) # second' :: FreeTraversing p a b -> FreeTraversing p (c, a) (c, b) #
Strong p => Strong (Coyoneda p) # |
Instance details Defined in Data.Profunctor.Yoneda Methods first' :: Coyoneda p a b -> Coyoneda p (a, c) (b, c) # second' :: Coyoneda p a b -> Coyoneda p (c, a) (c, b) #
Strong p => Strong (Yoneda p) # |
Instance details Defined in Data.Profunctor.Yoneda Methods first' :: Yoneda p a b -> Yoneda p (a, c) (b, c) # second' :: Yoneda p a b -> Yoneda p (c, a) (c, b) #
Strong (Forget r :: Type -> Type -> Type) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Forget r a b -> Forget r (a, c) (b, c) # second' :: Forget r a b -> Forget r (c, a) (c, b) #
Functor m => Strong (Star m) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Star m a b -> Star m (a, c) (b, c) # second' :: Star m a b -> Star m (c, a) (c, b) #
Strong (->) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: (a -> b) -> (a, c) -> (b, c) # second' :: (a -> b) -> (c, a) -> (c, b) #
Contravariant f => Strong (Clown f :: Type -> Type -> Type) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Clown f a b -> Clown f (a, c) (b, c) # second' :: Clown f a b -> Clown f (c, a) (c, b) #
Arrow p => Strong (WrappedArrow p) # | `Arrow` is `Strong` `Category`
Instance details Defined in Data.Profunctor.Strong Methods first' :: WrappedArrow p a b -> WrappedArrow p (a, c) (b, c) # second' :: WrappedArrow p a b -> WrappedArrow p (c, a) (c, b) #
(Strong p, Strong q) => Strong (Product p q) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Product p q a b -> Product p q (a, c) (b, c) # second' :: Product p q a b -> Product p q (c, a) (c, b) #
(Strong p, Strong q) => Strong (Sum p q) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Sum p q a b -> Sum p q (a, c) (b, c) # second' :: Sum p q a b -> Sum p q (c, a) (c, b) #
(Functor f, Strong p) => Strong (Tannen f p) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Tannen f p a b -> Tannen f p (a, c) (b, c) # second' :: Tannen f p a b -> Tannen f p (c, a) (c, b) #
(Functor f, Strong p) => Strong (Cayley f p) # |
Instance details Defined in Data.Profunctor.Cayley Methods first' :: Cayley f p a b -> Cayley f p (a, c) (b, c) # second' :: Cayley f p a b -> Cayley f p (c, a) (c, b) #
(Strong p, Strong q) => Strong (Procompose p q) # |
Instance details Defined in Data.Profunctor.Composition Methods first' :: Procompose p q a b -> Procompose p q (a, c) (b, c) # second' :: Procompose p q a b -> Procompose p q (c, a) (c, b) #

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

strong :: Strong p => (a -> b -> c) -> p a b -> p a c #

newtype Tambara (p :: Type -> Type -> Type) a b #

`Tambara` cofreely makes any `Profunctor` `Strong`.

Constructors

Tambara |

Fields

- runTambara :: forall c. p (a, c) (b, c)

#### Instances

Instances details

ProfunctorComonad Tambara # |
Instance details Defined in Data.Profunctor.Strong Methods proextract :: forall (p :: Type -> Type -> Type). Profunctor p => Tambara p :-> p # produplicate :: forall (p :: Type -> Type -> Type). Profunctor p => Tambara p :-> Tambara (Tambara p) #
ProfunctorAdjunction Pastro Tambara # |
Instance details Defined in Data.Profunctor.Strong Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Tambara (Pastro p) # counit :: forall (p :: Type -> Type -> Type). Profunctor p => Pastro (Tambara p) :-> p #
ProfunctorFunctor Tambara # |
Instance details Defined in Data.Profunctor.Strong Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> Tambara p :-> Tambara q #
Category p => Category (Tambara p :: Type -> Type -> Type) # |
Instance details Defined in Data.Profunctor.Strong Methods id :: Tambara p a a # (.) :: Tambara p b c -> Tambara p a b -> Tambara p a c #
Arrow p => Arrow (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong 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') #
ArrowApply p => ArrowApply (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods app :: Tambara p (Tambara p b c, b) c #
ArrowChoice p => ArrowChoice (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong 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 #
ArrowLoop p => ArrowLoop (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods loop :: Tambara p (b, d) (c, d) -> Tambara p b c #
ArrowPlus p => ArrowPlus (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods (<+>) :: Tambara p b c -> Tambara p b c -> Tambara p b c #
ArrowZero p => ArrowZero (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods zeroArrow :: Tambara p b c #
Choice p => Choice (Tambara p) # |
Instance details Defined in Data.Profunctor.Choice 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) #
Profunctor p => Strong (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Tambara p a b -> Tambara p (a, c) (b, c) # second' :: Tambara p a b -> Tambara p (c, a) (c, b) #
Profunctor p => Profunctor (Tambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods dimap :: (a -> b) -> (c -> d) -> Tambara p b c -> Tambara p a d # lmap :: (a -> b) -> Tambara p b c -> Tambara p a c # rmap :: (b -> c) -> Tambara p a b -> Tambara p a c # (#.) :: forall a b c q. Coercible c b => q b c -> Tambara p a b -> Tambara p a c # (.#) :: forall a b c q. Coercible b a => Tambara p b c -> q a b -> Tambara p a c #
(Profunctor p, ArrowPlus p) => Alternative (Tambara p a) # |
Instance details Defined in Data.Profunctor.Strong Methods empty :: 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] #
(Profunctor p, Arrow p) => Applicative (Tambara p a) # |
Instance details Defined in Data.Profunctor.Strong Methods pure :: 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 => Functor (Tambara p a) # |
Instance details Defined in Data.Profunctor.Strong Methods fmap :: (a0 -> b) -> Tambara p a a0 -> Tambara p a b # (<$) :: a0 -> Tambara p a b -> Tambara p a a0 #
ArrowPlus p => Monoid (Tambara p a b) # |
Instance details Defined in Data.Profunctor.Strong 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 #
ArrowPlus p => Semigroup (Tambara p a b) # |
Instance details Defined 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 #

tambara :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Strong p => (p :-> q) -> p :-> Tambara q #

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

untambara :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> Tambara q) -> p :-> q #

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

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

Pastro -| Tambara

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

`Pastro` freely makes any `Profunctor` `Strong`.

Constructors

Pastro :: forall y z b (p :: Type -> Type -> Type) x a. ((y, z) -> b) -> p x y -> (a -> (x, z)) -> Pastro p a b |

#### Instances

Instances details

ProfunctorMonad Pastro # |
Instance details Defined in Data.Profunctor.Strong Methods proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Pastro p # projoin :: forall (p :: Type -> Type -> Type). Profunctor p => Pastro (Pastro p) :-> Pastro p #
ProfunctorAdjunction Pastro Tambara # |
Instance details Defined in Data.Profunctor.Strong Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Tambara (Pastro p) # counit :: forall (p :: Type -> Type -> Type). Profunctor p => Pastro (Tambara p) :-> p #
ProfunctorFunctor Pastro # |
Instance details Defined in Data.Profunctor.Strong Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> Pastro p :-> Pastro q #
Strong (Pastro p) # |
Instance details Defined in Data.Profunctor.Strong Methods first' :: Pastro p a b -> Pastro p (a, c) (b, c) # second' :: Pastro p a b -> Pastro p (c, a) (c, b) #
Profunctor (Pastro p) # |
Instance details Defined in Data.Profunctor.Strong Methods dimap :: (a -> b) -> (c -> d) -> Pastro p b c -> Pastro p a d # lmap :: (a -> b) -> Pastro p b c -> Pastro p a c # rmap :: (b -> c) -> Pastro p a b -> Pastro p a c # (#.) :: forall a b c q. Coercible c b => q b c -> Pastro p a b -> Pastro p a c # (.#) :: forall a b c q. Coercible b a => Pastro p b c -> q a b -> Pastro p a c #
Functor (Pastro p a) # |
Instance details Defined in Data.Profunctor.Strong Methods fmap :: (a0 -> b) -> Pastro p a a0 -> Pastro p a b # (<$) :: a0 -> Pastro p a b -> Pastro p a a0 #

pastro :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Strong q => (p :-> q) -> Pastro p :-> q #

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

unpastro :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). (Pastro p :-> q) -> p :-> q #

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

# Costrength

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

Analogous to `ArrowLoop`, `loop` = `unfirst`

Minimal complete definition

unfirst | unsecond

Methods

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

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 #

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

Instances details

MonadFix m => Costrong (Kleisli m) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Kleisli m (a, d) (b, d) -> Kleisli m a b # unsecond :: Kleisli m (d, a) (d, b) -> Kleisli m a b #
Costrong (Copastro p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Copastro p (a, d) (b, d) -> Copastro p a b # unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b #
Costrong (Cotambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Cotambara p (a, d) (b, d) -> Cotambara p a b # unsecond :: Cotambara p (d, a) (d, b) -> Cotambara p a b #
Costrong p => Costrong (Coyoneda p) # |
Instance details Defined in Data.Profunctor.Yoneda Methods unfirst :: Coyoneda p (a, d) (b, d) -> Coyoneda p a b # unsecond :: Coyoneda p (d, a) (d, b) -> Coyoneda p a b #
Costrong p => Costrong (Yoneda p) # |
Instance details Defined in Data.Profunctor.Yoneda Methods unfirst :: Yoneda p (a, d) (b, d) -> Yoneda p a b # unsecond :: Yoneda p (d, a) (d, b) -> Yoneda p a b #
Costrong (Tagged :: Type -> Type -> Type) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Tagged (a, d) (b, d) -> Tagged a b # unsecond :: Tagged (d, a) (d, b) -> Tagged a b #
Functor f => Costrong (Cokleisli f) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Cokleisli f (a, d) (b, d) -> Cokleisli f a b # unsecond :: Cokleisli f (d, a) (d, b) -> Cokleisli f a b #
Functor f => Costrong (Costar f) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Costar f (a, d) (b, d) -> Costar f a b # unsecond :: Costar f (d, a) (d, b) -> Costar f a b #
Costrong (->) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: ((a, d) -> (b, d)) -> a -> b # unsecond :: ((d, a) -> (d, b)) -> a -> b #
ArrowLoop p => Costrong (WrappedArrow p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: WrappedArrow p (a, d) (b, d) -> WrappedArrow p a b # unsecond :: WrappedArrow p (d, a) (d, b) -> WrappedArrow p a b #
(Costrong p, Costrong q) => Costrong (Product p q) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Product p q (a, d) (b, d) -> Product p q a b # unsecond :: Product p q (d, a) (d, b) -> Product p q a b #
(Costrong p, Costrong q) => Costrong (Sum p q) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Sum p q (a, d) (b, d) -> Sum p q a b # unsecond :: Sum p q (d, a) (d, b) -> Sum p q a b #
(Functor f, Costrong p) => Costrong (Tannen f p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Tannen f p (a, d) (b, d) -> Tannen f p a b # unsecond :: Tannen f p (d, a) (d, b) -> Tannen f p a b #
(Functor f, Costrong p) => Costrong (Cayley f p) # |
Instance details Defined in Data.Profunctor.Cayley Methods unfirst :: Cayley f p (a, d) (b, d) -> Cayley f p a b # unsecond :: Cayley f p (d, a) (d, b) -> Cayley f p a b #
(Corepresentable p, Corepresentable q) => Costrong (Procompose p q) # |
Instance details Defined in Data.Profunctor.Composition Methods unfirst :: Procompose p q (a, d) (b, d) -> Procompose p q a b # unsecond :: Procompose p q (d, a) (d, b) -> Procompose p q a b #

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

Cotambara cofreely constructs costrength

Constructors

Cotambara :: forall (r :: Type -> Type -> Type) (q :: Type -> Type -> Type) a b. Costrong r => (r :-> q) -> r a b -> Cotambara q a b |

#### Instances

Instances details

ProfunctorComonad Cotambara # |
Instance details Defined in Data.Profunctor.Strong Methods proextract :: forall (p :: Type -> Type -> Type). Profunctor p => Cotambara p :-> p # produplicate :: forall (p :: Type -> Type -> Type). Profunctor p => Cotambara p :-> Cotambara (Cotambara p) #
ProfunctorAdjunction Copastro Cotambara # |
Instance details Defined in Data.Profunctor.Strong Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Cotambara (Copastro p) # counit :: forall (p :: Type -> Type -> Type). Profunctor p => Copastro (Cotambara p) :-> p #
ProfunctorFunctor Cotambara # |
Instance details Defined in Data.Profunctor.Strong Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> Cotambara p :-> Cotambara q #
Costrong (Cotambara p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Cotambara p (a, d) (b, d) -> Cotambara p a b # unsecond :: Cotambara p (d, a) (d, b) -> Cotambara p a b #
Profunctor (Cotambara p) # |

Instance details

Defined in Data.Profunctor.Strong

Methods

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

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

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

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

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

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

cotambara :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Costrong p => (p :-> q) -> p :-> Cotambara q #

    cotambara . uncotambara ≡ id
    uncotambara . cotambara ≡ id

uncotambara :: forall (q :: Type -> Type -> Type) (p :: Type -> Type -> Type). Profunctor q => (p :-> Cotambara q) -> p :-> q #

    cotambara . uncotambara ≡ id
    uncotambara . cotambara ≡ id

newtype Copastro (p :: Type -> Type -> Type) a b #

Copastro -| Cotambara

Copastro freely constructs costrength

Constructors

Copastro |

Fields

- runCopastro :: forall (r :: Type -> Type -> Type). Costrong r => (forall x y. p x y -> r x y) -> r a b

#### Instances

Instances details

ProfunctorMonad Copastro # |
Instance details Defined in Data.Profunctor.Strong Methods proreturn :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Copastro p # projoin :: forall (p :: Type -> Type -> Type). Profunctor p => Copastro (Copastro p) :-> Copastro p #
ProfunctorAdjunction Copastro Cotambara # |
Instance details Defined in Data.Profunctor.Strong Methods unit :: forall (p :: Type -> Type -> Type). Profunctor p => p :-> Cotambara (Copastro p) # counit :: forall (p :: Type -> Type -> Type). Profunctor p => Copastro (Cotambara p) :-> p #
ProfunctorFunctor Copastro # |
Instance details Defined in Data.Profunctor.Strong Methods promap :: forall (p :: Type -> Type -> Type) (q :: Type -> Type -> Type). Profunctor p => (p :-> q) -> Copastro p :-> Copastro q #
Costrong (Copastro p) # |
Instance details Defined in Data.Profunctor.Strong Methods unfirst :: Copastro p (a, d) (b, d) -> Copastro p a b # unsecond :: Copastro p (d, a) (d, b) -> Copastro p a b #
Profunctor (Copastro p) # |

Instance details

Defined in Data.Profunctor.Strong

Methods

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

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

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

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

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

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