lol
1{ pkgs }:
2
3with import ./lib.nix { inherit pkgs; };
4
5self: super: {
6
7 # LLVM is not supported on this GHC; use the latest one.
8 inherit (pkgs) llvmPackages;
9
10 inherit (pkgs.haskell.packages.ghc7102) jailbreak-cabal alex happy gtk2hs-buildtools;
11
12 # Many packages fail with:
13 # haddock: internal error: expectJust getPackageDetails
14 mkDerivation = drv: super.mkDerivation (drv // { doHaddock = false; });
15
16 # This is the list of packages that are built into a booted ghcjs installation
17 # It can be generated with the command:
18 # nix-shell '<nixpkgs>' -A pkgs.haskellPackages_ghcjs.ghc --command "ghcjs-pkg list | sed -n 's/^ \(.*\)-\([0-9.]*\)$/\1_\2/ p' | sed 's/\./_/g' | sed 's/-\(.\)/\U\1/' | sed 's/^\([^_]*\)\(.*\)$/\1 = null;/'"
19 Cabal = null;
20 aeson = null;
21 array = null;
22 async = null;
23 attoparsec = null;
24 base = null;
25 binary = null;
26 rts = null;
27 bytestring = null;
28 case-insensitive = null;
29 containers = null;
30 deepseq = null;
31 directory = null;
32 dlist = null;
33 extensible-exceptions = null;
34 filepath = null;
35 ghc-prim = null;
36 ghcjs-base = null;
37 ghcjs-prim = null;
38 hashable = null;
39 integer-gmp = null;
40 mtl = null;
41 old-locale = null;
42 old-time = null;
43 parallel = null;
44 pretty = null;
45 primitive = null;
46 process = null;
47 scientific = null;
48 stm = null;
49 syb = null;
50 template-haskell = null;
51 text = null;
52 time = null;
53 transformers = null;
54 unix = null;
55 unordered-containers = null;
56 vector = null;
57
58 # These packages are core libraries in GHC 7.10.x, but not here.
59 bin-package-db = null;
60 haskeline = self.haskeline_0_7_2_1;
61 hoopl = self.hoopl_3_10_2_0;
62 hpc = self.hpc_0_6_0_2;
63 terminfo = self.terminfo_0_4_0_1;
64 xhtml = self.xhtml_3000_2_1;
65
66 pqueue = overrideCabal super.pqueue (drv: {
67 postPatch = ''
68 sed -i -e '12s|null|Data.PQueue.Internals.null|' Data/PQueue/Internals.hs
69 sed -i -e '64s|null|Data.PQueue.Internals.null|' Data/PQueue/Internals.hs
70 sed -i -e '32s|null|Data.PQueue.Internals.null|' Data/PQueue/Min.hs
71 sed -i -e '32s|null|Data.PQueue.Max.null|' Data/PQueue/Max.hs
72 sed -i -e '42s|null|Data.PQueue.Prio.Internals.null|' Data/PQueue/Prio/Min.hs
73 sed -i -e '42s|null|Data.PQueue.Prio.Max.null|' Data/PQueue/Prio/Max.hs
74 '';
75 });
76
77 transformers-compat = overrideCabal super.transformers-compat (drv: {
78 configureFlags = [];
79 });
80
81 profunctors = overrideCabal super.profunctors (drv: {
82 preConfigure = ''
83 sed -i 's/^{-# ANN .* #-}//' src/Data/Profunctor/Unsafe.hs
84 '';
85 });
86
87 ghcjs-dom = overrideCabal super.ghcjs-dom (drv: {
88 buildDepends = [ self.base self.mtl self.text self.ghcjs-base ];
89 libraryHaskellDepends = [ ];
90 });
91
92 ghc-paths = overrideCabal super.ghc-paths (drv: {
93 patches = [ ./patches/ghc-paths-nix-ghcjs.patch ];
94 });
95
96 # reflex 0.3, made compatible with the newest GHCJS.
97 reflex = overrideCabal super.reflex (drv: {
98 src = pkgs.fetchFromGitHub {
99 owner = "k0001";
100 repo = "reflex";
101 rev = "e9b2f777ad07875149614e8337507afd5b1a2466";
102 sha256 = "005hr3s6y369pxfdlixi4wabgav0bb653j98788kq9q9ssgijlwn";
103 };
104 libraryHaskellDepends = [
105 self.base self.containers self.dependent-map_0_1_1_3
106 self.dependent-sum_0_2_0_1 self.exception-transformers self.mtl
107 self.primitive self.ref-tf self.semigroups self.template-haskell
108 self.these self.transformers self.transformers-compat
109 ];
110 });
111
112 # reflex-dom 0.2, made compatible with the newest GHCJS.
113 reflex-dom = overrideCabal super.reflex-dom (drv: {
114 src = pkgs.fetchFromGitHub {
115 owner = "k0001";
116 repo = "reflex-dom";
117 rev = "a117eae8e101198977611f87605a5cb2ae752fc7";
118 sha256 = "18m8ng2fgsfbqdvx5jxy23ndyyhafnxflq8apg5psdz3aqkfimzh";
119 };
120 libraryHaskellDepends = [
121 self.aeson self.base self.bifunctors self.bytestring self.containers
122 self.data-default self.dependent-map_0_1_1_3 self.dependent-sum_0_2_0_1
123 self.dependent-sum-template self.directory
124 self.exception-transformers self.ghcjs-dom self.lens self.mtl self.ref-tf
125 self.reflex self.safe self.semigroups self.text self.these self.time
126 self.transformers
127 ];
128 });
129
130 # required by reflex, reflex-dom
131 dependent-map_0_1_1_3 = self.callPackage (
132 { mkDerivation, base, containers, dependent-sum_0_2_0_1, stdenv
133 }:
134 mkDerivation {
135 pname = "dependent-map";
136 version = "0.1.1.3";
137 sha256 = "1by83rrv8dfn5lxrpx3qzs1lg31fhnzlqy979h8ampyxd0w93pa4";
138 libraryHaskellDepends = [ base containers dependent-sum_0_2_0_1 ];
139 homepage = "https://github.com/mokus0/dependent-map";
140 description = "Dependent finite maps (partial dependent products)";
141 license = "unknown";
142 }
143 ) {};
144
145 # required by reflex, reflex-dom
146 dependent-sum_0_2_0_1 = self.callPackage (
147 { mkDerivation, base, stdenv
148 }:
149 mkDerivation {
150 pname = "dependent-sum";
151 version = "0.2.1.0";
152 sha256 = "1h6wsrh206k6q3jcfdxvlsswbm47x30psp6x30l2z0j9jyf7jpl3";
153 libraryHaskellDepends = [ base ];
154 homepage = "https://github.com/mokus0/dependent-sum";
155 description = "Dependent sum type";
156 license = stdenv.lib.licenses.publicDomain;
157 }
158 ) {};
159
160 # required by reflex-dom
161 dependent-sum-template = overrideCabal super.dependent-sum-template (drv: {
162 libraryHaskellDepends = [
163 self.base self.dependent-sum_0_2_0_1 self.template-haskell self.th-extras
164 ];
165 });
166
167}