úΜ e     portable provisionalEdward Kmett <ekmett@gmail.com> Safe-Inferred  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>NoneThe   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   !"#$%&'()*      !"#$%&'()*+       !"#$%&'()*+,-./0comonad-1.1.1.6Data.Functor.ExtendControl.ComonadExtend duplicateextend=>><<==<==>= Cokleisli runCokleisliComonadextractliftWwfixbaseGHC.Base>>=Monad$fExtendNonEmpty$fExtendIdentityT$fExtendIdentity $fExtendTree $fExtendSeq $fExtend(->) $fExtend(,)$fExtendEither $fExtendMaybe $fExtend[] Control.ArrowArrowfmapcokleisliTyCon$fComonadNonEmpty$fMonadCokleisli$fApplicativeCokleisli$fFunctorCokleisli$fArrowChoiceCokleisli$fArrowApplyCokleisli$fArrowCokleisli$fCategoryCokleisli$fTypeable2Cokleisli $fComonadTree$fComonadIdentityT$fComonadIdentity $fComonad(->) $fComonad(,)