Functors representing data structures that can be transformed to structures of the same shape by performing an Applicative (or, therefore, Monad) action on each element from left to right.
A more detailed description of what same shape means, the various methods,
how traversals are constructed, and example advanced use-cases can be found
in the Overview section of Data.Traversable#overview.
For the class laws see the Laws section of Data.Traversable#laws.
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. For a version that ignores the results see traverse_.
Examples
Basic usage:
In the first two examples we show each evaluated action mapping to the output structure.
Example1 expression traverse Just [1,2,3,4]Just [1,2,3,4]
Example1 expression traverse id [Right 1, Right 2, Right 3, Right 4]Right [1,2,3,4]
In the next examples, we show that Nothing and Left values short circuit the created structure.
Example1 expression traverse (const Nothing) [1,2,3,4]Nothing
Example1 expression traverse (\x -> if odd x then Just x else Nothing) [1,2,3,4]Nothing
Example1 expression traverse id [Right 1, Right 2, Right 3, Right 4, Left 0]Left 0
sequenceA :: Applicative f => t (f a) -> f (t a)Evaluate each action in the structure from left to right, and collect the results. For a version that ignores the results see sequenceA_.
Examples
Basic usage:
For the first two examples we show sequenceA fully evaluating a a structure and collecting the results.
Example1 expression sequenceA [Just 1, Just 2, Just 3]Just [1,2,3]
Example1 expression sequenceA [Right 1, Right 2, Right 3]Right [1,2,3]
The next two example show Nothing and Just will short circuit the resulting structure if present in the input. For more context, check the Traversable instances for Either and Maybe.
Example1 expression sequenceA [Just 1, Just 2, Just 3, Nothing]Nothing
Example1 expression sequenceA [Right 1, Right 2, Right 3, Left 4]Left 4
mapM :: Monad m => (a -> m b) -> t a -> m (t b)Map each element of a structure to a monadic action, evaluate these actions from left to right, and collect the results. For a version that ignores the results see
Data.Foldable.mapM_.Examples
mapM is literally a traverse with a type signature restricted to Monad. Its implementation may be more efficient due to additional power of Monad.
sequence :: Monad m => t (m a) -> m (t a)Evaluate each monadic action in the structure from left to right, and collect the results. For a version that ignores the results see
Data.Foldable.sequence_.Examples
Basic usage:
The first two examples are instances where the input and and output of sequence are isomorphic.
Example1 expression sequence $ Right [1,2,3,4][Right 1,Right 2,Right 3,Right 4]
Example1 expression sequence $ [Right 1,Right 2,Right 3,Right 4]Right [1,2,3,4]
The following examples demonstrate short circuit behavior for sequence.
Example1 expression sequence $ Left [1,2,3,4]Left [1,2,3,4]
Example1 expression sequence $ [Left 0, Right 1,Right 2,Right 3,Right 4]Left 0
Instances43Traversable, …
Traversable ComplexDefined in base-4.20.2.0 · Data.ComplexTraversable FirstDefined in base-4.20.2.0 · Data.SemigroupTraversable LastDefined in base-4.20.2.0 · Data.SemigroupTraversable MaxDefined in base-4.20.2.0 · Data.SemigroupTraversable MinDefined in base-4.20.2.0 · Data.SemigroupTraversable NonEmptyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable IdentityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable FirstDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable LastDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable DownDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable DualDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable ProductDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable SumDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable ZipListDefined in ghc-internal-9.1003.0 · GHC.Internal.Functor.ZipListTraversable Par1Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable MaybeDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable SoloDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable []Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable U1Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UAddrDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UDoubleDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UFloatDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UIntDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable UWordDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable V1Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable (Arg a)Defined in base-4.20.2.0 · Data.SemigroupTraversable (Either a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable (Tuple2 a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableIx i => Traversable (Array i)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable (Const m)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable f => Traversable (Ap f)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable f => Traversable (Alt f)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable f => Traversable (Rec1 f)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable (K1 i c)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Traversable(Traversable f, Traversable g) => Traversable (Product f g)Defined in base-4.20.2.0 · Data.Functor.Product(Traversable f, Traversable g) => Traversable (Sum f g)Defined in base-4.20.2.0 · Data.Functor.Sum(Traversable f, Traversable g) => Traversable (f :*: g)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Traversable(Traversable f, Traversable g) => Traversable (f :+: g)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.TraversableTraversable f => Traversable (M1 i c f)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Traversable(Traversable f, Traversable g) => Traversable (Compose f g)Defined in base-4.20.2.0 · Data.Functor.Compose(Traversable f, Traversable g) => Traversable (f :.: g)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Traversable