This module defines the ComonadTrans type class of comonad transformers.


class ComonadTrans :: ((Type -> Type) -> Type -> Type) -> Constraintclass ComonadTrans f  where

The ComonadTrans type class represents comonad transformers.

A comonad transformer is a type constructor of kind (* -> *) -> * -> *, which takes a Comonad as its first argument, and returns another Comonad.

This allows us to extend a comonad to provide additional context. By iterating this process, we create comonad transformer stacks, which contain all of the contextual information required for a particular computation.

The laws state that lower is a Comonad morphism.


  • extract (lower a) = extract a
  • lower (extend w (f <<< lower)) = extend (lower w) f