@@ -21,7 +21,6 @@ import qualified Reporting.Region as R
21import qualified Canonicalize.Environment as Env
21import qualified Canonicalize.Environment as Env
22import qualified Canonicalize.Result as Result
22import qualified Canonicalize.Result as Result
23import qualified Canonicalize.Type as Canonicalize
23import qualified Canonicalize.Type as Canonicalize
24−import qualified Transform.Interface as Interface
27environment
26environment
@@ -55,7 +54,7 @@ importPatches
55 -> A.Located (Module.Name, Module.ImportMethod)
54 -> A.Located (Module.Name, Module.ImportMethod)
56 -> Result.ResultErr [Env.Patch]
55 -> Result.ResultErr [Env.Patch]
57importPatches allInterfaces (A.A region (importName, method)) =
56importPatches allInterfaces (A.A region (importName, method)) =
58− case Interface.filterExports <$> Map.lookup importName allInterfaces of
57+ case restrictToPublicApi <$> Map.lookup importName allInterfaces of
60 | Module.nameIsNative importName ->
59 | Module.nameIsNative importName ->
61 Result.ok []
60 Result.ok []
@@ -332,3 +331,59 @@ declToPatches moduleName (A.A region decl) =
332 ( Nothing
331 ( Nothing
336+-- RESTRICT VISIBLE API OF INTERFACES
338+restrictToPublicApi :: Module.Interface -> Module.Interface
339+restrictToPublicApi interface =
344+ (get (Module.iTypes interface))
345+ (Var.getValues exports ++ ctors)
350+ (get (Module.iAliases interface))
351+ (Var.getAliases exports)
355+ (Maybe.mapMaybe (trimUnions interface) unions)
358+ exports :: [Var.Value]
360+ Module.iExports interface
362+ unions :: [(String, Var.Listing String)]
364+ Var.getUnions exports
368+ concatMap (\(_, Var.Listing ctorList _) -> ctorList) unions
371+get :: Map.Map String a -> String -> Maybe (String, a)
373+ case Map.lookup key dict of
375+ Just value -> Just (key, value)
380+ -> (String, Var.Listing String)
381+ -> Maybe (String, Module.AdtInfo String)
382+trimUnions interface (name, Var.Listing exportedCtors _) =
383+ case Map.lookup name (Module.iAdts interface) of
385+ Just (tvars, ctors) ->
386+ let isExported (ctor, _) =
387+ ctor `elem` exportedCtors
389+ Just (name, (tvars, filter isExported ctors))