proposal #2461: add Traversable generalizations of mapAccumL and mapAccumR

Ross Paterson ross at soi.city.ac.uk
Tue Jul 22 12:12:48 EDT 2008


The proposal is to add the following functions to Data.Traversable,
generalizing the list versions in Data.List:

    -- |The 'mapAccumL' function behaves like a combination of 'fmap'
    -- and 'foldl'; it applies a function to each element of a structure,
    -- passing an accumulating parameter from left to right, and returning
    -- a final value of this accumulator together with the new structure.
    mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c)

    -- |The 'mapAccumR' function behaves like a combination of 'fmap'
    -- and 'foldr'; it applies a function to each element of a structure,
    -- passing an accumulating parameter from right to left, and returning
    -- a final value of this accumulator together with the new structure.
    mapAccumR :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c)

These functions are handy for things like labelling trees, zipping, etc.

Deadline: 3 weeks


More information about the Libraries mailing list