@@ -97,6 +97,7 @@ compile' :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter
9797 => Environment -> [Module] -> [String] -> m (String, String, Environment)
9898compile' env ms prefix = do
9999 noPrelude <- asks optionsNoPrelude
100+ unless noPrelude (checkPreludeIsDefined ms)
100101 additional <- asks optionsAdditional
101102 mainModuleIdent <- asks (fmap moduleNameFromString . optionsMain)
102103 (sorted, _) <- sortModules $ map importPrim $ if noPrelude then ms else map importPrelude ms
@@ -175,6 +176,7 @@ make :: forall m. (Functor m, Applicative m, Monad m, MonadMake m)
175176 => FilePath -> [(Either RebuildPolicy FilePath, Module)] -> [String] -> m Environment
176177make outputDir ms prefix = do
177178 noPrelude <- asks optionsNoPrelude
179+ unless noPrelude (checkPreludeIsDefined (map snd ms))
178180 let filePathMap = M.fromList (map (\(fp, Module _ mn _ _) -> (mn, fp)) ms)
179181
180182 (sorted, graph) <- sortModules $ map importPrim $ if noPrelude then map snd ms else map (importPrelude . snd) ms
@@ -248,6 +250,12 @@ make outputDir ms prefix = do
248250 [m'@(Module _ moduleName'' _ _)] | moduleName'' == moduleName' -> (:) (False, m') <$> rebuildIfNecessary graph toRebuild ms'
249251 _ -> throwError . errorMessage . InvalidExternsFile $ externsFile
250252
253+checkPreludeIsDefined :: (MonadWriter MultipleErrors m) => [Module] -> m ()
254+checkPreludeIsDefined ms = do
255+ let mns = map getModuleName ms
256+ unless (preludeModuleName `elem` mns) $
257+ tell (errorMessage PreludeNotPresent)
258+
251259reverseDependencies :: ModuleGraph -> M.Map ModuleName [ModuleName]
252260reverseDependencies g = combine [ (dep, mn) | (mn, deps) <- g, dep <- deps ]
253261 where
@@ -269,8 +277,11 @@ addDefaultImport toImport m@(Module coms mn decls exps) =
269277importPrim :: Module -> Module
270278importPrim = addDefaultImport (ModuleName [ProperName C.prim])
271279
280+preludeModuleName :: ModuleName
281+preludeModuleName = ModuleName [ProperName C.prelude]
282+
272283importPrelude :: Module -> Module
273−importPrelude = addDefaultImport (ModuleName [ProperName C.prelude])
284+importPrelude = addDefaultImport preludeModuleName
274285
275286version :: Version
276287version = Paths.version