Proposal: Add gtraverse to Data.Data

Data.Data provides an gmapM as an analogue to mapM but not one to traverse. The following definition from lens fills in this gap, but it probably belongs in Data.Data alongside its kin. gtraverse :: (Applicative f, Data a) => (forall d. Data d => d -> f d) -> a -> f a gtraverse f = gfoldl (\x y -> x <*> f y) pure Discussion period: 2 weeks -Edward Kmett

+1. I also blogged about it before:
http://ro-che.info/articles/2013-03-11-generalizing-gfoldl.html
http://ro-che.info/articles/2013-03-29-gtraverse-vs-gfoldl.html
* Edward Kmett
Data.Data provides an gmapM as an analogue to mapM but not one to traverse.
The following definition from lens fills in this gap, but it probably belongs in Data.Data alongside its kin.
gtraverse :: (Applicative f, Data a) => (forall d. Data d => d -> f d) -> a -> f a
gtraverse f = gfoldl (\x y -> x <*> f y) pure
Discussion period: 2 weeks
-Edward Kmett
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries

+1
Pedro
On Fri, Aug 16, 2013 at 1:21 AM, Edward Kmett
Data.Data provides an gmapM as an analogue to mapM but not one to traverse.
The following definition from lens fills in this gap, but it probably belongs in Data.Data alongside its kin.
gtraverse :: (Applicative f, Data a) => (forall d. Data d => d -> f d) -> a -> f a
gtraverse f = gfoldl (\x y -> x <*> f y) pure
Discussion period: 2 weeks
-Edward Kmett
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
participants (3)
-
Edward Kmett
-
José Pedro Magalhães
-
Roman Cheplyaka