Add mapAccumLM helper function.
[matthijs/master-project/cλash.git] / 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)