git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Remove syb dependency from module dependency module
commit9f0c6d8419c5957e461980ac8fd92762b81a6238 authorPhil Freeman <paf31@cantab.net> dateTue 15 Apr 2014, 18:07 (13 years ago) parent5025203
1 file changed+20−15
src/Language/PureScript/ModuleDependencies.hs+20−15
src/Language/PureScript/ModuleDependencies.hs+20−15
@@ -17,13 +17,13 @@ module Language.PureScript.ModuleDependencies (
1717 ModuleGraph
1818) where
1919
20−import Data.Data
2120import Data.Graph
22−import Data.Generics
2321import Data.List (nub)
22+import Data.Maybe (mapMaybe)
2423
2524import Language.PureScript.Declarations
2625import Language.PureScript.Names
26+import Language.PureScript.Types
2727
2828-- |
2929-- A list of modules with their dependencies
@@ -37,7 +37,7 @@ type ModuleGraph = [(ModuleName, [ModuleName])]
3737--
3838sortModules :: [Module] -> Either String ([Module], ModuleGraph)
3939sortModules 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
4141 ms' <- mapM toModule $ stronglyConnComp verts
4242 let moduleGraph = map (\(_, mn, deps) -> (mn, deps)) verts
4343 return (ms', moduleGraph)
@@ -45,19 +45,24 @@ sortModules ms = do
4545-- |
4646-- Calculate a list of used modules based on explicit imports and qualified names
4747--
48−usedModules :: (Data d) => d -> [ModuleName]
49−usedModules = nub . everything (++) (mkQ [] qualifiedIdents `extQ` qualifiedProperNames `extQ` imports)
48+usedModules :: Declaration -> [ModuleName]
49+usedModules = let (f, _, _, _, _) = everythingOnValues (++) forDecls forValues (const []) (const []) (const []) in nub . f
5050 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]
58− imports (ImportDeclaration mn _ _) = [mn]
59− imports (PositionedDeclaration _ d) = imports d
60− imports _ = []
51+ forDecls :: Declaration -> [ModuleName]
52+ forDecls (ImportDeclaration mn _ _) = [mn]
53+ forDecls _ = []
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 _ = []
6166
6267getModuleName :: Module -> ModuleName
6368getModuleName (Module mn _ _) = mn