33module Proarrow.Category.Monoidal where
44
55import Data.Kind (Constraint )
6- import Prelude (Eq , Show , ($) , (++) )
6+ import Prelude (Eq , Show , ($) )
77
88import Proarrow.Category.Instance.Free
99 ( Elem
@@ -14,13 +14,11 @@ import Proarrow.Category.Instance.Free
1414 , Ok
1515 , WithEq
1616 , WithShow
17- , emb
1817 )
1918import Proarrow.Category.Instance.Product ((:**:) (.. ))
2019import Proarrow.Category.Instance.Unit qualified as U
2120import Proarrow.Core (CAT , CategoryOf (.. ), Kind , Obj , Profunctor (.. ), Promonad (.. ), obj , src , tgt , type (+-> ))
2221import Proarrow.Functor (FunctorForRep (.. ))
23- import Proarrow.Tools.Laws (AssertEq (.. ), Laws (.. ), Var , iso )
2422
2523-- This is equal to a monoidal functor for representable profunctors
2624-- and to an oplax monoidal functor for corepresentable profunctors.
@@ -209,62 +207,6 @@ deriving instance (WithShow a) => Show (Struct SymMonoidal a b)
209207instance (Ok cs p , SymMonoidal `Elem ` cs , Monoidal `Elem ` cs ) => SymMonoidal (FREE cs p ) where
210208 swap = Str Swap Id
211209
212- data instance Var '[Monoidal ] a b where
213- F :: Var '[Monoidal ] " A" " B"
214- G :: Var '[Monoidal ] " B" " C"
215- H :: Var '[Monoidal ] " C" " D"
216- deriving instance Show (Var '[Monoidal ] a b )
217- instance Laws '[Monoidal ] where
218- type
219- EqTypes '[Monoidal ] =
220- '[ EMB " A"
221- , EMB " B"
222- , UnitF **! EMB " A"
223- , UnitF **! EMB " B"
224- , EMB " A" **! UnitF
225- , EMB " B" **! UnitF
226- , EMB " A" **! EMB " B"
227- , (EMB " A" **! UnitF ) **! EMB " B"
228- , (EMB " A" **! EMB " B" ) **! EMB " C"
229- , EMB " A" **! (EMB " B" **! EMB " C" )
230- , (EMB " B" **! EMB " C" ) **! EMB " D"
231- , EMB " B" **! (EMB " C" **! EMB " D" )
232- , EMB " A" **! (EMB " B" **! (EMB " C" **! EMB " D" ))
233- , ((EMB " A" **! EMB " B" ) **! EMB " C" ) **! EMB " D"
234- ]
235- laws =
236- let f = emb F ; g = emb G ; h = emb H
237- in iso @ ((EMB " A" **! EMB " B" ) **! EMB " C" ) @ (EMB " A" **! (EMB " B" **! EMB " C" )) associator associatorInv
238- ++ iso @ (UnitF **! EMB " A" ) @ (EMB " A" ) leftUnitor leftUnitorInv
239- ++ iso @ (EMB " A" **! UnitF ) @ (EMB " A" ) rightUnitor rightUnitorInv
240- ++ [ associator . ((f `par` g) `par` h) :=: (f `par` (g `par` h)) . associator
241- , associatorInv . (f `par` (g `par` h)) :=: ((f `par` g) `par` h) . associatorInv
242- , leftUnitor . (par0 `par` f) :=: f . leftUnitor
243- , leftUnitorInv . f :=: (par0 `par` f) . leftUnitorInv
244- , rightUnitor . (f `par` par0) :=: f . rightUnitor
245- , rightUnitorInv . f :=: (f `par` par0) . rightUnitorInv
246- , (id `par` leftUnitor) . associator @ _ @ (EMB " A" ) @ _ @ (EMB " B" ) :=: rightUnitor `par` id
247- , (id `par` associator @ _ @ (EMB " B" ) @ (EMB " C" ) @ (EMB " D" ))
248- . associator
249- . (associator @ _ @ (EMB " A" ) @ (EMB " B" ) @ (EMB " C" ) `par` id )
250- :=: associator . associator
251- ]
252-
253- data instance Var '[Monoidal , SymMonoidal ] a b
254- deriving instance Show (Var '[Monoidal , SymMonoidal ] a b )
255- instance Laws '[Monoidal , SymMonoidal ] where
256- type
257- EqTypes '[Monoidal , SymMonoidal ] =
258- '[ EMB " A" **! EMB " B"
259- , (EMB " A" **! EMB " B" ) **! EMB " C"
260- , EMB " B" **! (EMB " C" **! EMB " A" )
261- ]
262- laws =
263- [ swap @ _ @ (EMB " B" ) @ (EMB " A" ) . swap :=: id
264- , (id `par` swap) . associator . (swap `par` id )
265- :=: associator . swap . associator @ _ @ (EMB " A" ) @ (EMB " B" ) @ (EMB " C" )
266- ]
267-
268210data UnitFtor :: () +-> k
269211instance (Monoidal k ) => FunctorForRep (UnitFtor :: () +-> k ) where
270212 type UnitFtor @ '() = Unit
0 commit comments