functor-apply-0.9.3: Applicative sans pure, Monad sans return, Alternative sans empty

MaintainerEdward Kmett <>




A Comonad is the categorical dual of a Monad.



ComonadApply - strong lax symmetric semimonoidal comonads

class (Comonad w, Apply w) => ComonadApply w Source

A strong lax symmetric semi-monoidal comonad. As such, an instance of ComonadApply is required to satisfy:

 extract (a <.> b) = extract a $ extract b

This class is based on ComonadZip from "The Essence of Dataflow Programming" by Tarmo Uustalu and Varmo Vene, but adapted to fit the programming style of Control.Applicative. Applicative can be seen as a similar law over and above Apply that:

 pure (a $ b) = pure a <.> pure b


ComonadApply Identity 
(Monoid m, Semigroup m) => ComonadApply ((->) m) 
(Monoid m, Semigroup m) => ComonadApply ((,) m)

Both required because Semigroup is not a superclass of Monoid

ComonadApply w => ComonadApply (IdentityT w) 
ComonadApply w => ComonadApply (MaybeApply w) 

liftW2 :: ComonadApply w => (a -> b -> c) -> w a -> w b -> w cSource

Lift a binary function into a comonad with zipping

liftW3 :: ComonadApply w => (a -> b -> c -> d) -> w a -> w b -> w c -> w dSource

Lift a ternary function into a comonad with zipping