[<<][compsci][>>][..]

Sun Jan 10 11:40:33 CET 2010

## Applicative Functor

To make things more intuitive I'm calling the parameterized data types
that are members of the type class Functor and Applicative
``collections''. (I find a fixed-size array most intuitive.)
Functor: A functor is a collection that supports an operation `fmap'
which maps A SINGLE transformation of elements to a transformation of
collections.
class Functor f where
fmap :: (a -> b) -> f a -> f b
Applicative: An applicative functor is a collection that supports the
operation `<*>' which maps A COLLECTION of transformations to a
transformation of collections.
class (Functor f) => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
In addition a function `pure' is required that wraps an element into a
collection. The operations need to satisfy some laws:
pure id <*> v = v -- Identity
pure (.) <*> u <*> v <*> w = u <*> (v <*> w) -- Composition
pure f <*> pure x = pure (f x) -- Homomorphism
u <*> pure y = pure ($ y) <*> u -- Interchange
In [3] it is mentioned that this can be used for side-effects -- hence
the name `pure'. I don't quite get that.
[1] http://en.wikibooks.org/wiki/Haskell/Applicative_Functors
[2] http://learnyouahaskell.com/functors-applicative-functors-and-monoids
[3] http://www.soi.city.ac.uk/~ross/papers/Applicative.html

[Reply][About]

[<<][compsci][>>][..]