-%************************************************************************
-%* *
-\subsection[reconstruct-deps]{Reconstructing dependencies}
-%* *
-%************************************************************************
-
-This @MonoBinds@- and @ClassDecls@-specific code is segregated here,
-as the two cases are similar.
-
-\begin{code}
-reconstructCycle :: SCC FlatMonoBindsInfo
- -> RenamedHsBinds
-
-reconstructCycle (AcyclicSCC (_, _, binds, sigs))
- = MonoBind binds sigs NonRecursive
-
-reconstructCycle (CyclicSCC cycle)
- = MonoBind this_gp_binds this_gp_sigs Recursive
- where
- this_gp_binds = foldr1 AndMonoBinds [binds | (_, _, binds, _) <- cycle]
- this_gp_sigs = foldr1 (++) [sigs | (_, _, _, sigs) <- cycle]
-\end{code}
-
-%************************************************************************
-%* *
-\subsubsection{ Manipulating FlatMonoBindInfo}
-%* *
-%************************************************************************
-
-During analysis a @MonoBinds@ is flattened to a @FlatMonoBindsInfo@.
-The @RenamedMonoBinds@ is always an empty bind, a pattern binding or
-a function binding, and has itself been dependency-analysed and
-renamed.
-
-\begin{code}
-type FlatMonoBindsInfo
- = (NameSet, -- Set of names defined in this vertex
- NameSet, -- Set of names used in this vertex
- RenamedMonoBinds,
- [RenamedSig]) -- Signatures, if any, for this vertex
-
-mkEdges :: [(FlatMonoBindsInfo, VertexTag)] -> [(FlatMonoBindsInfo, VertexTag, [VertexTag])]
-
-mkEdges flat_info
- = [ (info, tag, dest_vertices (nameSetToList names_used))
- | (info@(names_defined, names_used, mbind, sigs), tag) <- flat_info
- ]
- where
- -- An edge (v,v') indicates that v depends on v'
- dest_vertices src_mentions = [ target_vertex
- | ((names_defined, _, _, _), target_vertex) <- flat_info,
- mentioned_name <- src_mentions,
- mentioned_name `elemNameSet` names_defined
- ]