From 9cb1c594fa944bdaba84de69e35118430b5590cf Mon Sep 17 00:00:00 2001 From: Daniel Gröber Date: Wed, 7 Aug 2019 19:04:12 +0200 Subject: Break cycle between 'Package' and 'Unit' --- src/CabalHelper/Compiletime/Program/CabalInstall.hs | 4 +++- src/CabalHelper/Compiletime/Program/Stack.hs | 2 +- src/CabalHelper/Compiletime/Types.hs | 8 +++++--- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/CabalHelper') diff --git a/src/CabalHelper/Compiletime/Program/CabalInstall.hs b/src/CabalHelper/Compiletime/Program/CabalInstall.hs index cce4364..cc05421 100644 --- a/src/CabalHelper/Compiletime/Program/CabalInstall.hs +++ b/src/CabalHelper/Compiletime/Program/CabalInstall.hs @@ -262,6 +262,7 @@ planPackages plan = do where groupByMap = Map.fromListWith (<>) . map (CP.uPId &&& (:|[])) + mkPackage :: NonEmpty CP.Unit -> IO (Package ('Cabal 'CV2)) mkPackage units@(unit :| _) = case unit of CP.Unit @@ -275,11 +276,12 @@ planPackages plan = do , pSourceDir = pkgdir , pCabalFile = CabalFile cabal_file , pFlags = [] - , pUnits = fmap (mkUnit pkg) units + , pUnits = fmap (mkUnit pkg { pUnits = () }) units } return pkg _ -> panicIO "planPackages.mkPackage: Got non-unpacked package src!" + mkUnit :: Package' () -> CP.Unit -> Unit ('Cabal 'CV2) mkUnit pkg CP.Unit { uDistDir=Just distdirv1 , uComps=comps diff --git a/src/CabalHelper/Compiletime/Program/Stack.hs b/src/CabalHelper/Compiletime/Program/Stack.hs index 6f3365f..5c5f808 100644 --- a/src/CabalHelper/Compiletime/Program/Stack.hs +++ b/src/CabalHelper/Compiletime/Program/Stack.hs @@ -60,7 +60,7 @@ getPackage qe cabal_file@(CabalFile cabal_file_path) = do , pUnits = (:|[]) $ Unit { uUnitId = UnitId pkg_name , uDistDir = DistDirLib $ pkgdir distdirv1_rel - , uPackage = pkg + , uPackage = pkg { pUnits = () } , uImpl = UnitImplStack } } diff --git a/src/CabalHelper/Compiletime/Types.hs b/src/CabalHelper/Compiletime/Types.hs index d206cf0..44849f5 100644 --- a/src/CabalHelper/Compiletime/Types.hs +++ b/src/CabalHelper/Compiletime/Types.hs @@ -279,14 +279,16 @@ data QueryCache pt = QueryCache newtype DistDirLib = DistDirLib FilePath deriving (Eq, Ord, Read, Show) +type Package pt = Package' (NonEmpty (Unit pt)) + -- | A 'Package' is a named collection of many 'Unit's. -data Package pt = Package +data Package' units = Package { pPackageName :: !String , pSourceDir :: !FilePath , pCabalFile :: !CabalFile , pFlags :: ![(String, Bool)] -- | Cabal flags to set when configuring and building this package. - , pUnits :: !(NonEmpty (Unit pt)) + , pUnits :: !units } deriving (Show) -- | A 'Unit' is essentially a "build target". It is used to refer to a set @@ -303,7 +305,7 @@ data Package pt = Package -- was created in. However this is not enforced by the API. data Unit pt = Unit { uUnitId :: !UnitId - , uPackage :: !(Package pt) + , uPackage :: !(Package' ()) , uDistDir :: !DistDirLib , uImpl :: !(UnitImpl pt) } deriving (Show) -- cgit v1.2.3