on master help sign in
Filter out BuiltIn types from transitive program type dependencies
20ab198Evan Czaplicki
src/Elm/Compiler/Type/Extract.hs+16−18
@@ -7,6 +7,7 @@ module Elm.Compiler.Type.Extract
7
7
8import qualified Control.Monad.Writer as Writer
8import qualified Control.Monad.Writer as Writer
9import qualified Data.Map as Map
9import qualified Data.Map as Map
10+import qualified Data.Maybe as Maybe
10import qualified Data.Set as Set
11import qualified Data.Set as Set
11import qualified AST.Module as Module
12import qualified AST.Module as Module
12import qualified AST.Module.Name as ModuleName
13import qualified AST.Module.Name as ModuleName
@@ -110,10 +111,10 @@ extractTransitive interfaces oldDeps currentDeps =
110 else
111 else
111 let
112 let
112 (result, newDeps) =
113 (result, newDeps) =
113− Writer.runWriter $
114+ Writer.runWriter $ do
114− (,)
115− <$> mapM (extractAlias interfaces) (Set.toList aliases)
115+ publicAliases <- mapM (extractAlias interfaces) (Set.toList aliases)
116− <*> mapM (extractUnion interfaces) (Set.toList unions)
116+ publicUnions <- mapM (extractUnion interfaces) (Set.toList unions)
117+ return ( Maybe.catMaybes publicAliases, Maybe.catMaybes publicUnions )
117
118
118 remainingResult =
119 remainingResult =
119 extractTransitive interfaces (mappend oldDeps currentDeps) newDeps
120 extractTransitive interfaces (mappend oldDeps currentDeps) newDeps
@@ -121,26 +122,23 @@ extractTransitive interfaces oldDeps currentDeps =
121 mappend result remainingResult
122 mappend result remainingResult
122
123
123
124
124−extractAlias :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps Alias
125+extractAlias :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps (Maybe Alias)
125extractAlias interfaces var =
126extractAlias interfaces var =
127+ let
128+ toAlias (args, tipe) =
129+ (,,) (Var.toString var) args <$> extractHelp tipe
130+ in
126− case get Module.iAliases interfaces var of
131+ traverse toAlias (get Module.iAliases interfaces var)
127− Nothing ->
128− return ( Var.toString var, [], Type "_Tuple0" )
129−
130− Just (args, tipe) ->
131− (,,) (Var.toString var) args
132− <$> extractHelp tipe
133
132
134
133
135−extractUnion :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps Union
134+extractUnion :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps (Maybe Union)
136extractUnion interfaces var =
135extractUnion interfaces var =
137− case get Module.iUnions interfaces var of
136+ let
138− Nothing ->
139− return ( Var.toString var, [], [] )
140−
141− Just (args, constructors) ->
137+ toUnion (args, constructors) =
142 (,,) (Var.toString var) args
138 (,,) (Var.toString var) args
143 <$> traverse (traverse (traverse extractHelp)) constructors
139 <$> traverse (traverse (traverse extractHelp)) constructors
140+ in
141+ traverse toUnion (get Module.iUnions interfaces var)
144
142
145
143
146get :: (Module.Interface -> Map.Map String a) -> Module.Interfaces -> Var.Canonical -> Maybe a
144get :: (Module.Interface -> Map.Map String a) -> Module.Interfaces -> Var.Canonical -> Maybe a