Hackage Build Status

Profunctors for Haskell.

Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on

-Edward Kmett



  • Allow base-orphans-0.6.
  • Add Traversing instance for Forget
  • Add Traversing and Mapping instances for Procompose
  • Add Category instance for Star
  • Add mapCayley to Data.Profunctor.Cayley
  • Add pastro and unpastro to Data.Profunctor.Strong.
  • Add dimapWandering, lmapWandering, and rmapWandering to Data.Profunctor.Traversing
  • Add documentation stating the laws for various profunctors.
  • Introduce the Data.Profunctor.Yoneda module.


  • Renamed Cotambara to TambaraChoice and Pastro to PastroChoice.
  • Added a true Cotambara and Copastro construction for (co)freely generating costrength, along with CotambaraSum and CopastroSum variants.
  • Engaged in a fair bit of bikeshedding about the module structure for lesser used modules in this package.


  • Added Prep and Coprep along with witnesses to the adjunctions Prep -| Star : [Hask,Hask] -> Prof and Coprep -| Costar : [Hask,Hask]^op -> Prof.


  • Add proper support for GHC 7.0+.


  • instance Costrong (Cokleisli f).
  • instance Cochoice (Star f).
  • Changed the instance for Cochoice (Costar f).


  • MINIMAL pragma for Costrong and Cochoice.
  • More Costrong and Cochoice instances.

  • Documentation fix


  • UpStar and DownStar have become Star and Costar. Star is analogous to Kleisli, Costar is analogous to Cokleisli.
  • Split representability into sieves and representability.
  • Moved Data.Profunctor.Collage to semigroupoids 5, and removed the semigroupoids dependency.
  • Rather greatly widened the range of GHC versions we can support.


  • Using SafeHaskell, GHC 7.8+ Data.Profunctor.Unsafe now infers as Trustworthy and many more modules now infer as Safe.
  • We now build warning-free on GHC


  • Added Coercible constraint to (#.) and (.#) when building with GHC 7.8
  • Strong is now a superclass of Representable
  • Updated the URL of the “Arrows are Strong Monads” paper. The old URL is now a dead link.


  • Added some missing instances for UpStar and DownStar.


  • Removed the non law-abiding instance for Closed (Forget r)
  • Forget is Representable
  • MINIMAL pragmas

  • Avoided using ‘type’ in the export list, as that doesn’t work on 7.4.


  • Renamed -| to ProfunctorAdjunction because GHC 7.4 still exists in the wild.
  • Renamed -/-> to :-> for the same reason. Also the former was confusing as they conflated profunctor homomorphisms and profunctors themselves.


  • Flipped the order of ‘Procompose’
  • Added the notion of Monads and Comonads on the category of profunctors.
  • Added ‘Cayley’ which takes normal Haskell Monads and Comonads to a ‘ProfunctorMonad’ and ‘ProfunctorComonad’ respectively. Cayley is also known as the ‘static arrow’ construction
  • Added ‘Closed’ which is adjoint to ‘Strong’.
  • Added ‘Closure’ which freely adjoins ‘Closed’ to any ‘Profunctor’.
  • Added ‘Tambara’ which freely adjoins ‘Strong’ to any ‘Profunctor’.
  • Added ‘Cotambara’ which freely adjoins ‘Choice’ to any ‘Profunctor’.
  • Under the new ‘Procompose’ the old ‘Rift’ is now ‘Ran’, and the old ‘Lift’ was misnamed. It is now ‘Rift’


  • Added Data.Profunctor.Lift containing the left Kan lift of a profunctor.


  • Added assoc to Data.Profunctor.Composition so that we have all 3 associators.


  • Merged the contents of profunctor-extras into profunctors.


  • Added instance Choice (Upstar f) and introduced Forget.


  • Renamed Lenticular and Prismatic to Strong and Choice, and restructured them.


  • Removed upper bounds on my own intra-package dependencies


  • Added Documentation!
  • Added Lenticular and Prismatic Profunctors


  • instance Profunctor Tagged


  • Updated version number to match the rest of my libraries