class (Functor t, Foldable t) => Traversable t where
{-# MINIMAL traverse | sequenceA #-}
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
traverse f = sequenceA . fmap f
sequenceA :: Applicative f => t (f a) -> f (t a)
sequenceA = traverse id
mapM :: Monad m => (a -> m b) -> t a -> m (t b)
mapM = traverse
sequence :: Monad m => t (m a) -> m (t a)
sequence = sequenceA
Traversable
structures t
are finitary containers of elements a
which can be operated on with an effectful "visitor" operation. The visitor function f :: a -> f b
performs a side-effect on each element of the structure and traverse
composes those side-effects using Applicative
. Another way of looking at it is that sequenceA
says Traversable
structures commute with Applicative
s.