Bifunctors.hs.txt (2019B)
1 {-# LANGUAGE UndecidableInstances #-} 2 3 module Todo.Bifunctors where 4 5 import Lude 6 7 -------------------------------------------------------------------------------- 8 9 bipreservesObj 10 :: forall {i} {j} {k} (p :: Cat i) (q :: Cat j) (r :: Cat k) 11 . forall (f :: i -> j -> k) 12 ->(BifunctorialOn p q r f) 13 => forall (a :: i) (b :: j) 14 ->Obj p a & Obj q b :- Obj r (f a b) 15 bipreservesObj f a b = Entail (MkEvidence \\ f a `preservesObj` b \\ f `preservesObj` a) 16 17 lpreservesObj 18 :: forall {i} {j} {k} (p :: Cat i) (q :: Cat j) (r :: Cat k) 19 . forall (f :: i -> j -> k) 20 ->(BifunctorialOn p q r f) 21 => forall (a :: i) 22 ->forall (b :: j). (Obj q b) => Obj p a :- Obj r (f a b) 23 lpreservesObj f a @b = Entail (MkEvidence \\ f a `preservesObj` b \\ f `preservesObj` a) 24 25 rpreservesObj 26 :: forall {i} {j} {k} (p :: Cat i) (q :: Cat j) (r :: Cat k) 27 . forall (f :: i -> j -> k) 28 ->(BifunctorialOn p q r f) 29 => forall (b :: j) 30 ->forall (a :: i). (Obj p a) => Obj q b :- Obj r (f a b) 31 rpreservesObj f b @a = Entail (MkEvidence \\ f a `preservesObj` b \\ f `preservesObj` a) 32 33 -------------------------------------------------------------------------------- 34 35 type Under :: forall {i} {j}. (i -> j) -> i -> j -> Type 36 newtype Under (f :: i -> j) (a :: i) (b :: j) = MkUnder {unUnder :: Cod f (f a) b} 37 38 type Over :: forall {i} {j}. (i -> j) -> j -> i -> Type 39 newtype Over (f :: i -> j) (a :: j) (b :: i) = MkOver {unOver :: Cod f a (f b)} 40 41 -------------------------------------------------------------------------------- 42 43 type ProfunctorialOn :: forall {i} {j} {k}. Cat i -> Cat j -> Cat k -> (i -> j -> k) -> Constraint 44 class (BifunctorialOn (Dual p) q r f) => ProfunctorialOn p q r f | f -> p q r 45 instance (BifunctorialOn (Dual p) q r f) => ProfunctorialOn p q r f 46 47 type EndoprofunctorialOn :: forall {i} {k}. Cat i -> Cat k -> (i -> i -> k) -> Constraint 48 class (ProfunctorialOn p p r f) => EndoprofunctorialOn p r f | f -> p r 49 instance (ProfunctorialOn p p r f) => EndoprofunctorialOn p r f