Merge branch 'master' of git://github.com/christiaanb/clash into cλash
[matthijs/master-project/cλash.git] / cλash / CLasH / Utils.hs
index aecbfcf6b9cf2cb4346c2ae8449e419b5c464391..94da85494f2216f75b395b542ed6c07b5362ecbf 100644 (file)
@@ -46,3 +46,14 @@ concatM = Monad.liftM concat
 
 isJustM :: (Monad m) => m (Maybe a) -> m Bool
 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)