@@ -0,0 +1,39 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+
3+module Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting where
4+
5+import Control.Lens
6+import Distribution.Package
7+import Distribution.Text
8+import Distribution.Nixpkgs.Haskell.Derivation
9+import Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting as PP
10+import Language.Nix.PrettyPrinting as PP
11+
12+
13+overrideExtraDeps :: [Derivation] -> Doc
14+overrideExtraDeps deps = PP.packageSetConfig . PP.cat $ callPackage <$> deps
15+ where
16+ drvNameString = PP.doubleQuotes . disp . pkgName . view pkgid
17+ callPackage drv = vcat
18+ [ drvNameString drv <> " = callPackage",
19+ nest 2 (PP.parens $ PP.pPrint drv) <+> "{};"]
20+
21+overrideHaskellPackages :: [Derivation] -> Doc -> Doc
22+overrideHaskellPackages extraDeps ghc = vcat
23+ [ funargs ["nixpkgs ? import <nixpkgs> {}"]
24+ , ""
25+ , "with nixpkgs;"
26+ , "let"
27+ , nest 2 $ vcat
28+ [ "extraDepsPackages ="
29+ , overrideExtraDeps extraDeps <> semi
30+ , "pkgOverrides = self: extraDepsPackages {"
31+ , nest 2 "inherit pkgs stdenv;"
32+ , nest 2 "inherit (self) callPackage;"
33+ , "};"
34+ ]
35+ , "in pkgs.haskell.packages." <> ghc <> ".override {"
36+ , nest 2 $ vcat
37+ [ "overrides = self: pkgOverrides self;"]
38+ , "}"
39+ ]