portable provisionalEdward Kmett <ekmett@gmail.com> This is the categorical dual of  Traversable. However, there appears I to be little benefit to allow the distribution via an arbitrary comonad  so we restrict ourselves to . Minimal complete definition:  or  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.sequence  distribute = collect id  ! collect = distribute . fmap f  9 distributeM = fmap unwrapMonad . distribute . WrapMonad  " collectM = distributeM . liftM f Every  is a &. This is a valid default definition.    distributive-0.1.1Data.Distributive Distributive distributecollect distributeMcollectM cotraversecomapM fmapDefaultbaseGHC.BaseFunctor