@@ -97,7 +97,7 @@ forkWithKey func dict =
99fromExposed :: Reporting.Style -> FilePath -> Details.Details -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem ())
99fromExposed :: Reporting.Style -> FilePath -> Details.Details -> NE.List ModuleName.Raw -> IO (Either Exit.BuildProblem ())
100−fromExposed style root details (NE.List e es) =
100+fromExposed style root details exposed@(NE.List e es) =
101 Reporting.trackBuild style $ \key ->
101 Reporting.trackBuild style $ \key ->
102 do let env = makeEnv key root details
102 do let env = makeEnv key root details
103 dmvar <- Details.loadInterfaces root details
103 dmvar <- Details.loadInterfaces root details
@@ -121,7 +121,7 @@ fromExposed style root details (NE.List e es) =
121 putMVar rmvar resultMVars
121 putMVar rmvar resultMVars
122 results <- traverse readMVar resultMVars
122 results <- traverse readMVar resultMVars
123 writeDetails root details results
123 writeDetails root details results
124− return (detectProblems results) -- TODO error if "exposed-modules" are not found
124+ return (detectExposedProblems exposed results)
@@ -688,14 +688,19 @@ addNewLocal name result locals =
691−-- DETECT PROBLEMS
691+-- DETECT EXPOSED PROBLEMS
694−detectProblems :: Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
694+detectExposedProblems :: NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
695−detectProblems results =
695+detectExposedProblems exposed results =
696+ case foldr addImportProblems [] exposed of
698+ Left (Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps)))
696− case Map.foldr addErrors [] results of
701+ case Map.foldr addErrors [] results of
697− [] -> Right ()
702+ [] -> Right ()
698− e:es -> Left (Exit.BuildModuleProblems e es)
703+ e:es -> Left (Exit.BuildModuleProblems e es)
701addErrors :: Result -> [Error.Module] -> [Error.Module]
706addErrors :: Result -> [Error.Module] -> [Error.Module]
@@ -711,6 +716,19 @@ addErrors result errors =
711 RKernel -> errors
716 RKernel -> errors
719+addImportProblems :: Map.Map ModuleName.Raw Result -> ModuleName.Raw -> [(ModuleName.Raw, Import.Problem)] -> [(ModuleName.Raw, Import.Problem)]
720+addImportProblems results name problems =
721+ case results ! name of
722+ RNew _ _ _ -> problems
723+ RSame _ _ _ -> problems
724+ RCached _ _ -> problems
725+ RNotFound p -> (name, p) : problems
726+ RProblem _ -> problems
727+ RBlocked -> problems
728+ RForeign _ -> problems
715--------------------------------------------------------------------------------
733--------------------------------------------------------------------------------
716--------------------------------------------------------------------------------
734--------------------------------------------------------------------------------