import Util ( sortLe )
import Outputable
import Maybes ( expectJust )
+import MonadUtils ( allM )
-- Extensions
import Control.Monad ( filterM, liftM, liftM2 )
import Data.Maybe
import Data.Array
import Data.List ( (\\) )
-
-#if !defined(__GLASGOW_HASKELL__) || __GLASGOW_HASKELL__ > 604
import Data.Array.ST
-#else
-import Data.Array.ST hiding ( indices, bounds )
-#endif
\end{code}
%************************************************************************
\begin{code}
data Graph node = Graph {
- gr_int_graph :: IntGraph,
+ gr_int_graph :: IntGraph,
gr_vertex_to_node :: Vertex -> node,
gr_node_to_vertex :: node -> Maybe Vertex
}
vertexReady :: Set s -> IntGraph -> Vertex -> ST s Bool
vertexReady provided g v = liftM2 (&&) (liftM not $ provided `contains` v) (allM (provided `contains`) (g!v))
-
-allM :: Monad m => (a -> m Bool) -> [a] -> m Bool
-allM _ [] = return True
-allM f (b:bs) = (f b) >>= (\bv -> if bv then allM f bs else return False)
\end{code}