úÎ R 0#The Confunctor class is useful for " sink-like" types, especially when % combined with GADTs. For instance:    data StringStack a where ? StringStack :: (a -> String) -> [String] -> StringStack a  " emptyStack :: StringStack String  emptyStack = StringStack id []  - push :: a -> StringStack a -> StringStack a 6 push a (StringStack f ss) = StringStack f (f s : ss)  ' instance Confunctor StringStack where : cofmap f (StringStack g ss) = StringStack (g . f) ss See the  split-chan package for another example. #A class for contravariant functors cofunctor-0.1.0Data.Cofunctor Cofunctorcofmap