Hi Ben, > mapM2 :: Monad m => (a -> m b) -> [a] -> m [b] > {-# INLINE mapM2 #-} > mapM2 fn lst = mapM2accum fn lst [] > where mapM2accum _ [] accum = return accum > mapM2accum fn (x:xs) accum = do > r <- fn x > mapM2accum fn xs (r:accum)
Not that it should matter for performance any, but you really ought to reverse the result list too, or compute the accumulator in the right order. :-) mapM2 :: Monad m => (a -> m b) -> [a] -> m [b] {-# INLINE mapM2 #-} mapM2 fn lst = mapM2accum fn lst id where mapM2accum _ [] accum = return $ accum [] mapM2accum fn (x:xs) accum = do r <- fn x mapM2accum fn xs (accum . (r:)) Cheers, /Niklas _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe