Data.Traversable
 Portability portable Stability experimental Maintainer ross@soi.city.ac.uk
Description

Class of data structures that can be traversed from left to right.

See also Applicative Programming with Effects, by Conor McBride and Ross Paterson, online at http://www.soi.city.ac.uk/~ross/papers/Applicative.html.

Synopsis
class (Functor t, Foldable t) => Traversable t where
 traverse :: Applicative f => (a -> f b) -> t a -> f (t b) sequenceA :: Applicative f => t (f a) -> f (t a) mapM :: Monad m => (a -> m b) -> t a -> m (t b) sequence :: Monad m => t (m a) -> m (t a)
fmapDefault :: Traversable t => (a -> b) -> t a -> t b
foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
Documentation
class (Functor t, Foldable t) => Traversable t where

Functors representing data structures that can be traversed from left to right.

Minimal complete definition: traverse or sequenceA.

Instances are similar to Functor, e.g. given a data type

``` data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)
```

a suitable instance would be

``` instance Traversable Tree
traverse f Empty = pure Empty
traverse f (Leaf x) = Leaf <\$> f x
traverse f (Node l k r) = Node <\$> traverse f l <*> f k <*> traverse f r
```

This is suitable even for abstract types, as the laws for <*> imply a form of associativity.

Methods
 traverse :: Applicative f => (a -> f b) -> t a -> f (t b) Map each element of a structure to an action, evaluate these actions from left to right, and collect the results. sequenceA :: Applicative f => t (f a) -> f (t a) Evaluate each action in the structure from left to right, and collect the results. mapM :: Monad m => (a -> m b) -> t a -> m (t b) Map each element of a structure to an monadic action, evaluate these actions from left to right, and collect the results. sequence :: Monad m => t (m a) -> m (t a) Evaluate each monadic action in the structure from left to right, and collect the results. Instances
 Traversable Digit Traversable Elem Traversable FingerTree Traversable Maybe Traversable Node Traversable Seq Traversable Tree Traversable ViewL Traversable ViewR Traversable [] Ix i => Traversable (Array i) Traversable (Map k)
fmapDefault :: Traversable t => (a -> b) -> t a -> t b
This function may be used as a value for fmap in a Functor instance.
foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
This function may be used as a value for foldMap in a Foldable instance.