| Safe Haskell | Safe |
|---|
Eta.Classes.Traversable
Description
The Traversable type class defines that a structure
can be traversed from left to right, applying some
flatmappable function to it.
>> traverse readFile ["foo.txt", "bar.txt", "quux.txt"] ["foo contents" , "bar contents", "quux contents"]
It basically applies the actions inside of the type that the passed returns, and collects them, unless it fails.
safeDivide a b =
if b == 0
then Nothing
else Just (a / b)
>>>traverse (safeDivide 2) [1, 2]Just [2,1]
>>>traverse (safeDivide 2) [0, 2]Nothing
- class (Functor t, Foldable t) => Traversable t where
- for :: (Traversable t, Applicative m) => t a -> (a -> m b) -> m (t b)
- sequence :: (Traversable t, Applicative m) => t (m a) -> m (t a)
Documentation
class (Functor t, Foldable t) => Traversable t where #
Methods
traverse :: Applicative f => (a -> f b) -> t a -> f (t b) #
sequenceA :: Applicative f => t (f a) -> f (t a) #
Instances
| Traversable [] | |
| Traversable Maybe | |
| Traversable V1 | |
| Traversable U1 | |
| Traversable Par1 | |
| Traversable Sum | |
| Traversable Product | |
| Traversable Last | |
| Traversable First | |
| Traversable Dual | |
| Traversable ZipList | |
| Traversable (Either a) | |
| Traversable f => Traversable (Rec1 f) | |
| Traversable (URec Char) | |
| Traversable (URec Double) | |
| Traversable (URec Float) | |
| Traversable (URec Int) | |
| Traversable (URec Word) | |
| Traversable (URec (Ptr ())) | |
| Traversable ((,) a) | |
| Ix i => Traversable (Array i) | |
| Traversable (Proxy *) | |
| Traversable (K1 i c) | |
| (Traversable f, Traversable g) => Traversable ((:+:) f g) | |
| (Traversable f, Traversable g) => Traversable ((:*:) f g) | |
| (Traversable f, Traversable g) => Traversable ((:.:) f g) | |
| Traversable (Const * m) | |
| Traversable f => Traversable (M1 i c f) | |
for :: (Traversable t, Applicative m) => t a -> (a -> m b) -> m (t b) #
traverse with the arguments flipped, allows to work in an imperative manner,
like with foreach:
>>>:{for [1..3] $ \i -> do let x = i + 1 Just x :} Just [2,3,4]
sequence :: (Traversable t, Applicative m) => t (m a) -> m (t a) #
sequence moves the context of each of the elements of
a Traversable structure to the structure itself
>>>sequence [Just 1, Just 2]Just [1,2]
>>>sequence [Just 1, Nothing]Nothing