@@ -1,51 +1,78 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Compiler.Imports
3module Elm.Compiler.Imports
4− ( Import(..)
4+ ( addDefaults
9+import qualified AST.Source as Src
11import qualified Elm.Name as N
10import 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
15−-- IMPORTS
17+-- ADD DEFAULTS
18−data Import =
20+addDefaults :: Pkg.Name -> [Src.Import] -> [Src.Import]
19− Import
21+addDefaults pkgName imports =
20− { _name :: N.Name
22+ if pkgName == Pkg.core
21− , _alias :: Maybe N.Name
23+ then imports
22− , _exposing :: Exposing
24+ else defaults ++ imports
35-- DEFAULTS
28-- DEFAULTS
38−defaults :: [Import]
31+defaults :: [Src.Import]
40− [ Import "Basics" Nothing Open
33+ [ import_ "Basics" Nothing Src.Open
41− , Import "Debug" Nothing Closed
34+ , import_ "Debug" Nothing closed
42− , Import "List" Nothing (Operator "::")
35+ , import_ "List" Nothing (operator "::")
43− , Import "Maybe" Nothing (TypeOpen "Maybe")
36+ , import_ "Maybe" Nothing (typeOpen "Maybe")
44− , Import "Result" Nothing (TypeOpen "Result")
37+ , import_ "Result" Nothing (typeOpen "Result")
45− , Import "String" Nothing (TypeClosed "String")
38+ , import_ "String" Nothing (typeClosed "String")
46− , Import "Char" Nothing (TypeClosed "Char")
39+ , import_ "Char" Nothing (typeClosed "Char")
47− , Import "Tuple" Nothing Closed
40+ , import_ "Tuple" Nothing closed
48− , Import "Platform" Nothing (TypeClosed "Program")
41+ , import_ "Platform" Nothing (typeClosed "Program")
49− , Import "Platform.Cmd" (Just "Cmd") (TypeClosed "Cmd")
42+ , import_ "Platform.Cmd" (Just "Cmd") (typeClosed "Cmd")
50− , Import "Platform.Sub" (Just "Sub") (TypeClosed "Sub")
43+ , import_ "Platform.Sub" (Just "Sub") (typeClosed "Sub")
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
54+ R.Region (R.Position 0 0) (R.Position 0 0)
61+closed :: Src.Exposing
66+typeOpen :: N.Name -> Src.Exposing
68+ Src.Explicit [ A.At zero (Src.Upper name Src.Public) ]
71+typeClosed :: N.Name -> Src.Exposing
73+ Src.Explicit [ A.At zero (Src.Upper name Src.Private) ]
76+operator :: N.Name -> Src.Exposing
78+ Src.Explicit [ A.At zero (Src.Operator op) ]