ad-0.28: Numeric/AD/Internal/Comonad.hs
{-# LANGUAGE TypeOperators, TemplateHaskell, ScopedTypeVariables #-}
-- {-# OPTIONS_HADDOCK hide #-}
-----------------------------------------------------------------------------
-- |
-- Module : Numeric.AD.Internal.Comonad
-- Copyright : (c) Edward Kmett 2010
-- License : BSD3
-- Maintainer : ekmett@gmail.com
-- Stability : experimental
-- Portability : GHC only
--
-----------------------------------------------------------------------------
-- TODO: separate a \"comonads\" package from \"category-extras\"
module Numeric.AD.Internal.Comonad
( Copointed(..)
, Comonad(..)
) where
class Functor f => Copointed f where
extract :: f a -> a
class Copointed f => Comonad f where
duplicate :: f a -> f (f a)
extend :: (f a -> b) -> f a -> f b
duplicate = extend id
extend f = fmap f . duplicate