git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Remove syb dependency from module dependency module
9f0c6d8Phil Freeman
src/Language/PureScript/ModuleDependencies.hs+20−15
@@ -17,13 +17,13 @@ module Language.PureScript.ModuleDependencies (
17 ModuleGraph
17 ModuleGraph
18) where
18) where
19
19
20−import Data.Data
21import Data.Graph
20import Data.Graph
22−import Data.Generics
23import Data.List (nub)
21import Data.List (nub)
22+import Data.Maybe (mapMaybe)
24
23
25import Language.PureScript.Declarations
24import Language.PureScript.Declarations
26import Language.PureScript.Names
25import Language.PureScript.Names
26+import Language.PureScript.Types
27
27
28-- |
28-- |
29-- A list of modules with their dependencies
29-- A list of modules with their dependencies
@@ -37,7 +37,7 @@ type ModuleGraph = [(ModuleName, [ModuleName])]
37--
37--
38sortModules :: [Module] -> Either String ([Module], ModuleGraph)
38sortModules :: [Module] -> Either String ([Module], ModuleGraph)
39sortModules ms = do
39sortModules ms = do
40− let verts = map (\m -> (m, getModuleName m, usedModules m)) ms
40+ let verts = map (\m@(Module _ ds _) -> (m, getModuleName m, nub (concatMap usedModules ds))) ms
41 ms' <- mapM toModule $ stronglyConnComp verts
41 ms' <- mapM toModule $ stronglyConnComp verts
42 let moduleGraph = map (\(_, mn, deps) -> (mn, deps)) verts
42 let moduleGraph = map (\(_, mn, deps) -> (mn, deps)) verts
43 return (ms', moduleGraph)
43 return (ms', moduleGraph)
@@ -45,19 +45,24 @@ sortModules ms = do
45-- |
45-- |
46-- Calculate a list of used modules based on explicit imports and qualified names
46-- Calculate a list of used modules based on explicit imports and qualified names
47--
47--
48−usedModules :: (Data d) => d -> [ModuleName]
48+usedModules :: Declaration -> [ModuleName]
49−usedModules = nub . everything (++) (mkQ [] qualifiedIdents `extQ` qualifiedProperNames `extQ` imports)
49+usedModules = let (f, _, _, _, _) = everythingOnValues (++) forDecls forValues (const []) (const []) (const []) in nub . f
50 where
50 where
51− qualifiedIdents :: Qualified Ident -> [ModuleName]
52− qualifiedIdents (Qualified (Just mn) _) = [mn]
53− qualifiedIdents _ = []
54− qualifiedProperNames :: Qualified ProperName -> [ModuleName]
55− qualifiedProperNames (Qualified (Just mn) _) = [mn]
56− qualifiedProperNames _ = []
57− imports :: Declaration -> [ModuleName]
51+ forDecls :: Declaration -> [ModuleName]
58− imports (ImportDeclaration mn _ _) = [mn]
52+ forDecls (ImportDeclaration mn _ _) = [mn]
59− imports (PositionedDeclaration _ d) = imports d
53+ forDecls _ = []
60− imports _ = []
54+
55+ forValues :: Value -> [ModuleName]
56+ forValues (Var (Qualified (Just mn) _)) = [mn]
57+ forValues (BinaryNoParens (Qualified (Just mn) _) _ _) = [mn]
58+ forValues (Constructor (Qualified (Just mn) _)) = [mn]
59+ forValues (TypedValue _ _ ty) = forTypes ty
60+ forValues _ = []
61+
62+ forTypes :: Type -> [ModuleName]
63+ forTypes (TypeConstructor (Qualified (Just mn) _)) = [mn]
64+ forTypes (ConstrainedType cs _) = mapMaybe (\(Qualified mn _, _) -> mn) cs
65+ forTypes _ = []
61
66
62getModuleName :: Module -> ModuleName
67getModuleName :: Module -> ModuleName
63getModuleName (Module mn _ _) = mn
68getModuleName (Module mn _ _) = mn