2 | module Control.Category.Instances.Op
4 | import Control.Category
5 | import Control.Category.Records
11 | record Op (cat : a -> b -> Type)
12 | (x : b) (y : a) where
22 | Semigroupoid cat => Semigroupoid (Op cat) where
23 | MkOp f . MkOp g = MkOp (g . f)
26 | Category cat => Category (Op cat) where
28 | MkOp f . MkOp g = MkOp (g . f)
31 | CatFunctor cat cat' f => CatFunctor (Op cat) (Op cat') f where
32 | map = MkOp . map . runOp
35 | CatBifunctor catA catB cat' f => CatBifunctor (Op catA) (Op catB) (Op cat') f where
36 | bimap (MkOp f) (MkOp g) = MkOp $
bimap f g
39 | {ten,i : _} -> Monoidal cat ten i => Monoidal (Op cat) ten i where
48 | {ten,i : _} -> Braided cat ten i => Braided (Op cat) ten i where
53 | {ten,i : _} -> Cocartesian cat ten i => Cartesian (Op cat) ten i where
56 | prod (MkOp f) (MkOp g) = MkOp $
coprod f g
58 | elim = MkOp $
intro {ten}
61 | {ten,i : _} -> Cartesian cat ten i => Cocartesian (Op cat) ten i where
64 | coprod (MkOp f) (MkOp g) = MkOp $
prod f g
66 | intro = MkOp $
elim {ten}
69 | {ten,i : _} -> Traced cat ten i => Traced (Op cat) ten i where
70 | tracel = MkOp . tracel . runOp
71 | tracer = MkOp . tracer . runOp
78 | namespace SemigroupoidR
80 | Op : (cat : SemigroupoidR) -> SemigroupoidR
81 | Op (MkSemigroupoidR cat) = MkSemigroupoidR (Op cat)
85 | Op : (cat : CategoryR) -> CategoryR
86 | Op (MkCategoryR cat) = MkCategoryR (Op cat)
90 | Op : (cat : MonoidalR) -> MonoidalR
91 | Op (MkMonoidalR cat ten i) = MkMonoidalR (Op cat) ten i
95 | Op : (cat : BraidedR) -> BraidedR
96 | Op (MkBraidedR cat ten i) = MkBraidedR (Op cat) ten i
98 | namespace CartesianR
100 | Op : (cat : CocartesianR) -> CartesianR
101 | Op (MkCocartesianR cat ten i) = MkCartesianR (Op cat) ten i
103 | namespace CocartesianR
105 | Op : (cat : CartesianR) -> CocartesianR
106 | Op (MkCartesianR cat ten i) = MkCocartesianR (Op cat) ten i
110 | Op : (cat : TracedR) -> TracedR
111 | Op (MkTracedR cat ten i) = MkTracedR (Op cat) ten i
116 | Op : (f : FunctorR cat cat') -> FunctorR (Op cat) (Op cat')
117 | Op {cat=MkCategoryR{},cat'=MkCategoryR{}} (MkFunctorR f) = MkFunctorR f