@@ -1,51 +1,78 @@
11{-# OPTIONS_GHC -Wall #-}
22{-# LANGUAGE OverloadedStrings #-}
33module Elm.Compiler.Imports
4− ( Import(..)
5− , Exposing(..)
6− , defaults
4+ ( addDefaults
75 )
86 where
97
108
9+import qualified AST.Source as Src
1110import qualified Elm.Name as N
11+import qualified Elm.Package as Pkg
12+import qualified Reporting.Annotation as A
13+import qualified Reporting.Region as R
1214
1315
1416
15−-- IMPORTS
17+-- ADD DEFAULTS
1618
1719
18−data Import =
19− Import
20− { _name :: N.Name
21− , _alias :: Maybe N.Name
22− , _exposing :: Exposing
23− }
24−
25−
26−data Exposing
27− = Open
28− | Closed
29− | TypeOpen N.Name
30− | TypeClosed N.Name
31− | Operator N.Name
20+addDefaults :: Pkg.Name -> [Src.Import] -> [Src.Import]
21+addDefaults pkgName imports =
22+ if pkgName == Pkg.core
23+ then imports
24+ else defaults ++ imports
3225
3326
3427
3528-- DEFAULTS
3629
3730
38−defaults :: [Import]
31+defaults :: [Src.Import]
3932defaults =
40− [ Import "Basics" Nothing Open
41− , Import "Debug" Nothing Closed
42− , Import "List" Nothing (Operator "::")
43− , Import "Maybe" Nothing (TypeOpen "Maybe")
44− , Import "Result" Nothing (TypeOpen "Result")
45− , Import "String" Nothing (TypeClosed "String")
46− , Import "Char" Nothing (TypeClosed "Char")
47− , Import "Tuple" Nothing Closed
48− , Import "Platform" Nothing (TypeClosed "Program")
49− , Import "Platform.Cmd" (Just "Cmd") (TypeClosed "Cmd")
50− , Import "Platform.Sub" (Just "Sub") (TypeClosed "Sub")
51− ]
33+ [ import_ "Basics" Nothing Src.Open
34+ , import_ "Debug" Nothing closed
35+ , import_ "List" Nothing (operator "::")
36+ , import_ "Maybe" Nothing (typeOpen "Maybe")
37+ , import_ "Result" Nothing (typeOpen "Result")
38+ , import_ "String" Nothing (typeClosed "String")
39+ , import_ "Char" Nothing (typeClosed "Char")
40+ , import_ "Tuple" Nothing closed
41+ , import_ "Platform" Nothing (typeClosed "Program")
42+ , import_ "Platform.Cmd" (Just "Cmd") (typeClosed "Cmd")
43+ , import_ "Platform.Sub" (Just "Sub") (typeClosed "Sub")
44+ ]
45+
46+
47+import_ :: N.Name -> Maybe N.Name -> Src.Exposing -> Src.Import
48+import_ name maybeAlias exposing =
49+ Src.Import (A.At zero name) maybeAlias exposing
50+
51+
52+zero :: R.Region
53+zero =
54+ R.Region (R.Position 0 0) (R.Position 0 0)
55+
56+
57+
58+-- EXPOSING
59+
60+
61+closed :: Src.Exposing
62+closed =
63+ Src.Explicit []
64+
65+
66+typeOpen :: N.Name -> Src.Exposing
67+typeOpen name =
68+ Src.Explicit [ A.At zero (Src.Upper name Src.Public) ]
69+
70+
71+typeClosed :: N.Name -> Src.Exposing
72+typeClosed name =
73+ Src.Explicit [ A.At zero (Src.Upper name Src.Private) ]
74+
75+
76+operator :: N.Name -> Src.Exposing
77+operator op =
78+ Src.Explicit [ A.At zero (Src.Operator op) ]