diff --git a/src/Stack/Build.hs b/src/Stack/Build.hs index 40d873d864..7bf92bd692 100644 --- a/src/Stack/Build.hs +++ b/src/Stack/Build.hs @@ -685,8 +685,8 @@ getPackageDatabases bconfig BTDeps = liftIO $ liftM return $ runReaderT packageDatabaseDeps bconfig getPackageDatabases bconfig BTLocals = liftIO $ flip runReaderT bconfig $ sequence - [ packageDatabaseLocal - , packageDatabaseDeps + [ packageDatabaseDeps + , packageDatabaseLocal ] getInstallRoot :: MonadIO m => BuildConfig -> BuildType -> m (Path Abs Dir) diff --git a/src/Stack/GhcPkg.hs b/src/Stack/GhcPkg.hs index 44093d134c..90fededd5e 100644 --- a/src/Stack/GhcPkg.hs +++ b/src/Stack/GhcPkg.hs @@ -106,7 +106,7 @@ ghcPkg menv pkgDbs args = do -- latest version of each package. -- -- Package databases passed to this function override eachother in a --- left-biased way when containing two packages of the same name. +-- right-biased way when containing two packages of the same name. getPackageVersionMapWithGlobalDb :: (MonadCatch m, MonadIO m, MonadThrow m, MonadLogger m) => EnvOverride @@ -129,13 +129,15 @@ getPackageVersionMapWithGlobalDb menv mmbp pkgDbs = do Just mbp -> filtering gdb mbp allGlobals $logDebug ("Filtered globals: " <> T.pack (show globals)) - -- M.unions is left-biased. + -- M.unions is left-biased, so we reverse the list before calling + -- it to make it right-biased, like GHC. rest <- getPackageVersions menv pkgDbs (flip elem pkgDbs) (M.unions . + reverse . map (M.fromList . rights)) return (M.unions [rest,globals]) where