|
Control.Comonad | Portability | portable | Stability | experimental | Maintainer | dan.doel@gmail.com |
|
|
|
|
|
Description |
This module declares the Comonad class, with instances for
Identity and ((,) a), and defines the CoKleisli arrow.
|
|
Synopsis |
|
|
|
|
The Comonad class
|
|
|
There are two ways to define a comonad:
I. Provide definitions for fmap, extract, and duplicate
satisfying these laws:
extract . duplicate == id
fmap extract . duplicate == id
duplicate . duplicate == fmap duplicate . duplicate
II. Provide definitions for extract and extend
satisfying these laws:
extend extract == id
extract . extend f == f
extend f . extend g == extend (f . extend g)
(fmap cannot be defaulted, but a comonad which defines
extend may simply set fmap equal to liftW.)
A comonad providing definitions for extend and duplicate,
must also satisfy these laws:
extend f == fmap f . duplicate
duplicate == extend id
fmap f == extend (f . duplicate)
(The first two are the defaults for extend and duplicate,
and the third is the definition of liftW.)
| | Methods | | | duplicate :: w a -> w (w a) | Source |
| | extend :: (w a -> b) -> w a -> w b | Source |
|
| | Instances | |
|
|
|
extend with the arguments swapped. Dual to >>= for monads.
|
|
|
Injects a value into the comonad.
|
|
|
fmap defined in terms of extend
|
|
The coKleisli arrow
|
|
newtype CoKleisli w a b | Source |
|
Constructors | | Instances | |
|
|
The product comonad
|
|
local :: (c -> c') -> ((c', a) -> a) -> (c, a) -> a | Source |
|
Calls a comonadic function in a modified context
|
|
Additional functions
|
|
|
Converts a list of comonadic functions into a single function
returning a list of values
|
|
|
|
|
|
|
|
Produced by Haddock version 2.3.0 |