#define ARR_ELT (COMMA)
-import Array
-import List
+import Util ( sortLt )
+
+-- Extensions
import ST
-import ArrBase
+
+-- std interfaces
import Maybe
-import Util ( sortLt )
+import Array
+import List
\end{code}
%************************************************************************
\begin{code}
-type Set s = MutableArray s Vertex Bool
+type Set s = STArray s Vertex Bool
mkEmpty :: Bounds -> ST s (Set s)
-mkEmpty bnds = newArray bnds False
+mkEmpty bnds = newSTArray bnds False
contains :: Set s -> Vertex -> ST s Bool
-contains m v = readArray m v
+contains m v = readSTArray m v
include :: Set s -> Vertex -> ST s ()
-include m v = writeArray m v True
+include m v = writeSTArray m v True
\end{code}
\begin{code}
\begin{code}
bcc :: Graph -> Forest [Vertex]
-bcc g = (concat . map bicomps . map (label g dnum)) forest
+bcc g = (concat . map bicomps . map (do_label g dnum)) forest
where forest = dff g
dnum = preArr (bounds g) forest
-label :: Graph -> Table Int -> Tree Vertex -> Tree (Vertex,Int,Int)
-label g dnum (Node v ts) = Node (v,dnum!v,lv) us
- where us = map (label g dnum) ts
+do_label :: Graph -> Table Int -> Tree Vertex -> Tree (Vertex,Int,Int)
+do_label g dnum (Node v ts) = Node (v,dnum!v,lv) us
+ where us = map (do_label g dnum) ts
lv = minimum ([dnum!v] ++ [dnum!w | w <- g!v]
++ [lu | Node (u,du,lu) xs <- us])