Commit 430137c4 authored by niteria's avatar niteria

Add mapMG to allow making ModuleGraph abstract

Currently GHC exposes the internal details of `ModuleGraph`
which inhibits making `ModuleGraph` support faster lookups.

Haddock relies on the internal representation by using `map`
on `ModuleGraph`. See also
https://github.com/haskell/haddock/issues/635

Adding `mapMG` should allow us to make `ModuleGraph` abstract.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari, alexbiehl

Reviewed By: bgamari, alexbiehl

Subscribers: alexbiehl, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3645
parent ece39c34
......@@ -59,7 +59,8 @@ module GHC (
compileToCoreModule, compileToCoreSimplified,
-- * Inspecting the module structure of the program
ModuleGraph, ModSummary(..), ms_mod_name, ModLocation(..),
ModuleGraph, emptyMG, mapMG,
ModSummary(..), ms_mod_name, ModLocation(..),
getModSummary,
getModuleGraph,
isLoaded,
......@@ -630,7 +631,7 @@ setProgramDynFlags_ invalidate_needed dflags = do
--
invalidateModSummaryCache :: GhcMonad m => m ()
invalidateModSummaryCache =
modifySession $ \h -> h { hsc_mod_graph = map inval (hsc_mod_graph h) }
modifySession $ \h -> h { hsc_mod_graph = mapMG inval (hsc_mod_graph h) }
where
inval ms = ms { ms_hs_date = addUTCTime (-1) (ms_hs_date ms) }
......
......@@ -12,7 +12,7 @@ module HscTypes (
HscEnv(..), hscEPS,
FinderCache, FindResult(..), InstalledFindResult(..),
Target(..), TargetId(..), pprTarget, pprTargetId,
ModuleGraph, emptyMG,
ModuleGraph, emptyMG, mapMG,
HscStatus(..),
IServ(..),
......@@ -2611,6 +2611,9 @@ type ModuleGraph = [ModSummary]
emptyMG :: ModuleGraph
emptyMG = []
mapMG :: (ModSummary -> ModSummary) -> ModuleGraph -> ModuleGraph
mapMG = map
-- | A single node in a 'ModuleGraph'. The nodes of the module graph
-- are one of:
--
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment