packages feed

proarrow-0.1.0.0: src/Proarrow/Category/Enriched/Dagger.hs

-- | Dagger categories: a 'DaggerProfunctor' has an identity-on-objects involution
-- @'dagger' :: p a b -> p b a@, and a category is 'Dagger' when its hom-profunctor is one.
module Proarrow.Category.Enriched.Dagger where

import Proarrow.Core (Hom, Profunctor, type (+->))

class (Dagger k, Profunctor p) => DaggerProfunctor (p :: k +-> k) where
  dagger :: p a b -> p b a

type Dagger k = DaggerProfunctor (Hom k)