@@ -1,6 +1,7 @@
1−{-# LANGUAGE TemplateHaskell #-}
1+{-# LANGUAGE LambdaCase #-}
22{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving #-}
33{-# LANGUAGE RecordWildCards #-}
4+{-# LANGUAGE TemplateHaskell #-}
45
56module Distribution.Nixpkgs.Haskell.Stack where
67
@@ -78,35 +79,46 @@ unHackageDb :: HackageDb -> String
7879unHackageDb = T.unpack . fromHackageDB
7980
8081-- Thin wrapper around private stack2nix 'PackageSourceSpec.fromDB' method.
81−getPackageFromDb
82+getStackPackageFromDb
8283 :: Maybe HackageDb
83− -> StackExtraDep
84+ -> StackPackage
8485 -> IO Package
85−getPackageFromDb optHackageDb stackExtraDep =
86− PackageSourceSpec.getPackage (unHackageDb <$> optHackageDb) (sourceFromExtraDep stackExtraDep)
86+getStackPackageFromDb optHackageDb stackPackage =
87+ PackageSourceSpec.getPackage
88+ (unHackageDb <$> optHackageDb)
89+ (stackLocationToSource $ stackPackage ^. spSource)
8790
88−sourceFromExtraDep :: StackExtraDep -> Source
89−sourceFromExtraDep sed = Source{..}
90− where
91− sourceUrl = "cabal://" ++ unExtraDep sed
92− sourceRevision = mempty
93− sourceHash = UnknownHash
91+stackLocationToSource :: StackLocation -> Source
92+stackLocationToSource = \case
93+ HackagePackage p -> Source
94+ { sourceUrl = "cabal://" ++ T.unpack p
95+ , sourceRevision = mempty
96+ , sourceHash = UnknownHash }
97+ StackPath p -> Source
98+ { sourceUrl = T.unpack p
99+ , sourceRevision = mempty
100+ , sourceHash = UnknownHash }
101+ StackRepoGit rg -> Source
102+ { sourceUrl = T.unpack $ rg ^. rgUri
103+ , sourceRevision = T.unpack $ rg ^. rgCommit
104+ , sourceHash = UnknownHash }
94105
95−extraDepDerivation
106+packageDerivation
96107 :: Maybe HackageDb
97108 -> System.Platform
98109 -> Compiler.CompilerId
99110 -> PackageDescription.FlagAssignment
100− -> StackExtraDep
111+ -> StackPackage
101112 -> IO Derivation
102−extraDepDerivation optHackageDb optPlatform optCompilerId optFlagAssignment sed = do
103− pkg <- getPackageFromDb optHackageDb sed
104− pure $ FromCabal.fromGenericPackageDescription
105− (const True)
106− (\i -> Just (binding # (i, path # [i])))
107− optPlatform
108− (unknownCompilerInfo optCompilerId NoAbiTag)
109− optFlagAssignment
110− []
111− (pkgCabal pkg)
113+packageDerivation optHackageDb optPlatform optCompilerId optFlagAssignment sed = do
114+ pkg <- getStackPackageFromDb optHackageDb sed
115+ pure
116+ $ FromCabal.fromGenericPackageDescription
117+ (const True)
118+ (\i -> Just (binding # (i, path # [i])))
119+ optPlatform
120+ (unknownCompilerInfo optCompilerId NoAbiTag)
121+ optFlagAssignment
122+ []
123+ (pkgCabal pkg)
112124 & src .~ pkgSource pkg