Think of "traverse" as a "mapA", as it's just like Data.Traversable.mapM, but with the Applicative class constraint instead of the Monad one.
I've always wondered why it isn't called this way, sequenceM equivalent for Applicatives is sequenceA for instance.
On 28 March 2012 22:05, Matthew Steele <mdsteele@alum.mit.edu> wrote:Traverse doesn't fit the type of fmap, it demands an extra type constructor:
> Doesn't for already exist, in Data.Traversable? Except that for =
> flip traverse.
traverse :: (Traversable t,Applicative f) => (a -> f b) -> t a -> f (t b)
fmap :: Functor f => (a -> b) -> f a -> f b
Note the (a -> f b) instead of (a -> b).
E.g.
fmap :: (a -> b) -> [a] -> [b]
can't be expressed with traverse, you can only get this far:
traverse :: (a -> [b]) -> [a] -> [[b]]
Unless I'm missing something.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe