Define instances for GenTambara
This commit is contained in:
parent
551f238ab7
commit
ac292d092e
|
@ -1,5 +1,6 @@
|
||||||
module Data.Profunctor.Strong
|
module Data.Profunctor.Strong
|
||||||
|
|
||||||
|
import Data.Tensor
|
||||||
import Data.Profunctor.Functor
|
import Data.Profunctor.Functor
|
||||||
import Data.Profunctor.Types
|
import Data.Profunctor.Types
|
||||||
|
|
||||||
|
@ -33,10 +34,41 @@ uncurry' = rmap (uncurry id) . first
|
||||||
-- Tambara
|
-- Tambara
|
||||||
|
|
||||||
public export
|
public export
|
||||||
record GenTambara (ten, p : Type -> Type -> Type) where
|
record GenTambara (ten, p : Type -> Type -> Type) a b where
|
||||||
constructor MkTambara
|
constructor MkTambara
|
||||||
getTambara : {0 c : Type} -> p (a `ten` c) (b `ten` c)
|
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
|
public export
|
||||||
Tambara : (p : Type -> Type -> Type) -> Type
|
Tambara : (p : Type -> Type -> Type) -> Type
|
||||||
Tambara = GenTambara Pair
|
Tambara = GenTambara Pair
|
||||||
|
|
Loading…
Reference in a new issue