@@ -97,7 +97,7 @@ forkWithKey func dict =
9797
9898
9999fromExposed :: 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) =
101101 Reporting.trackBuild style $ \key ->
102102 do let env = makeEnv key root details
103103 dmvar <- Details.loadInterfaces root details
@@ -121,7 +121,7 @@ fromExposed style root details (NE.List e es) =
121121 putMVar rmvar resultMVars
122122 results <- traverse readMVar resultMVars
123123 writeDetails root details results
124− return (detectProblems results) -- TODO error if "exposed-modules" are not found
124+ return (detectExposedProblems exposed results)
125125
126126
127127
@@ -688,14 +688,19 @@ addNewLocal name result locals =
688688
689689
690690
691−-- DETECT PROBLEMS
691+-- DETECT EXPOSED PROBLEMS
692692
693693
694−detectProblems :: Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
695−detectProblems results =
696− case Map.foldr addErrors [] results of
697− [] -> Right ()
698− e:es -> Left (Exit.BuildModuleProblems e es)
694+detectExposedProblems :: NE.List ModuleName.Raw -> Map.Map ModuleName.Raw Result -> Either Exit.BuildProblem ()
695+detectExposedProblems exposed results =
696+ case foldr addImportProblems [] exposed of
697+ p:ps ->
698+ Left (Exit.BuildProjectProblem (Exit.BP_MissingExposed (NE.List p ps)))
699+
700+ [] ->
701+ case Map.foldr addErrors [] results of
702+ [] -> Right ()
703+ e:es -> Left (Exit.BuildModuleProblems e es)
699704
700705
701706addErrors :: Result -> [Error.Module] -> [Error.Module]
@@ -711,6 +716,19 @@ addErrors result errors =
711716 RKernel -> errors
712717
713718
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
729+ RKernel -> problems
730+
731+
714732
715733--------------------------------------------------------------------------------
716734--------------------------------------------------------------------------------