@@ -17,6 +17,7 @@ import qualified AST.Canonical as Can
17import qualified AST.Module.Name as ModuleName
17import qualified AST.Module.Name as ModuleName
18import qualified AST.Utils.Binop as Binop
18import qualified AST.Utils.Binop as Binop
19import qualified Elm.Name as N
19import qualified Elm.Name as N
20+import qualified Reporting.Annotation as A
@@ -54,15 +55,38 @@ data Binop =
56fromModule :: Map.Map N.Name Can.Annotation -> Can.Module -> Interface
57fromModule :: Map.Map N.Name Can.Annotation -> Can.Module -> Interface
57−fromModule types (Can.Module _ _ _ _ unions aliases binops _) =
58+fromModule types (Can.Module _ _ exports _ unions aliases binops _) =
59− { _types = types
60+ { _types = privatize exports const types
60− , _unions = unions
61+ , _unions = privatize exports toUnion unions
61− , _aliases = aliases
62+ , _aliases = privatize exports const aliases
62− , _binops = Map.map (toOp types) binops
63+ , _binops = privatize exports const (Map.map (toOp types) binops)
67+privatize :: Can.Exports -> (a -> A.Located Can.Export -> a) -> Map.Map N.Name a -> Map.Map N.Name a
68+privatize exports func dict =
70+ Can.ExportEverything ->
73+ Can.Export explicitExports ->
74+ Map.intersectionWith func dict explicitExports
77+toUnion :: Can.Union -> A.Located Can.Export -> Can.Union
78+toUnion union@(Can.Union vars _ _ opts) (A.At _ export) =
80+ Can.ExportUnionOpen ->
83+ Can.ExportUnionClosed ->
84+ Can.Union vars [] 0 opts
87+ error "Compiler bug. Should not run into non-union exports here."
66toOp :: Map.Map N.Name Can.Annotation -> Can.Binop -> Binop
90toOp :: Map.Map N.Name Can.Annotation -> Can.Binop -> Binop
67toOp types (Can.Binop_ associativity precedence name) =
91toOp types (Can.Binop_ associativity precedence name) =
68 Binop name (types ! name) associativity precedence
92 Binop name (types ! name) associativity precedence