proarrow
Safe HaskellNone
LanguageGHC2024

Proarrow.Category.Instance.Product

Documentation

data ((c :: j1 +-> k1) :**: (d :: j2 +-> k2)) (a :: (k1, k2)) (b :: (j1, j2)) where Source Github #

Constructors

(:**:) 

Fields

  • :: forall {j1} {k1} {j2} {k2} (c :: j1 +-> k1) (a1 :: k1) (b1 :: j1) (d :: j2 +-> k2) (a2 :: k2) (b2 :: j2). { fstK :: c a1 b1
     
  •    , sndK :: d a2 b2
     
  •    } -> (c :**: d) '(a1, a2) '(b1, b2)
     

Instances

Instances details
(ThinProfunctor p, ThinProfunctor q) => ThinProfunctor (p :**: q :: (k1, k2) -> (j1, j2) -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

arr :: forall (a :: (k1, k2)) (b :: (j1, j2)). (Ob a, Ob b, HasArrow (p :**: q) a b) => (p :**: q) a b Source Github #

withArr :: forall (a :: (k1, k2)) (b :: (j1, j2)) r. (p :**: q) a b -> ((HasArrow (p :**: q) a b, Ob a, Ob b) => r) -> r Source Github #

(MonoidalProfunctor p, MonoidalProfunctor q) => MonoidalProfunctor (p :**: q :: (k1, k2) -> (j1, j2) -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Monoidal

Methods

one :: (p :**: q) (Unit :: (k1, k2)) (Unit :: (j1, j2)) Source Github #

(**) :: forall (x1 :: (k1, k2)) (x2 :: (j1, j2)) (y1 :: (k1, k2)) (y2 :: (j1, j2)). (p :**: q) x1 x2 -> (p :**: q) y1 y2 -> (p :**: q) (x1 ** y1) (x2 ** y2) Source Github #

(Profunctor p, Profunctor q) => Profunctor (p :**: q :: (k1, k2) -> (j1, j2) -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

dimap :: forall (c :: (k1, k2)) (a :: (k1, k2)) (b :: (j1, j2)) (d :: (j1, j2)). (c ~> a) -> (b ~> d) -> (p :**: q) a b -> (p :**: q) c d Source Github #

lmap :: forall (c :: (k1, k2)) (a :: (k1, k2)) (b :: (j1, j2)). (c ~> a) -> (p :**: q) a b -> (p :**: q) c b Source Github #

rmap :: forall (b :: (j1, j2)) (d :: (j1, j2)) (a :: (k1, k2)). (b ~> d) -> (p :**: q) a b -> (p :**: q) a d Source Github #

(\\) :: forall (a :: (k1, k2)) (b :: (j1, j2)) r. ((Ob a, Ob b) => r) -> (p :**: q) a b -> r Source Github #

(Representable p, Representable q) => Representable (p :**: q :: (k1, k2) -> (j1, j2) -> Type) Source Github # 
Instance details

Defined in Proarrow.Profunctor.Representable

Methods

index :: forall (a :: (k1, k2)) (b :: (j1, j2)). (p :**: q) a b -> a ~> ((p :**: q) % b) Source Github #

tabulate :: forall (b :: (j1, j2)) (a :: (k1, k2)). Ob b => (a ~> ((p :**: q) % b)) -> (p :**: q) a b Source Github #

repMap :: forall (a :: (j1, j2)) (b :: (j1, j2)). (a ~> b) -> ((p :**: q) % a) ~> ((p :**: q) % b) Source Github #

repUniv :: forall (a :: (j1, j2)). Ob a => (p :**: q) ((p :**: q) % a) a Source Github #

(DaggerProfunctor p, DaggerProfunctor q) => DaggerProfunctor (p :**: q :: (j1, j2) -> (j1, j2) -> Type) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

dagger :: forall (a :: (j1, j2)) (b :: (j1, j2)). (p :**: q) a b -> (p :**: q) b a Source Github #

(Promonad p, Promonad q) => Promonad (p :**: q :: (j1, j2) -> (j1, j2) -> Type) Source Github #

The product promonad of promonads p and q.

Instance details

Defined in Proarrow.Category.Instance.Product

Methods

id :: forall (a :: (j1, j2)). Ob a => (p :**: q) a a Source Github #

(.) :: forall (b :: (j1, j2)) (c :: (j1, j2)) (a :: (j1, j2)). (p :**: q) b c -> (p :**: q) a b -> (p :**: q) a c Source Github #

type (p :**: q :: (k1, k2) -> (j1, j2) -> Type) % ('(a, b) :: (j1, j2)) Source Github # 
Instance details

Defined in Proarrow.Profunctor.Representable

type (p :**: q :: (k1, k2) -> (j1, j2) -> Type) % ('(a, b) :: (j1, j2)) = '(p % a, q % b)
type HasArrow (p :**: q :: (k1, k2) -> (j1, j2) -> Type) ('(a1, a2) :: (k1, k2)) ('(b1, b2) :: (j1, j2)) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

type HasArrow (p :**: q :: (k1, k2) -> (j1, j2) -> Type) ('(a1, a2) :: (k1, k2)) ('(b1, b2) :: (j1, j2)) = (HasArrow p a1 b1, HasArrow q a2 b2)

data family Fst :: (j, k) +-> j Source Github #

Instances

Instances details
(CategoryOf j, CategoryOf k) => FunctorForRep (Fst :: (j, k) +-> j) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

fmap :: forall (a :: (j, k)) (b :: (j, k)). (a ~> b) -> ((Fst :: (j, k) +-> j) @ a) ~> ((Fst :: (j, k) +-> j) @ b) Source Github #

type (Fst :: (j, k) +-> j) @ ('(a, b) :: (j, k)) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

type (Fst :: (j, k) +-> j) @ ('(a, b) :: (j, k)) = a

data family Snd :: (j, k) +-> k Source Github #

Instances

Instances details
(CategoryOf j, CategoryOf k) => FunctorForRep (Snd :: (j, k) +-> k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

fmap :: forall (a :: (j, k)) (b :: (j, k)). (a ~> b) -> ((Snd :: (j, k) +-> k) @ a) ~> ((Snd :: (j, k) +-> k) @ b) Source Github #

type (Snd :: (j, k) +-> k) @ ('(a, b) :: (j, k)) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

type (Snd :: (j, k) +-> k) @ ('(a, b) :: (j, k)) = b

data family Diag :: k +-> (k, k) Source Github #

Instances

Instances details
CategoryOf k => FunctorForRep (Diag :: k +-> (k, k)) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

Methods

fmap :: forall (a :: k) (b :: k). (a ~> b) -> ((Diag :: k +-> (k, k)) @ a) ~> ((Diag :: k +-> (k, k)) @ b) Source Github #

HasBinaryCoproducts k => Corepresentable (Rep (Diag :: k +-> (k, k)) :: (k, k) -> k -> Type) Source Github #

The left adjoint to the diagonal functor.

Instance details

Defined in Proarrow.Colimit.BinaryCoproduct

Methods

coindex :: forall (a :: (k, k)) (b :: k). Rep (Diag :: k +-> (k, k)) a b -> (Rep (Diag :: k +-> (k, k)) %% a) ~> b Source Github #

cotabulate :: forall (a :: (k, k)) (b :: k). Ob a => ((Rep (Diag :: k +-> (k, k)) %% a) ~> b) -> Rep (Diag :: k +-> (k, k)) a b Source Github #

corepMap :: forall (a :: (k, k)) (b :: (k, k)). (a ~> b) -> (Rep (Diag :: k +-> (k, k)) %% a) ~> (Rep (Diag :: k +-> (k, k)) %% b) Source Github #

corepUniv :: forall (a :: (k, k)). Ob a => Rep (Diag :: k +-> (k, k)) a (Rep (Diag :: k +-> (k, k)) %% a) Source Github #

HasBinaryProducts k => Representable (Corep (Diag :: k +-> (k, k)) :: k -> (k, k) -> Type) Source Github #

The right adjoint to the diagonal functor.

Instance details

Defined in Proarrow.Limit.BinaryProduct

Methods

index :: forall (a :: k) (b :: (k, k)). Corep (Diag :: k +-> (k, k)) a b -> a ~> (Corep (Diag :: k +-> (k, k)) % b) Source Github #

tabulate :: forall (b :: (k, k)) (a :: k). Ob b => (a ~> (Corep (Diag :: k +-> (k, k)) % b)) -> Corep (Diag :: k +-> (k, k)) a b Source Github #

repMap :: forall (a :: (k, k)) (b :: (k, k)). (a ~> b) -> (Corep (Diag :: k +-> (k, k)) % a) ~> (Corep (Diag :: k +-> (k, k)) % b) Source Github #

repUniv :: forall (a :: (k, k)). Ob a => Corep (Diag :: k +-> (k, k)) (Corep (Diag :: k +-> (k, k)) % a) a Source Github #

type (Diag :: k +-> (k, k)) @ (a :: k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Product

type (Diag :: k +-> (k, k)) @ (a :: k) = '(a, a)
type (Rep (Diag :: k +-> (k, k)) :: (k, k) -> k -> Type) %% ('(a, b) :: (k, k)) Source Github # 
Instance details

Defined in Proarrow.Colimit.BinaryCoproduct

type (Rep (Diag :: k +-> (k, k)) :: (k, k) -> k -> Type) %% ('(a, b) :: (k, k)) = a || b
type (Corep (Diag :: k +-> (k, k)) :: k -> (k, k) -> Type) % ('(a, b) :: (k, k)) Source Github # 
Instance details

Defined in Proarrow.Limit.BinaryProduct

type (Corep (Diag :: k +-> (k, k)) :: k -> (k, k) -> Type) % ('(a, b) :: (k, k)) = a && b

checkDiscrete :: forall j k (a :: (j, k)) (b :: (j, k)) r. (Discrete j, Discrete k) => Hom (j, k) a b -> (a ~ b => r) -> r Source Github #

checkCodiscreteProfunctor :: forall {j1} {k1} {j2} {k2} (p :: j1 +-> k1) (q :: j2 +-> k2) (a :: (k1, k2)) (b :: (j1, j2)). (CodiscreteProfunctor p, CodiscreteProfunctor q, Ob a, Ob b) => (p :**: q) a b Source Github #

Orphan instances

(CategoryOf k1, CategoryOf k2) => CategoryOf (k1, k2) Source Github #

The product of two categories.

Instance details

Associated Types

type (~>) 
Instance details

Defined in Proarrow.Category.Instance.Product

type (~>) = ((~>) :: CAT k1) :**: ((~>) :: CAT k2)