on master help sign in
Turn default imports back on

The default imports are now: import Basics (..) import Maybe (Maybe(..)) import Result (Result(..)) import Signal (Signal) Outside of Basics, the idea is that these types are so commonly used that it makes sense to bring them into scope everywhere. Furthermore, since it’s just types and type constructors, there will be no dumb name collisions like Maybe.map vs List.map vs Result.map. You can bring in an unqualified version of map depending on what you want to do in particular.

commit92be75c649fe8b5010893c9be30b2ae5177b207a authorEvan Czaplicki <info@elm-lang.org> dateMon 10 Nov 2014, 17:36 (12 years ago) parentab90bc3
3 files changed+33−11
elm-compiler.cabal+1−1 src/Build/Source.hs+2−2 src/Metadata/Prelude.hs → src/Transform/AddDefaultImports.hs+30−8
elm-compiler.cabal+1−1
@@ -68,6 +68,7 @@ Library
6868 Generate.JavaScript.Variable,
6969 Generate.Markdown,
7070 Generate.Cases,
71+ Transform.AddDefaultImports,
7172 Transform.Canonicalize,
7273 Transform.Canonicalize.Environment,
7374 Transform.Canonicalize.Setup,
@@ -80,7 +81,6 @@ Library
8081 Transform.Interface,
8182 Transform.SortDefinitions,
8283 Transform.Substitute,
83− Metadata.Prelude,
8484 Parse.Binop,
8585 Parse.Declaration,
8686 Parse.Expression,
src/Build/Source.hs+2−2
@@ -5,7 +5,7 @@ import Text.PrettyPrint (Doc)
55
66import qualified AST.Module as Module
77import qualified Parse.Parse as Parse
8−import qualified Metadata.Prelude as Prelude
8+import qualified Transform.AddDefaultImports as DefaultImports
99import qualified Transform.Check as Check
1010import qualified Type.Inference as TI
1111import qualified Transform.Canonicalize as Canonical
@@ -17,7 +17,7 @@ build noPrelude interfaces source =
1717
1818 -- Parse the source code and validate that it is well formed.
1919 validModule <- do
20− modul <- Prelude.add noPrelude `fmap` Parse.program infixes source
20+ modul <- DefaultImports.add noPrelude `fmap` Parse.program infixes source
2121 case Check.mistakes (Module.body modul) of
2222 [] -> return modul
2323 ms -> Left ms
src/Metadata/Prelude.hs → src/Transform/AddDefaultImports.hsrenamed+30−8
@@ -1,5 +1,5 @@
11{-# LANGUAGE FlexibleContexts #-}
2−module Metadata.Prelude (add) where
2+module Transform.AddDefaultImports (add) where
33
44import qualified Data.Map as Map
55import qualified Data.Set as Set
@@ -8,20 +8,42 @@ import qualified AST.Module as Module
88import qualified AST.Variable as Var
99
1010
11−-- DEFINITION OF THE PRELUDE
12−
1311type ImportDict =
1412 Map.Map Module.Name ([String], Var.Listing Var.Value)
1513
1614
17−prelude :: ImportDict
18−prelude =
15+-- DESCRIPTION OF DEFAULT IMPORTS
16+
17+(==>) :: a -> b -> (a,b)
18+(==>) = (,)
19+
20+
21+defaultImports :: ImportDict
22+defaultImports =
1923 Map.fromList $ map (\name -> (name, ([], Var.openListing))) $
20− [ -- ["Basics"]
24+ [ ["Basics"] ==> ([], Var.openListing)
25+ , ["Maybe"] ==> ([], Var.Listing [maybe] False)
26+ , ["Result"] ==> ([], Var.Listing [result] False)
27+ , ["Signal"] ==> ([], Var.Listing [signal] False)
2128 ]
2229
2330
24−-- ADDING PRELUDE TO A MODULE
31+maybe : [Var.Value]
32+maybe =
33+ Var.ADT "Maybe" Var.openListing
34+
35+
36+result : Var.Value
37+result =
38+ Var.ADT "Result" Var.openListing
39+
40+
41+signal : Var.Value
42+signal =
43+ Var.ADT "Signal" (Var.Listing [] False)
44+
45+
46+-- ADDING DEFAULT IMPORTS TO A MODULE
2547
2648add :: Bool -> Module.Module exs body -> Module.Module exs body
2749add noPrelude (Module.Module moduleName path exports imports decls) =
@@ -29,7 +51,7 @@ add noPrelude (Module.Module moduleName path exports imports decls) =
2951 where
3052 ammendedImports =
3153 importDictToList $
32− foldr addImport (if noPrelude then Map.empty else prelude) imports
54+ foldr addImport (if noPrelude then Map.empty else defaultImports) imports
3355
3456
3557importDictToList :: ImportDict -> [(Module.Name, Module.ImportMethod)]