Kan extensions, Kan lifts, various forms of the Yoneda lemma, and (co)density (co)monads


Version on this page:4.1.1@rev:1
LTS Haskell 20.24:5.2.5@rev:1
Stackage Nightly 2023-06-08:5.2.5@rev:1
Latest on Hackage:5.2.5@rev:1

See all snapshots kan-extensions appears in

BSD-3-Clause licensed by Edward A. Kmett
Maintained by Edward A. Kmett
This version can be pinned in stack with:kan-extensions-4.1.1@sha256:d9810fd1776711e2ed8d39698af5a971b2cb0005639d831e72cca0dc35a8a83e,2083

Module documentation for 4.1.1

  • Control
    • Control.Comonad
      • Control.Comonad.Density
    • Control.Monad
      • Control.Monad.Co
      • Control.Monad.Codensity
  • Data
    • Data.Functor
      • Data.Functor.Contravariant
        • Data.Functor.Contravariant.Coyoneda
        • Data.Functor.Contravariant.Day
        • Data.Functor.Contravariant.Yoneda
      • Data.Functor.Coyoneda
      • Data.Functor.Day
      • Data.Functor.Kan
        • Data.Functor.Kan.Lan
        • Data.Functor.Kan.Lift
        • Data.Functor.Kan.Ran
        • Data.Functor.Kan.Rift
      • Data.Functor.Yoneda


Build Status

This package provides tools for working with various Kan extensions and Kan lifts in Haskell.

Among the interesting bits included are:

  • Right and left Kan extensions (Ran and Lan)
  • Right and left Kan lifts (Rift and Lift)
  • Multiple forms of the Yoneda lemma (Yoneda)
  • The Codensity monad, which can be used to improve the asymptotic complexity of code over free monads (Codensity, Density)
  • A “comonad to monad-transformer transformer” that is a special case of a right Kan lift. (CoT, Co)

Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.

-Edward Kmett



  • Added Applicative instance for Day
  • Added Typeable instance for Codensity

  • Added tagged dependency


  • Moved co- and contra- variant Day convolution from contravariant to here. Day convolution is intimately connected to Rift.


  • Added liftCoT0M, liftCoT1M, diter and dctrlM for using CoT w m to model a state machine with states in w and effects in m.


  • Made fixes necessary to work around changes in ImpredicativeTypes for GHC 7.8.1rc2


  • Bug fix so we can compile on GHC 7.4


  • Removed keys dependency
  • Now compatible with adjunctions 4.0


  • Moved all the Yoneda variants around again.
  • Improved haddocks


  • Added Data.Functor.Contravariant.Yoneda to complete the set of Yoneda embeddings/reductions.


  • Added several missing isomorphisms


  • instance Monad m => MonadSpec (Yoneda m)


  • Fixed a bug in the signature for composedRepToCodensity.


  • More combinators for Rift/Lift.
  • Added combinators for working with representable functors rather than just adjoint functors.
  • Split Data.Functor.KanExtension into Data.Functor.Kan.Ran and Data.Functor.Kan.Lan
  • Split Data.Functor.KanLift into Data.Functor.Kan.Rift and Data.Functor.Kan.Lift
  • Moved from Data.Functor.Yoneda.Contravariant to Data.Functor.Yoneda.Reduction adopting terminology from Todd Trimble.
  • Added various missing isomorphisms.
  • Greatly improved the Haddocks for this package stating laws and derivations where we can (especially for ‘Rift’ and ‘Ran’).


  • Rift is now Applicative. Added rap.


  • Added right and left Kan lifts under Data.Functor.KanLift.
  • Decreased reliance on the Composition class where unnecessary in the API


  • Marked modules Trustworthy as required for SafeHaskell in the presence of these extensions.


  • Refactored build system
  • IRC build-bot notification
  • Removed upper bounds on dependencies on my other packages


  • Moved Control.Monad.Free.Church over to the free package instead and removed it from kan-extensions