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