From ac292d092ec5fe3337638f7d328ea427425eb744 Mon Sep 17 00:00:00 2001 From: Kiana Sheibani Date: Mon, 6 Mar 2023 10:50:30 -0500 Subject: [PATCH] Define instances for GenTambara --- Data/Profunctor/Strong.idr | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Data/Profunctor/Strong.idr b/Data/Profunctor/Strong.idr index 352b705..62bf0ec 100644 --- a/Data/Profunctor/Strong.idr +++ b/Data/Profunctor/Strong.idr @@ -1,5 +1,6 @@ module Data.Profunctor.Strong +import Data.Tensor import Data.Profunctor.Functor import Data.Profunctor.Types @@ -33,10 +34,41 @@ uncurry' = rmap (uncurry id) . first -- Tambara public export -record GenTambara (ten, p : Type -> Type -> Type) where +record GenTambara (ten, p : Type -> Type -> Type) a b where constructor MkTambara getTambara : {0 c : Type} -> p (a `ten` c) (b `ten` c) +export +Bifunctor ten => Profunctor p => Profunctor (GenTambara ten p) where + dimap f g (MkTambara p) = MkTambara $ dimap (mapFst f) (mapFst g) p + +export +ProfunctorFunctor (GenTambara ten) where + promap f (MkTambara p) = MkTambara (f p) + +export +Tensor ten i => ProfunctorComonad (GenTambara ten) where + proextract (MkTambara p) = dimap unitr.bwd unitr.fwd p + produplicate (MkTambara p) = MkTambara $ MkTambara $ dimap assoc.bwd assoc.fwd p + +export +Associative ten => Symmetric ten => Profunctor p => GenStrong ten (GenTambara ten p) where + strongl (MkTambara p) = MkTambara $ dimap assoc.bwd assoc.fwd p + strongr = dimap swap swap . strongl {ten,p=GenTambara ten p} + +export +Bifunctor ten => Profunctor p => Functor (GenTambara ten p a) where + map = rmap + + +export +gentambara : GenStrong ten p => p :-> q -> p :-> GenTambara ten q +gentambara @{gs} f x = MkTambara $ f $ strongl @{gs} x + +export +ungentambara : Tensor ten i => Profunctor q => p :-> GenTambara ten q -> p :-> q +ungentambara f x = dimap unitr.bwd unitr.fwd $ getTambara $ f x + public export Tambara : (p : Type -> Type -> Type) -> Type Tambara = GenTambara Pair