Add mapAccumLM helper function.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Wed, 19 Aug 2009 12:35:06 +0000 (14:35 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Wed, 19 Aug 2009 12:35:52 +0000 (14:35 +0200)
cλash/CLasH/Utils.hs

index 822bd55dae5c7bb286552f08178dce7600ab5009..94da85494f2216f75b395b542ed6c07b5362ecbf 100644 (file)
@@ -50,3 +50,10 @@ isJustM = Monad.liftM Maybe.isJust
 andM, orM :: (Monad m) => m [Bool] -> m Bool
 andM = Monad.liftM and
 orM = Monad.liftM or
+
+mapAccumLM :: (Monad m) => (acc -> x -> m (acc, y)) -> acc -> [x] -> m (acc, [y])
+mapAccumLM _ s []        =  return (s, [])
+mapAccumLM f s (x:xs)    =  do
+  (s',  y ) <- f s x
+  (s'', ys) <- mapAccumLM f s' xs
+  return (s'', y:ys)