úÎÍ     portable provisionalEdward Kmett <ekmett@gmail.com>The   s of a given   $definition   extract . fmap f = f . extract   duplicate = extend id 0 fmap (fmap f) . duplicate = duplicate . fmap f   extend f = fmap f . duplicate "A suitable default definition for  for a . # Promotes a function to a comonad. " fmap f = extend (f . extract) % with the arguments swapped. Dual to  for a .  in operator form %Right-to-left Cokleisli composition $Left-to-right Cokleisli composition Comonadic fixed point       portable provisionalEdward Kmett <ekmett@gmail.com>  This is the categorical dual of  Traversable Minimal definition: mapW or    mapW = fmap f . duplicate  distribute = mapW id HTo be distributable a container will need to have a way to consistently I zip a potentially infinite number of copies of itself. This effectively F means that the holes in all values of that type, must have the same E cardinality, fixed sized vectors, infinite streams, functions, etc. 4 and no extra information to try to merge together.  The dual of Data.Traversable.mapM  The dual of Data.Traversable.sequence Every   is a &. This is a valid default definition.          comonad-0.6.2Control.ComonadData.Distributive Cokleisli runCokleisliComonadextract duplicateextendliftW=>><<==<==>=wfix Distributive cotraverse distribute fmapDefaultbase Control.ArrowArrowGHC.Basefmap>>=MonadcokleisliTyConFunctor