úÎ . /     portable provisionalEdward Kmett <ekmett@gmail.com>  duplicate = extend id 0 fmap (fmap f) . duplicate = duplicate . fmap f   extend f = fmap f . duplicate % with the arguments swapped. Dual to  for a .  in operator form %Right-to-left Cokleisli composition $Left-to-right Cokleisli composition portable provisionalEdward Kmett <ekmett@gmail.com>The   s of a given     $definition   extract . fmap f = f . extract "A suitable default definition for  for a  . # Promotes a function to a comonad. " fmap f = extend (f . extract) Comonadic fixed point              comonad-1.0Data.Functor.ExtendControl.ComonadExtend duplicateextend=>><<==<==>= Cokleisli runCokleisliComonadextractliftWwfixbaseGHC.Base>>=Monad Control.ArrowArrowfmapcokleisliTyCon