on master help sign in
introduce DocsGoal GADT to help generate docs in package projects
61dabf0Evan Czaplicki
builder/src/Build.hs+149−85
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -Wno-unused-do-bind #-}
1{-# OPTIONS_GHC -Wno-unused-do-bind #-}
2−{-# LANGUAGE BangPatterns, OverloadedStrings #-}
2+{-# LANGUAGE BangPatterns, GADTs, OverloadedStrings #-}
3module Build
3module Build
4 ( fromExposed
4 ( fromExposed
5 , fromMains
5 , fromMains
@@ -7,6 +7,7 @@ module Build
7 , Main(..)
7 , Main(..)
8 , Module(..)
8 , Module(..)
9 , CachedInterface(..)
9 , CachedInterface(..)
10+ , DocsGoal(..)
10 )
11 )
11 where
12 where
12
13
@@ -31,15 +32,18 @@ import qualified System.Directory as Dir
31import qualified System.FilePath as FP
32import qualified System.FilePath as FP
32import System.FilePath ((</>), (<.>))
33import System.FilePath ((</>), (<.>))
33
34
35+import qualified AST.Canonical as Can
34import qualified AST.Source as Src
36import qualified AST.Source as Src
35import qualified AST.Optimized as Opt
37import qualified AST.Optimized as Opt
36import qualified Compile
38import qualified Compile
37import qualified Elm.Details as Details
39import qualified Elm.Details as Details
40+import qualified Elm.Docs as Docs
38import qualified Elm.Interface as I
41import qualified Elm.Interface as I
39import qualified Elm.ModuleName as ModuleName
42import qualified Elm.ModuleName as ModuleName
40import qualified Elm.Outline as Outline
43import qualified Elm.Outline as Outline
41import qualified Elm.Package as Pkg
44import qualified Elm.Package as Pkg
42import qualified File
45import qualified File
46+import qualified Json.Encode as E
43import qualified Parse.Module as Parse
47import qualified Parse.Module as Parse
44import qualified Reporting
48import qualified Reporting
45import qualified Reporting.Annotation as A
49import qualified Reporting.Annotation as A
@@ -96,15 +100,16 @@ forkWithKey func dict =
96-- FROM EXPOSED
100-- FROM EXPOSED
97
101
98
102
99−fromExposed :: Reporting.Style -> FilePath -> Details.Details -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem ())
103+fromExposed :: Reporting.Style -> FilePath -> Details.Details -> DocsGoal docs -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem docs)
100−fromExposed style root details exposed@(NE.List e es) =
104+fromExposed style root details docsGoal exposed@(NE.List e es) =
101 Reporting.trackBuild style $ \key ->
105 Reporting.trackBuild style $ \key ->
102 do let env = makeEnv key root details
106 do let env = makeEnv key root details
103 dmvar <- Details.loadInterfaces root details
107 dmvar <- Details.loadInterfaces root details
104
108
105 -- crawl
109 -- crawl
106 mvar <- newEmptyMVar
110 mvar <- newEmptyMVar
111+ let docsNeed = toDocsNeed docsGoal
107− roots <- Map.fromKeysA (fork . crawlModule env mvar) (e:es)
112+ roots <- Map.fromKeysA (fork . crawlModule env mvar docsNeed) (e:es)
108 putMVar mvar roots
113 putMVar mvar roots
109 mapM_ readMVar roots
114 mapM_ readMVar roots
110 statuses <- traverse readMVar =<< readMVar mvar
115 statuses <- traverse readMVar =<< readMVar mvar
@@ -121,7 +126,7 @@ fromExposed style root details exposed@(NE.List e es) =
121 putMVar rmvar resultMVars
126 putMVar rmvar resultMVars
122 results <- traverse readMVar resultMVars
127 results <- traverse readMVar resultMVars
123 writeDetails root details results
128 writeDetails root details results
124− return (detectExposedProblems exposed results)
129+ finalizeExposed docsGoal exposed results
125
130
126
131
127
132
@@ -190,7 +195,7 @@ type StatusDict =
190
195
191data Status
196data Status
192 = SCached Details.Local
197 = SCached Details.Local
193− | SChanged Details.Local B.ByteString Src.Module
198+ | SChanged Details.Local B.ByteString Src.Module DocsNeed
194 | SBadImport Import.Problem
199 | SBadImport Import.Problem
195 | SBadSyntax FilePath File.Time B.ByteString Syntax.Error
200 | SBadSyntax FilePath File.Time B.ByteString Syntax.Error
196 | SForeign Pkg.Name
201 | SForeign Pkg.Name
@@ -207,11 +212,11 @@ crawlDeps env mvar deps blockedValue =
207 mapM_ readMVar statuses
212 mapM_ readMVar statuses
208 return blockedValue
213 return blockedValue
209 where
214 where
210− crawlNew name () = fork (crawlModule env mvar name)
215+ crawlNew name () = fork (crawlModule env mvar (DocsNeed False) name)
211
216
212
217
213−crawlModule :: Env -> MVar StatusDict -> ModuleName.Raw -> IO Status
218+crawlModule :: Env -> MVar StatusDict -> DocsNeed -> ModuleName.Raw -> IO Status
214−crawlModule env@(Env _ root pkg srcDirs locals foreigns) mvar name =
219+crawlModule env@(Env _ root pkg srcDirs locals foreigns) mvar docsNeed name =
215 do let fileName = ModuleName.toFilePath name <.> "elm"
220 do let fileName = ModuleName.toFilePath name <.> "elm"
216 let inRoot path = File.exists (root </> path)
221 let inRoot path = File.exists (root </> path)
217
222
@@ -226,15 +231,15 @@ crawlModule env@(Env _ root pkg srcDirs locals foreigns) mvar name =
226 Nothing ->
231 Nothing ->
227 case Map.lookup name locals of
232 case Map.lookup name locals of
228 Nothing ->
233 Nothing ->
229− crawlFile env mvar name path
234+ crawlFile env mvar docsNeed name path
230
235
231 Just local@(Details.Local oldPath oldTime deps _) ->
236 Just local@(Details.Local oldPath oldTime deps _) ->
232 if path /= oldPath
237 if path /= oldPath
233− then crawlFile env mvar name path
238+ then crawlFile env mvar docsNeed name path
234 else
239 else
235 do newTime <- File.getTime path
240 do newTime <- File.getTime path
236− if oldTime < newTime
241+ if oldTime < newTime || needsDocs docsNeed
237− then crawlFile env mvar name path
242+ then crawlFile env mvar docsNeed name path
238 else crawlDeps env mvar deps (SCached local)
243 else crawlDeps env mvar deps (SCached local)
239
244
240 p1:p2:ps ->
245 p1:p2:ps ->
@@ -258,8 +263,8 @@ crawlModule env@(Env _ root pkg srcDirs locals foreigns) mvar name =
258 return $ SBadImport Import.NotFound
263 return $ SBadImport Import.NotFound
259
264
260
265
261−crawlFile :: Env -> MVar StatusDict -> ModuleName.Raw -> FilePath -> IO Status
266+crawlFile :: Env -> MVar StatusDict -> DocsNeed -> ModuleName.Raw -> FilePath -> IO Status
262−crawlFile env@(Env _ root pkg _ _ _) mvar expectedName path =
267+crawlFile env@(Env _ root pkg _ _ _) mvar docsNeed expectedName path =
263 do time <- File.getTime path
268 do time <- File.getTime path
264 source <- File.readUtf8 (root </> path)
269 source <- File.readUtf8 (root </> path)
265
270
@@ -278,7 +283,7 @@ crawlFile env@(Env _ root pkg _ _ _) mvar expectedName path =
278 deps = map Src.getImportName imports
283 deps = map Src.getImportName imports
279 local = Details.Local path time deps (any isMain values)
284 local = Details.Local path time deps (any isMain values)
280 in
285 in
281− crawlDeps env mvar deps (SChanged local source modul)
286+ crawlDeps env mvar deps (SChanged local source modul docsNeed)
282 else
287 else
283 return $ SBadSyntax path time source (Syntax.ModuleNameMismatch expectedName name)
288 return $ SBadSyntax path time source (Syntax.ModuleNameMismatch expectedName name)
284
289
@@ -297,8 +302,8 @@ type ResultDict =
297
302
298
303
299data Result
304data Result
300− = RNew Details.Local I.Interface Opt.LocalGraph
305+ = RNew !Details.Local !I.Interface !Opt.LocalGraph !(Maybe Docs.Module)
301− | RSame Details.Local I.Interface Opt.LocalGraph
306+ | RSame !Details.Local !I.Interface !Opt.LocalGraph !(Maybe Docs.Module)
302 | RCached Bool (MVar CachedInterface)
307 | RCached Bool (MVar CachedInterface)
303 | RNotFound Import.Problem
308 | RNotFound Import.Problem
304 | RProblem Error.Module
309 | RProblem Error.Module
@@ -323,7 +328,7 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
323 DepsChange ifaces ->
328 DepsChange ifaces ->
324 do source <- File.readUtf8 path
329 do source <- File.readUtf8 path
325 case Parse.fromByteString pkg source of
330 case Parse.fromByteString pkg source of
326− Right modul -> compile env local source ifaces modul
331+ Right modul -> compile env (DocsNeed False) local source ifaces modul
327 Left err ->
332 Left err ->
328 return $ RProblem $
333 return $ RProblem $
329 Error.Module name path time source (Error.BadSyntax err)
334 Error.Module name path time source (Error.BadSyntax err)
@@ -345,12 +350,12 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
345 Left err ->
350 Left err ->
346 Error.BadSyntax err
351 Error.BadSyntax err
347
352
348− SChanged local@(Details.Local path time deps _) source modul@(Src.Module _ _ _ imports _ _ _ _ _) ->
353+ SChanged local@(Details.Local path time deps _) source modul@(Src.Module _ _ _ imports _ _ _ _ _) docsNeed ->
349 do results <- readMVar resultsMVar
354 do results <- readMVar resultsMVar
350 depsStatus <- checkDeps root results deps
355 depsStatus <- checkDeps root results deps
351 case depsStatus of
356 case depsStatus of
352 DepsChange ifaces ->
357 DepsChange ifaces ->
353− compile env local source ifaces modul
358+ compile env docsNeed local source ifaces modul
354
359
355 DepsSame same cached ->
360 DepsSame same cached ->
356 do maybeLoaded <- checkCachedInterfaces root cached
361 do maybeLoaded <- checkCachedInterfaces root cached
@@ -360,7 +365,7 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
360
365
361 Just loaded ->
366 Just loaded ->
362 do let ifaces = Map.union loaded (Map.fromList same)
367 do let ifaces = Map.union loaded (Map.fromList same)
363− compile env local source ifaces modul
368+ compile env docsNeed local source ifaces modul
364
369
365 DepsBlock ->
370 DepsBlock ->
366 return RBlocked
371 return RBlocked
@@ -411,14 +416,14 @@ checkDepsHelp root results deps new same cached importProblems isBlocked =
411 dep:otherDeps ->
416 dep:otherDeps ->
412 do result <- readMVar (results ! dep)
417 do result <- readMVar (results ! dep)
413 case result of
418 case result of
414− RNew _ iface _ -> checkDepsHelp root results otherDeps ((dep,iface) : new) same cached importProblems isBlocked
419+ RNew _ iface _ _ -> checkDepsHelp root results otherDeps ((dep,iface) : new) same cached importProblems isBlocked
415− RSame _ iface _ -> checkDepsHelp root results otherDeps new ((dep,iface) : same) cached importProblems isBlocked
420+ RSame _ iface _ _ -> checkDepsHelp root results otherDeps new ((dep,iface) : same) cached importProblems isBlocked
416− RCached _ mvar -> checkDepsHelp root results otherDeps new same ((dep,mvar) : cached) importProblems isBlocked
421+ RCached _ mvar -> checkDepsHelp root results otherDeps new same ((dep,mvar) : cached) importProblems isBlocked
417− RNotFound prob -> checkDepsHelp root results otherDeps new same cached ((dep,prob) : importProblems) True
422+ RNotFound prob -> checkDepsHelp root results otherDeps new same cached ((dep,prob) : importProblems) True
418− RProblem _ -> checkDepsHelp root results otherDeps new same cached importProblems True
423+ RProblem _ -> checkDepsHelp root results otherDeps new same cached importProblems True
419− RBlocked -> checkDepsHelp root results otherDeps new same cached importProblems True
424+ RBlocked -> checkDepsHelp root results otherDeps new same cached importProblems True
420− RForeign iface -> checkDepsHelp root results otherDeps new ((dep,iface) : same) cached importProblems isBlocked
425+ RForeign iface -> checkDepsHelp root results otherDeps new ((dep,iface) : same) cached importProblems isBlocked
421− RKernel -> checkDepsHelp root results otherDeps new same cached importProblems isBlocked
426+ RKernel -> checkDepsHelp root results otherDeps new same cached importProblems isBlocked
422
427
423 [] ->
428 [] ->
424 case importProblems of
429 case importProblems of
@@ -577,12 +582,12 @@ addToGraph name status graph =
577 let
582 let
578 dependencies =
583 dependencies =
579 case status of
584 case status of
580− SCached (Details.Local _ _ deps _) -> deps
585+ SCached (Details.Local _ _ deps _) -> deps
581− SChanged (Details.Local _ _ deps _) _ _ -> deps
586+ SChanged (Details.Local _ _ deps _) _ _ _ -> deps
582− SBadImport _ -> []
587+ SBadImport _ -> []
583− SBadSyntax _ _ _ _ -> []
588+ SBadSyntax _ _ _ _ -> []
584− SForeign _ -> []
589+ SForeign _ -> []
585− SKernel -> []
590+ SKernel -> []
586 in
591 in
587 (name, name, dependencies) : graph
592 (name, name, dependencies) : graph
588
593
@@ -625,38 +630,39 @@ checkOutside name paths =
625checkInside :: ModuleName.Raw -> FilePath -> Status -> Either Exit.BuildProjectProblem ()
630checkInside :: ModuleName.Raw -> FilePath -> Status -> Either Exit.BuildProjectProblem ()
626checkInside name p1 status =
631checkInside name p1 status =
627 case status of
632 case status of
628− SCached (Details.Local p2 _ _ _) -> Left (Exit.BP_MainNameDuplicate name p1 p2)
633+ SCached (Details.Local p2 _ _ _) -> Left (Exit.BP_MainNameDuplicate name p1 p2)
629− SChanged (Details.Local p2 _ _ _) _ _ -> Left (Exit.BP_MainNameDuplicate name p1 p2)
634+ SChanged (Details.Local p2 _ _ _) _ _ _ -> Left (Exit.BP_MainNameDuplicate name p1 p2)
630− SBadImport _ -> Right ()
635+ SBadImport _ -> Right ()
631− SBadSyntax _ _ _ _ -> Right ()
636+ SBadSyntax _ _ _ _ -> Right ()
632− SForeign _ -> Right ()
637+ SForeign _ -> Right ()
633− SKernel -> Right ()
638+ SKernel -> Right ()
634
639
635
640
636
641
637-- COMPILE MODULE
642-- COMPILE MODULE
638
643
639
644
640−compile :: Env -> Details.Local -> B.ByteString -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> IO Result
645+compile :: Env -> DocsNeed -> Details.Local -> B.ByteString -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> IO Result
641−compile (Env key root pkg _ _ _) local@(Details.Local path time _ _) source ifaces modul =
646+compile (Env key root pkg _ _ _) docsNeed local@(Details.Local path time _ _) source ifaces modul =
642 case Compile.compile pkg ifaces modul of
647 case Compile.compile pkg ifaces modul of
643 Right (Compile.Artifacts canonical annotations objects) ->
648 Right (Compile.Artifacts canonical annotations objects) ->
644 do let name = Src.getName modul
649 do let name = Src.getName modul
645 let iface = I.fromModule pkg canonical annotations
650 let iface = I.fromModule pkg canonical annotations
651+ let docs = makeDocs docsNeed canonical
646 File.writeBinary (Stuff.elmo root name) objects
652 File.writeBinary (Stuff.elmo root name) objects
647 maybeOldi <- File.readBinary (Stuff.elmi root name)
653 maybeOldi <- File.readBinary (Stuff.elmi root name)
648 case maybeOldi of
654 case maybeOldi of
649 Just oldi | oldi == iface ->
655 Just oldi | oldi == iface ->
650 do -- iface should be fully forced by equality check
656 do -- iface should be fully forced by equality check
651 Reporting.report key Reporting.BDone
657 Reporting.report key Reporting.BDone
652− return (RSame local iface objects)
658+ return (RSame local iface objects docs)
653
659
654 _ ->
660 _ ->
655 do -- iface may be lazy still
661 do -- iface may be lazy still
656 -- TODO try adding forkIO here
662 -- TODO try adding forkIO here
657 File.writeBinary (Stuff.elmi root name) iface
663 File.writeBinary (Stuff.elmi root name) iface
658 Reporting.report key Reporting.BDone
664 Reporting.report key Reporting.BDone
659− return (RNew local iface objects)
665+ return (RNew local iface objects docs)
660
666
661 Left err ->
667 Left err ->
662 do Reporting.report key Reporting.BDone
668 do Reporting.report key Reporting.BDone
@@ -677,56 +683,114 @@ writeDetails root (Details.Details time outline locals foreigns extras) results
677addNewLocal :: ModuleName.Raw -> Result -> Map.Map ModuleName.Raw Details.Local -> Map.Map ModuleName.Raw Details.Local
683addNewLocal :: ModuleName.Raw -> Result -> Map.Map ModuleName.Raw Details.Local -> Map.Map ModuleName.Raw Details.Local
678addNewLocal name result locals =
684addNewLocal name result locals =
679 case result of
685 case result of
680− RNew local _ _ -> Map.insert name local locals
686+ RNew local _ _ _ -> Map.insert name local locals
681− RSame local _ _ -> Map.insert name local locals
687+ RSame local _ _ _ -> Map.insert name local locals
682− RCached _ _ -> locals
688+ RCached _ _ -> locals
683− RNotFound _ -> locals
689+ RNotFound _ -> locals
684− RProblem _ -> locals
690+ RProblem _ -> locals
685− RBlocked -> locals
691+ RBlocked -> locals
686− RForeign _ -> locals
692+ RForeign _ -> locals
687− RKernel -> locals
693+ RKernel -> locals
688
694
689
695
690
696
691−-- DETECT EXPOSED PROBLEMS
697+-- FINALIZE EXPOSED
692
698
693
699
694−detectExposedProblems :: NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
700+finalizeExposed :: DocsGoal docs -> NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> IO (Either Exit.BuildProblem docs)
695−detectExposedProblems exposed results =
701+finalizeExposed docsGoal exposed results =
696 case foldr (addImportProblems results) [] (NE.toList exposed) of
702 case foldr (addImportProblems results) [] (NE.toList exposed) of
697 p:ps ->
703 p:ps ->
698− Left (Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps)))
704+ return $ Left $ Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps))
699
705
700 [] ->
706 [] ->
701 case Map.foldr addErrors [] results of
707 case Map.foldr addErrors [] results of
702− [] -> Right ()
708+ [] -> Right <$> finalizeDocs docsGoal results
703− e:es -> Left (Exit.BuildModuleProblems e es)
709+ e:es -> return $ Left $ Exit.BuildModuleProblems e es
704
710
705
711
706addErrors :: Result -> [Error.Module] -> [Error.Module]
712addErrors :: Result -> [Error.Module] -> [Error.Module]
707addErrors result errors =
713addErrors result errors =
708 case result of
714 case result of
709− RNew _ _ _ -> errors
715+ RNew _ _ _ _ -> errors
710− RSame _ _ _ -> errors
716+ RSame _ _ _ _ -> errors
711− RCached _ _ -> errors
717+ RCached _ _ -> errors
712− RNotFound _ -> errors
718+ RNotFound _ -> errors
713− RProblem e -> e:errors
719+ RProblem e -> e:errors
714− RBlocked -> errors
720+ RBlocked -> errors
715− RForeign _ -> errors
721+ RForeign _ -> errors
716− RKernel -> errors
722+ RKernel -> errors
717
723
718
724
719addImportProblems :: Map.Map ModuleName.Raw Result -> ModuleName.Raw -> [(ModuleName.Raw, Import.Problem)] -> [(ModuleName.Raw, Import.Problem)]
725addImportProblems :: Map.Map ModuleName.Raw Result -> ModuleName.Raw -> [(ModuleName.Raw, Import.Problem)] -> [(ModuleName.Raw, Import.Problem)]
720addImportProblems results name problems =
726addImportProblems results name problems =
721 case results ! name of
727 case results ! name of
722− RNew _ _ _ -> problems
728+ RNew _ _ _ _ -> problems
723− RSame _ _ _ -> problems
729+ RSame _ _ _ _ -> problems
724− RCached _ _ -> problems
730+ RCached _ _ -> problems
725− RNotFound p -> (name, p) : problems
731+ RNotFound p -> (name, p) : problems
726− RProblem _ -> problems
732+ RProblem _ -> problems
727− RBlocked -> problems
733+ RBlocked -> problems
728− RForeign _ -> problems
734+ RForeign _ -> problems
729− RKernel -> problems
735+ RKernel -> problems
736+
737+
738+
739+-- DOCS
740+
741+
742+data DocsGoal a where
743+ KeepDocs :: DocsGoal Docs.Documentation
744+ WriteDocs :: FilePath -> DocsGoal ()
745+ IgnoreDocs :: DocsGoal ()
746+
747+
748+newtype DocsNeed =
749+ DocsNeed { needsDocs :: Bool }
750+
751+
752+toDocsNeed :: DocsGoal a -> DocsNeed
753+toDocsNeed goal =
754+ case goal of
755+ IgnoreDocs -> DocsNeed False
756+ WriteDocs _ -> DocsNeed True
757+ KeepDocs -> DocsNeed True
758+
759+
760+makeDocs :: DocsNeed -> Can.Module -> Maybe Docs.Module
761+makeDocs (DocsNeed isNeeded) modul =
762+ if isNeeded then
763+ case Docs.fromModule modul of
764+ Right docs -> Just docs
765+ Left _ -> Nothing
766+ else
767+ Nothing
768+
769+
770+finalizeDocs :: DocsGoal docs -> Map.Map ModuleName.Raw Result -> IO docs
771+finalizeDocs goal results =
772+ case goal of
773+ KeepDocs ->
774+ return $ Map.mapMaybe toDocs results
775+
776+ WriteDocs path ->
777+ E.writeUgly path $ Docs.encode $ Map.mapMaybe toDocs results
778+
779+ IgnoreDocs ->
780+ return ()
781+
782+
783+toDocs :: Result -> Maybe Docs.Module
784+toDocs result =
785+ case result of
786+ RNew _ _ _ d -> d
787+ RSame _ _ _ d -> d
788+ RCached _ _ -> Nothing
789+ RNotFound _ -> Nothing
790+ RProblem _ -> Nothing
791+ RBlocked -> Nothing
792+ RForeign _ -> Nothing
793+ RKernel -> Nothing
730
794
731
795
732
796
@@ -870,7 +934,7 @@ crawlMain env@(Env _ _ pkg _ _ _) mvar given =
870 do statusMVar <- newEmptyMVar
934 do statusMVar <- newEmptyMVar
871 statusDict <- takeMVar mvar
935 statusDict <- takeMVar mvar
872 putMVar mvar (Map.insert name statusMVar statusDict)
936 putMVar mvar (Map.insert name statusMVar statusDict)
873− putMVar statusMVar =<< crawlModule env mvar name
937+ putMVar statusMVar =<< crawlModule env mvar (DocsNeed False) name
874 return (SInside name)
938 return (SInside name)
875
939
876 LOutside path ->
940 LOutside path ->
@@ -990,14 +1054,14 @@ gatherProblemsOrMains results (NE.List mainResult mainResults) =
990addInside :: ModuleName.Raw -> Result -> [Module] -> [Module]
1054addInside :: ModuleName.Raw -> Result -> [Module] -> [Module]
991addInside name result modules =
1055addInside name result modules =
992 case result of
1056 case result of
993− RNew _ iface objs -> Fresh name iface objs : modules
1057+ RNew _ iface objs _ -> Fresh name iface objs : modules
994− RSame _ iface objs -> Fresh name iface objs : modules
1058+ RSame _ iface objs _ -> Fresh name iface objs : modules
995− RCached main mvar -> Cached name main mvar : modules
1059+ RCached main mvar -> Cached name main mvar : modules
996− RNotFound _ -> error (badInside name)
1060+ RNotFound _ -> error (badInside name)
997− RProblem _ -> error (badInside name)
1061+ RProblem _ -> error (badInside name)
998− RBlocked -> error (badInside name)
1062+ RBlocked -> error (badInside name)
999− RForeign _ -> modules
1063+ RForeign _ -> modules
1000− RKernel -> modules
1064+ RKernel -> modules
1001
1065
1002
1066
1003badInside :: ModuleName.Raw -> [Char]
1067badInside :: ModuleName.Raw -> [Char]