A notation for comonads, analogous to the do-notation for monads.
Requires the 'TemplateHaskell' and 'QuasiQuotes' extensions.
Example 1:
' {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE QuasiQuotes
import Control.Comonad import Language.Haskell.Codo
foo :: (Comonad c, Num a) => c a -> a foo = [codo| x => extract x + 1 |] '
Example 2:
' import Data.Monoid instance Monoid Double where     mempty = 0.0     mappend = (+)
differentiate f = ((f 0.001) - f 0) / 0.001
minima :: (Double -> Double) -> Bool minima = [codo| f => f' <- differentiate f                      f'' <- differentiate f'                      (extract f' < 0.001) && (extract f'' > 0) |] '
Further explanation of the syntax can be found in the following (short) paper: <http://www.cl.cam.ac.uk/~dao29/drafts/codo-notation-orchard-ifl12.pdf> with a numer of examples.
Further examples can be found here: <https://github.com/dorchard/codo-notation>.