@@ -1,47 +1,28 @@
1−{-# LANGUAGE FlexibleContexts #-}
21module Transform.AddDefaultImports (add, defaultImports) where
32
4−import Prelude hiding (maybe)
5−import qualified Data.Map as Map
6−
73import qualified AST.Module as Module
84import qualified AST.Variable as Var
95
106
11−type ImportDict =
12− Map.Map Module.Name ([String], Var.Listing Var.Value)
13−
14−
157-- DESCRIPTION OF DEFAULT IMPORTS
168
179(==>) :: a -> b -> (a,b)
1810(==>) = (,)
1911
2012
21−defaultImports :: ImportDict
13+defaultImports :: [(Module.Name, Module.ImportMethod)]
2214defaultImports =
23− Map.fromList
24− [ ["Basics"] ==> ([], Var.openListing)
25− , ["List"] ==> ([], Var.Listing [Var.Value "::"] False)
26− , ["Maybe"] ==> ([], Var.Listing [maybe] False)
27− , ["Result"] ==> ([], Var.Listing [result] False)
28− , ["Signal"] ==> ([], Var.Listing [signal] False)
15+ [ ["Basics"] ==> Module.ImportMethod Nothing Var.openListing
16+ , ["List"] ==> exposing [Var.Value "::"]
17+ , ["Maybe"] ==> exposing [Var.Union "Maybe" Var.openListing]
18+ , ["Result"] ==> exposing [Var.Union "Result" Var.openListing]
19+ , ["Signal"] ==> exposing [Var.Union "Signal" Var.closedListing]
2920 ]
3021
3122
32−maybe :: Var.Value
33−maybe =
34− Var.Union "Maybe" Var.openListing
35−
36−
37−result :: Var.Value
38−result =
39− Var.Union "Result" Var.openListing
40−
41−
42−signal :: Var.Value
43−signal =
44− Var.Union "Signal" (Var.Listing [] False)
23+exposing :: [Var.Value] -> Module.ImportMethod
24+exposing vars =
25+ Module.ImportMethod Nothing (Var.listing vars)
4526
4627
4728-- ADDING DEFAULT IMPORTS TO A MODULE
@@ -51,37 +32,6 @@ add needsDefaults (Module.Module moduleName path exports imports decls) =
5132 Module.Module moduleName path exports ammendedImports decls
5233 where
5334 ammendedImports =
54− importDictToList $
55− foldr addImport (if needsDefaults then defaultImports else Map.empty) imports
56−
57−
58−importDictToList :: ImportDict -> [(Module.Name, Module.ImportMethod)]
59−importDictToList dict =
60− concatMap toImports (Map.toList dict)
61− where
62− toImports (name, (qualifiers, listing@(Var.Listing explicits open))) =
63− map (\qualifier -> (name, Module.As qualifier)) qualifiers
64− ++
65− if open || not (null explicits)
66− then [(name, Module.Open listing)]
67− else []
68−
69−
70−addImport :: (Module.Name, Module.ImportMethod) -> ImportDict -> ImportDict
71−addImport (name, method) importDict =
72− Map.alter mergeMethods name importDict
73− where
74− mergeMethods :: Maybe ([String], Var.Listing Var.Value)
75− -> Maybe ([String], Var.Listing Var.Value)
76− mergeMethods entry =
77− let (qualifiers, listing) =
78− case entry of
79− Nothing -> ([], Var.Listing [] False)
80− Just v -> v
81− in
82− case method of
83− Module.As qualifier ->
84− Just (qualifier : qualifiers, listing)
85−
86− Module.Open newListing ->
87− Just (qualifiers, newListing)
35+ if needsDefaults
36+ then defaultImports ++ imports
37+ else imports