Handle --no-prelude flag in the Metadata.Prelude module rather than distributed across many modules

Good in case the meaning of —no-prelude changes
This commit is contained in:
Evan Czaplicki 2014-01-04 09:35:26 +01:00
parent 9ccc707594
commit 9ff26223d8
4 changed files with 10 additions and 8 deletions

View file

@ -26,7 +26,7 @@ import qualified Transform.Canonicalize as Canonical
build :: Bool -> Interfaces -> String -> Either [Doc] MetadataModule
build noPrelude interfaces source =
do let add = if noPrelude then id else Prelude.add
do let add = Prelude.add noPrelude
infixes = Map.fromList . map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
. concatMap iFixities $ Map.elems interfaces

View file

@ -31,7 +31,7 @@ compileArgs flags =
build :: Flag.Flags -> FilePath -> IO ()
build flags rootFile =
do let noPrelude = Flag.no_prelude flags
builtIns <- if noPrelude then return Map.empty else Prelude.interfaces
builtIns <- Prelude.interfaces noPrelude
files <- if Flag.make flags
then getSortedDependencies (Flag.src_dir flags) builtIns rootFile

View file

@ -21,7 +21,7 @@ compile source =
{-# NOINLINE interfaces #-}
interfaces :: M.Interfaces
interfaces = unsafePerformIO $ Prelude.interfaces
interfaces = unsafePerformIO $ Prelude.interfaces False
-- |This function extracts the module name of a given source program.
moduleName :: String -> Maybe String

View file

@ -13,10 +13,10 @@ import qualified Data.ByteString.Lazy as BS
import qualified InterfaceSerialization as IS
add :: Module def -> Module def
add (Module name exs ims decls) = Module name exs (customIms ++ ims) decls
add :: Bool -> Module def -> Module def
add noPrelude (Module name exs ims decls) = Module name exs (customIms ++ ims) decls
where
customIms = concatMap addModule prelude
customIms = if noPrelude then [] else concatMap addModule prelude
addModule (n, method) = case lookup n ims of
Nothing -> [(n, method)]
@ -30,8 +30,10 @@ prelude = text ++ map (\n -> (n, Hiding [])) modules
modules = [ "Basics", "Signal", "List", "Maybe", "Time", "Prelude"
, "Graphics.Element", "Color", "Graphics.Collage" ]
interfaces :: IO Interfaces
interfaces = safeReadDocs =<< Path.getDataFileName "interfaces.data"
interfaces :: Bool -> IO Interfaces
interfaces noPrelude =
do ifaces <- safeReadDocs =<< Path.getDataFileName "interfaces.data"
return $ if noPrelude then Map.empty else ifaces
safeReadDocs :: FilePath -> IO Interfaces
safeReadDocs name =