/ Profunctor / Type
Type
 1    λ(f : Type → Type → Type)
 2  → { dimap :
 3          ∀(a : Type)
 4        → ∀(b : Type)
 5        → ∀(c : Type)
 6        → ∀(d : Type)
 7        → (a → b)
 8        → (c → d)
 9        → f b c
10        → f a d
11    , lmap :
12        ∀(a : Type) → ∀(b : Type) → ∀(c : Type) → (a → b) → f b c → f a c
13    , rmap :
14        ∀(a : Type) → ∀(b : Type) → ∀(c : Type) → (b → c) → f a b → f a c
15    }