Add profunctor strength interface
This commit is contained in:
parent
80fb506448
commit
551f238ab7
|
@ -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
|
||||
|
|
42
Data/Profunctor/Strong.idr
Normal file
42
Data/Profunctor/Strong.idr
Normal 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
|
Loading…
Reference in a new issue