diff options
| author | Simon Marlow <marlowsd@gmail.com> | 2009-07-17 12:34:49 +0000 |
|---|---|---|
| committer | Simon Marlow <marlowsd@gmail.com> | 2009-07-17 12:34:49 +0000 |
| commit | a8457632b7206c164b948fa908e63f5b9ac58cbf (patch) | |
| tree | 0030b26a23c8b3bcaa6ad66ba0213acc6059181c | |
| parent | 3242c7ad7f5660305059f8542276f86f45a152f0 (diff) | |
| download | haskell-a8457632b7206c164b948fa908e63f5b9ac58cbf.tar.gz | |
Use stable ordering in the dependencies
Fixes another cause of wobbly interface files and unnecessary recompilation.
| -rw-r--r-- | compiler/iface/MkIface.lhs | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs index 17a379bbad..7b30a19e55 100644 --- a/compiler/iface/MkIface.lhs +++ b/compiler/iface/MkIface.lhs @@ -185,26 +185,15 @@ mkDependencies -- on M.hi-boot, and hence that we should do the hi-boot consistency -- check.) - -- Modules don't compare lexicographically usually, - -- but we want them to do so here. - le_mod :: Module -> Module -> Bool - le_mod m1 m2 = moduleNameFS (moduleName m1) - <= moduleNameFS (moduleName m2) - - le_dep_mod :: (ModuleName, IsBootInterface) - -> (ModuleName, IsBootInterface) -> Bool - le_dep_mod (m1,_) (m2,_) = moduleNameFS m1 <= moduleNameFS m2 - - pkgs | th_used = insertList thPackageId (imp_dep_pkgs imports) | otherwise = imp_dep_pkgs imports - return Deps { dep_mods = sortLe le_dep_mod dep_mods, - dep_pkgs = sortLe (<=) pkgs, - dep_orphs = sortLe le_mod (imp_orphs imports), - dep_finsts = sortLe le_mod (imp_finsts imports) } + return Deps { dep_mods = sortBy (stableModuleNameCmp `on` fst) dep_mods, + dep_pkgs = sortBy stablePackageIdCmp pkgs, + dep_orphs = sortBy stableModuleCmp (imp_orphs imports), + dep_finsts = sortBy stableModuleCmp (imp_finsts imports) } -- sort to get into canonical order - + -- NB. remember to use lexicographic ordering mkIface_ :: HscEnv -> Maybe Fingerprint -> Module -> IsBootInterface -> NameSet -> Dependencies -> GlobalRdrEnv |
