2 | module Control.Category.Instances.One
4 | import Control.Category
5 | import Control.Category.Records
12 | data One : (a,b : ()) -> Type where
15 | public export %inline
17 | mkOne {a=(),b=()} = MkOne
24 | UnitOp2 : a -> b -> ()
35 | MkOne . MkOne = MkOne
38 | SemigroupoidOne : Semigroupoid One
39 | SemigroupoidOne = FromCategory
43 | CatFunctor cat One UnitOp where
47 | CatMonad One UnitOp where
52 | CatBifunctor catA catB One UnitOp2 where
56 | Monoidal One UnitOp2 () where
59 | unitl {a=()} = MkOne
60 | unitl' {a=()} = MkOne
61 | unitr {a=()} = MkOne
62 | unitr' {a=()} = MkOne
65 | Braided One UnitOp2 () where
70 | MonSymmetric One UnitOp2 () where
74 | Cartesian One UnitOp2 () where
75 | projl {a=()} = MkOne
76 | projr {b=()} = MkOne
77 | prod {a=()} _ _ = MkOne
78 | split {a=()} = MkOne
82 | Cocartesian One UnitOp2 () where
85 | coprod {b=()} _ _ = MkOne
86 | merge {a=()} = MkOne
87 | intro {a=()} = MkOne
90 | Closed One UnitOp2 UnitOp2 () where
91 | curry {a=()} _ = MkOne
92 | uncurry {c=()} _ = MkOne
95 | Traced One UnitOp2 () where
96 | tracel {b=(),c=()} _ = MkOne
97 | tracer {a=(),b=()} _ = MkOne
100 | Bimonoidal One UnitOp2 UnitOp2 () () where
115 | namespace SemigroupoidR
117 | One : SemigroupoidR
118 | One = MkSemigroupoidR One
120 | namespace CategoryR
123 | One = MkCategoryR One
125 | namespace MonoidalR
128 | One = MkMonoidalR One UnitOp2 ()
133 | One = MkBraidedR One UnitOp2 ()
135 | namespace SymmetricR
138 | One = MkSymmetricR One UnitOp2 ()
140 | namespace CartesianR
143 | One = MkCartesianR One UnitOp2 ()
145 | namespace CocartesianR
148 | One = MkCocartesianR One UnitOp2 ()
153 | One = MkClosedR One UnitOp2 UnitOp2 ()
158 | One = MkTracedR One UnitOp2 ()
160 | namespace BimonoidalR
163 | One = MkBimonoidalR One UnitOp2 UnitOp2 () ()
165 | namespace RigCategoryR
168 | One = MkRigCategoryR One UnitOp2 UnitOp2 () ()
170 | namespace SymRigCategoryR
172 | One : SymRigCategoryR
173 | One = MkSymRigCategoryR One UnitOp2 UnitOp2 () ()
175 | namespace DistributiveR
177 | One : DistributiveR
178 | One = MkDistributiveR One UnitOp2 UnitOp2 () ()
183 | OneTerminal : FunctorR cat One
184 | OneTerminal = MkFunctorR UnitOp
189 | OneM = MkMonadR UnitOp
191 | namespace BifunctorR
193 | OneBi : BifunctorR catA catB One
194 | OneBi = MkBifunctorR UnitOp2