A Cofunctor is a structure from category theory dual to Functor.
A Functor is defined by the operation fmap:
This means that its dual must be defined by the following operation:
Since beginning his investigations, the author of this package has discovered
that this pattern is at least as commonly used as Functor. In fact, many
ubiquitous Haskell types (e.g. [], Maybe, ((->) a) turn out to have a
Cofunctor instance.