@@ -7,6 +7,7 @@ module Elm.Compiler.Type.Extract
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 =
112 (result, newDeps) =
113 (result, newDeps) =
113− Writer.runWriter $
114+ Writer.runWriter $ do
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 )
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
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 =
128+ toAlias (args, tipe) =
129+ (,,) (Var.toString var) args <$> extractHelp tipe
126− case get Module.iAliases interfaces var of
131+ traverse toAlias (get Module.iAliases interfaces var)
128− return ( Var.toString var, [], Type "_Tuple0" )
130− Just (args, tipe) ->
131− (,,) (Var.toString var) args
132− <$> extractHelp tipe
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
139− return ( Var.toString var, [], [] )
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
141+ traverse toUnion (get Module.iUnions interfaces var)
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