module List where mapAccumR :: (a -> b -> (a, c)) -> a -> [b] -> (a, [c]) mapAccumR f s [] = (s, []) mapAccumR f s (x:xs) = (s2, z:zs) where (s2, z ) = f s1 x (s1, zs) = mapAccumR f s xs