module Control.Functor.Covariant.Composition.Comonad (Comonad (..)) where import Control.Functor.Covariant.Extractable (Extractable) import Control.Functor.Covariant.Composition.Extendable (Extendable) {- | > Let f :: (Pointable t, Bindable t) => t a -> b > Let g :: (Pointable t, Bindable t) => t a -> b > When using this constraint, you should ensure it satisfies the three laws: > * Left identity: extend extract ≡ identity > * Right identity: extract . extend f ≡ f > * Associativity: extend f . extend g ≡ extend (f . extend g) -} type Comonad t = (Extractable t, Extendable t)