Add profunctor strength interface

This commit is contained in:
Kiana Sheibani 2023-03-05 17:06:27 -05:00
parent 80fb506448
commit 551f238ab7
Signed by: toki
GPG key ID: 6CB106C25E86A9F7
2 changed files with 43 additions and 2 deletions

View file

@ -23,7 +23,6 @@ interface ProfunctorFunctor t =>
public export
interface (ProfunctorFunctor f, ProfunctorFunctor u) =>
ProfunctorAdjunction (0 f : (Type -> Type -> Type) -> Type -> Type -> Type)
(0 u : (Type -> Type -> Type) -> Type -> Type -> Type) | f, u where
ProfunctorAdjunction (0 f, u : (Type -> Type -> Type) -> Type -> Type -> Type) | f, u where
prounit : Profunctor p => p :-> u (f p)
procounit : Profunctor p => f (u p) :-> p

View file

@ -0,0 +1,42 @@
module Data.Profunctor.Strong
import Data.Profunctor.Functor
import Data.Profunctor.Types
%default total
public export
interface Profunctor p => GenStrong (0 ten : Type -> Type -> Type) p where
strongl : p a b -> p (a `ten` c) (b `ten` c)
strongr : p a b -> p (c `ten` a) (c `ten` b)
public export
Strong : (p : Type -> Type -> Type) -> Type
Strong = GenStrong Pair
public export
first : Strong p => p a b -> p (a, c) (b, c)
first = strongl {ten=Pair}
public export
second : Strong p => p a b -> p (c, a) (c, b)
second = strongr {ten=Pair}
export
uncurry' : Strong p => p a (b -> c) -> p (a, b) c
uncurry' = rmap (uncurry id) . first
-- Tambara
public export
record GenTambara (ten, p : Type -> Type -> Type) where
constructor MkTambara
getTambara : {0 c : Type} -> p (a `ten` c) (b `ten` c)
public export
Tambara : (p : Type -> Type -> Type) -> Type
Tambara = GenTambara Pair