@@ -7,6 +7,7 @@ module Elm.Compiler.Type.Extract
77
88import qualified Control.Monad.Writer as Writer
99import qualified Data.Map as Map
10+import qualified Data.Maybe as Maybe
1011import qualified Data.Set as Set
1112import qualified AST.Module as Module
1213import qualified AST.Module.Name as ModuleName
@@ -110,10 +111,10 @@ extractTransitive interfaces oldDeps currentDeps =
110111 else
111112 let
112113 (result, newDeps) =
113− Writer.runWriter $
114− (,)
115− <$> mapM (extractAlias interfaces) (Set.toList aliases)
116− <*> mapM (extractUnion interfaces) (Set.toList unions)
114+ Writer.runWriter $ do
115+ publicAliases <- mapM (extractAlias interfaces) (Set.toList aliases)
116+ publicUnions <- mapM (extractUnion interfaces) (Set.toList unions)
117+ return ( Maybe.catMaybes publicAliases, Maybe.catMaybes publicUnions )
117118
118119 remainingResult =
119120 extractTransitive interfaces (mappend oldDeps currentDeps) newDeps
@@ -121,26 +122,23 @@ extractTransitive interfaces oldDeps currentDeps =
121122 mappend result remainingResult
122123
123124
124−extractAlias :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps Alias
125+extractAlias :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps (Maybe Alias)
125126extractAlias interfaces var =
126− case get Module.iAliases interfaces var of
127− Nothing ->
128− return ( Var.toString var, [], Type "_Tuple0" )
129−
130− Just (args, tipe) ->
131− (,,) (Var.toString var) args
132− <$> extractHelp tipe
127+ let
128+ toAlias (args, tipe) =
129+ (,,) (Var.toString var) args <$> extractHelp tipe
130+ in
131+ traverse toAlias (get Module.iAliases interfaces var)
133132
134133
135−extractUnion :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps Union
134+extractUnion :: Module.Interfaces -> Var.Canonical -> Writer.Writer Deps (Maybe Union)
136135extractUnion interfaces var =
137− case get Module.iUnions interfaces var of
138− Nothing ->
139− return ( Var.toString var, [], [] )
140−
141− Just (args, constructors) ->
136+ let
137+ toUnion (args, constructors) =
142138 (,,) (Var.toString var) args
143139 <$> traverse (traverse (traverse extractHelp)) constructors
140+ in
141+ traverse toUnion (get Module.iUnions interfaces var)
144142
145143
146144get :: (Module.Interface -> Map.Map String a) -> Module.Interfaces -> Var.Canonical -> Maybe a