on iko/ghcjs-patch-master help sign in
.buildkite/pipeline.ymlnew file+52
since splitsnapshots
unifiedsplit
@@ -0,0 +1,52 @@
1+steps:
2+ - label: 'Run tests with ghc8107'
3+ command: "./test/tests.sh ghc8107"
4+ agents:
5+ system: x86_64-linux
6+
7+ - label: 'Check that jobset will evaluate in Hydra'
8+ command:
9+ - nix-build build.nix -A maintainer-scripts.check-hydra -o check-hydra.sh
10+ - ./check-hydra.sh 0
11+ - ./check-hydra.sh 1
12+ - ./check-hydra.sh 2
13+ - ./check-hydra.sh 3
14+ agents:
15+ system: x86_64-linux
16+
17+ - label: 'Check closure size with ghc8107'
18+ command:
19+ - nix-build build.nix -A maintainer-scripts.check-closure-size --argstr compiler-nix-name ghc8107 -o check-closure-size.sh
20+ - echo "+++ Closure size (MB)"
21+ - ./check-closure-size.sh
22+ agents:
23+ system: x86_64-linux
24+
25+ - label: 'Update docs'
26+ command:
27+ - nix-build build.nix -A maintainer-scripts.update-docs -o update-docs.sh
28+ - ./update-docs.sh
29+ agents:
30+ system: x86_64-linux
31+
32+ - label: 'Make sure materialize function does not limit concurrency'
33+ command:
34+ - nix-build build.nix -A maintainer-scripts.check-materialization-concurrency -o check-materialization-concurrency.sh
35+ - ./check-materialization-concurrency.sh
36+
37+ - label: 'Make sure non store paths like can be used as src'
38+ command:
39+ - nix-build build.nix -A maintainer-scripts.check-path-support --argstr compiler-nix-name ghc8107 -o check-path-support.sh
40+ - ./check-path-support.sh
41+
42+ - label: 'Check that the haskell.nix roots do not require IFDs'
43+ command:
44+ - nix build .#roots.x86_64-linux --option allow-import-from-derivation false
45+ agents:
46+ system: x86_64-linux
47+
48+ - label: 'Check that evaluation of hydra jobs works without using remote builders'
49+ command:
50+ - nix-instantiate release.nix -A required-unstable-ghc8107-x86_64-darwin-native --show-trace --builders ''
51+ agents:
52+ system: x86_64-linux
.buildkite/updates.ymlnew file+24
@@ -0,0 +1,24 @@
1+steps:
2+ - label: 'Update hackage.nix and stackage.nix'
3+ command:
4+ - nix-build build.nix -A maintainer-scripts.update-hackage -o update-hackage.sh
5+ - echo "+++ Updating hackage.nix"
6+ - ./update-hackage.sh
7+ - nix-build build.nix -A maintainer-scripts.update-stackage -o update-stackage.sh
8+ - echo "+++ Updating stackage.nix"
9+ - ./update-stackage.sh
10+ artifact_paths:
11+ - "flake.lock"
12+ agents:
13+ system: x86_64-linux
14+
15+ - wait: ~
16+ continue_on_failure: true
17+
18+ - label: 'Update pins'
19+ command:
20+ - 'buildkite-agent artifact download "flake.lock" .'
21+ - nix-build build.nix -A maintainer-scripts.update-pins -o update-pins.sh
22+ - ./update-pins.sh
23+ agents:
24+ system: x86_64-linux
.gitattributesnew file+7
@@ -0,0 +1,7 @@
1+# GitHub Linguist annotations.
2+# Hide stuff that is generated by nix-tools plan-to-nix
3+
4+nix-tools/.plan.nix/*.nix linguist-generated=true
5+nix-tools/pkgs.nix linguist-generated=true
6+.stack-to-nix.cache linguist-generated=true
7+materialized/**/* linguist-generated=true
.github/workflows/rebase.yamlnew file+28
@@ -0,0 +1,28 @@
1+name: Rebase on iohk/haskell.nix
2+
3+on:
4+ schedule:
5+ - cron: 0 0 * * *
6+
7+jobs:
8+ Linux:
9+ runs-on: ubuntu-latest
10+ steps:
11+ - uses: actions/checkout@v2.4.0
12+ with:
13+ fetch-depth: 0
14+ - name: Rebase and push
15+ run: |
16+ git config --global user.name "GitHub Actions"
17+
18+
19+ git remote add iohk https://github.com/input-output-hk/haskell.nix.git
20+ git fetch iohk
21+
22+ git checkout iko/ghcjs-patch-master
23+ git rebase iohk/master
24+ git push --force
25+
26+ git checkout --track origin/master
27+ git reset --hard iohk/master
28+ git push --force
.github/workflows/windows-secp256k1.ymlnew file+51
@@ -0,0 +1,51 @@
1+name: "Test secp256k1 on windows"
2+on: workflow_dispatch
3+jobs:
4+ tests:
5+ runs-on: windows-latest
6+
7+ defaults:
8+ run:
9+ shell: bash
10+
11+ steps:
12+
13+ - uses: haskell/actions/setup@v1
14+ id: setup-haskell
15+ with:
16+ ghc-version: 8.10.7
17+ cabal-version: 3.6.2.0
18+
19+ - name: Install pkgconfiglite
20+ run: choco install -y pkgconfiglite
21+
22+ - name: Install libsecp256k1
23+ run: |
24+ curl -Ls \
25+ --connect-timeout 5 \
26+ --max-time 10 \
27+ --retry 5 \
28+ --retry-delay 0 \
29+ --retry-max-time 40 \
30+ https://hydra.iohk.io/job/Cardano/haskell-nix/windows-secp256k1/latest/download/1 -o secp256k1.zip
31+ mkdir secp256k1
32+ cd secp256k1
33+ unzip ../secp256k1.zip
34+ cd ..
35+ export PKG_CONFIG_PATH="$PKG_CONFIG_PATH;$(readlink -f secp256k1/lib/pkgconfig | sed 's|^/d|D:|g' | tr / '\\')"
36+ echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
37+ echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> $GITHUB_ENV
38+ export SECP256K1_PATH="$(readlink -f secp256k1/bin | sed 's|^/d|D:|g' | tr / '\\')"
39+ echo "SECP256K1_PATH=$SECP256K1_PATH"
40+ echo "$SECP256K1_PATH" >> $GITHUB_PATH
41+
42+ - name: Cabal update
43+ run: cabal update
44+
45+ - name: Build and run haskell-secp256k1 tests
46+ run: |
47+ cabal unpack secp256k1-haskell
48+ cd secp256k1-haskell-*
49+ cabal build --enable-tests
50+ cabal test
51+
.gitignore+8
@@ -1,3 +1,10 @@
1+# The output of "mkdocs build"
2+/site/
3+docs/reference/modules.md
4+
5+# Nix build results
6+result*
7+/nt
1
8
2# Created by https://www.gitignore.io/api/haskell,emacs,vim
9# Created by https://www.gitignore.io/api/haskell,emacs,vim
3
10
@@ -92,3 +99,4 @@ tags
92
99
93
100
94# End of https://www.gitignore.io/api/haskell,emacs,vim
101# End of https://www.gitignore.io/api/haskell,emacs,vim
102+nix-tools-src-new.json
COPYINGnew file+201
@@ -0,0 +1,201 @@
1+ Apache License
2+ Version 2.0, January 2004
3+ http://www.apache.org/licenses/
4+
5+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6+
7+ 1. Definitions.
8+
9+ "License" shall mean the terms and conditions for use, reproduction,
10+ and distribution as defined by Sections 1 through 9 of this document.
11+
12+ "Licensor" shall mean the copyright owner or entity authorized by
13+ the copyright owner that is granting the License.
14+
15+ "Legal Entity" shall mean the union of the acting entity and all
16+ other entities that control, are controlled by, or are under common
17+ control with that entity. For the purposes of this definition,
18+ "control" means (i) the power, direct or indirect, to cause the
19+ direction or management of such entity, whether by contract or
20+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21+ outstanding shares, or (iii) beneficial ownership of such entity.
22+
23+ "You" (or "Your") shall mean an individual or Legal Entity
24+ exercising permissions granted by this License.
25+
26+ "Source" form shall mean the preferred form for making modifications,
27+ including but not limited to software source code, documentation
28+ source, and configuration files.
29+
30+ "Object" form shall mean any form resulting from mechanical
31+ transformation or translation of a Source form, including but
32+ not limited to compiled object code, generated documentation,
33+ and conversions to other media types.
34+
35+ "Work" shall mean the work of authorship, whether in Source or
36+ Object form, made available under the License, as indicated by a
37+ copyright notice that is included in or attached to the work
38+ (an example is provided in the Appendix below).
39+
40+ "Derivative Works" shall mean any work, whether in Source or Object
41+ form, that is based on (or derived from) the Work and for which the
42+ editorial revisions, annotations, elaborations, or other modifications
43+ represent, as a whole, an original work of authorship. For the purposes
44+ of this License, Derivative Works shall not include works that remain
45+ separable from, or merely link (or bind by name) to the interfaces of,
46+ the Work and Derivative Works thereof.
47+
48+ "Contribution" shall mean any work of authorship, including
49+ the original version of the Work and any modifications or additions
50+ to that Work or Derivative Works thereof, that is intentionally
51+ submitted to Licensor for inclusion in the Work by the copyright owner
52+ or by an individual or Legal Entity authorized to submit on behalf of
53+ the copyright owner. For the purposes of this definition, "submitted"
54+ means any form of electronic, verbal, or written communication sent
55+ to the Licensor or its representatives, including but not limited to
56+ communication on electronic mailing lists, source code control systems,
57+ and issue tracking systems that are managed by, or on behalf of, the
58+ Licensor for the purpose of discussing and improving the Work, but
59+ excluding communication that is conspicuously marked or otherwise
60+ designated in writing by the copyright owner as "Not a Contribution."
61+
62+ "Contributor" shall mean Licensor and any individual or Legal Entity
63+ on behalf of whom a Contribution has been received by Licensor and
64+ subsequently incorporated within the Work.
65+
66+ 2. Grant of Copyright License. Subject to the terms and conditions of
67+ this License, each Contributor hereby grants to You a perpetual,
68+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69+ copyright license to reproduce, prepare Derivative Works of,
70+ publicly display, publicly perform, sublicense, and distribute the
71+ Work and such Derivative Works in Source or Object form.
72+
73+ 3. Grant of Patent License. Subject to the terms and conditions of
74+ this License, each Contributor hereby grants to You a perpetual,
75+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76+ (except as stated in this section) patent license to make, have made,
77+ use, offer to sell, sell, import, and otherwise transfer the Work,
78+ where such license applies only to those patent claims licensable
79+ by such Contributor that are necessarily infringed by their
80+ Contribution(s) alone or by combination of their Contribution(s)
81+ with the Work to which such Contribution(s) was submitted. If You
82+ institute patent litigation against any entity (including a
83+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84+ or a Contribution incorporated within the Work constitutes direct
85+ or contributory patent infringement, then any patent licenses
86+ granted to You under this License for that Work shall terminate
87+ as of the date such litigation is filed.
88+
89+ 4. Redistribution. You may reproduce and distribute copies of the
90+ Work or Derivative Works thereof in any medium, with or without
91+ modifications, and in Source or Object form, provided that You
92+ meet the following conditions:
93+
94+ (a) You must give any other recipients of the Work or
95+ Derivative Works a copy of this License; and
96+
97+ (b) You must cause any modified files to carry prominent notices
98+ stating that You changed the files; and
99+
100+ (c) You must retain, in the Source form of any Derivative Works
101+ that You distribute, all copyright, patent, trademark, and
102+ attribution notices from the Source form of the Work,
103+ excluding those notices that do not pertain to any part of
104+ the Derivative Works; and
105+
106+ (d) If the Work includes a "NOTICE" text file as part of its
107+ distribution, then any Derivative Works that You distribute must
108+ include a readable copy of the attribution notices contained
109+ within such NOTICE file, excluding those notices that do not
110+ pertain to any part of the Derivative Works, in at least one
111+ of the following places: within a NOTICE text file distributed
112+ as part of the Derivative Works; within the Source form or
113+ documentation, if provided along with the Derivative Works; or,
114+ within a display generated by the Derivative Works, if and
115+ wherever such third-party notices normally appear. The contents
116+ of the NOTICE file are for informational purposes only and
117+ do not modify the License. You may add Your own attribution
118+ notices within Derivative Works that You distribute, alongside
119+ or as an addendum to the NOTICE text from the Work, provided
120+ that such additional attribution notices cannot be construed
121+ as modifying the License.
122+
123+ You may add Your own copyright statement to Your modifications and
124+ may provide additional or different license terms and conditions
125+ for use, reproduction, or distribution of Your modifications, or
126+ for any such Derivative Works as a whole, provided Your use,
127+ reproduction, and distribution of the Work otherwise complies with
128+ the conditions stated in this License.
129+
130+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131+ any Contribution intentionally submitted for inclusion in the Work
132+ by You to the Licensor shall be under the terms and conditions of
133+ this License, without any additional terms or conditions.
134+ Notwithstanding the above, nothing herein shall supersede or modify
135+ the terms of any separate license agreement you may have executed
136+ with Licensor regarding such Contributions.
137+
138+ 6. Trademarks. This License does not grant permission to use the trade
139+ names, trademarks, service marks, or product names of the Licensor,
140+ except as required for reasonable and customary use in describing the
141+ origin of the Work and reproducing the content of the NOTICE file.
142+
143+ 7. Disclaimer of Warranty. Unless required by applicable law or
144+ agreed to in writing, Licensor provides the Work (and each
145+ Contributor provides its Contributions) on an "AS IS" BASIS,
146+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147+ implied, including, without limitation, any warranties or conditions
148+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149+ PARTICULAR PURPOSE. You are solely responsible for determining the
150+ appropriateness of using or redistributing the Work and assume any
151+ risks associated with Your exercise of permissions under this License.
152+
153+ 8. Limitation of Liability. In no event and under no legal theory,
154+ whether in tort (including negligence), contract, or otherwise,
155+ unless required by applicable law (such as deliberate and grossly
156+ negligent acts) or agreed to in writing, shall any Contributor be
157+ liable to You for damages, including any direct, indirect, special,
158+ incidental, or consequential damages of any character arising as a
159+ result of this License or out of the use or inability to use the
160+ Work (including but not limited to damages for loss of goodwill,
161+ work stoppage, computer failure or malfunction, or any and all
162+ other commercial damages or losses), even if such Contributor
163+ has been advised of the possibility of such damages.
164+
165+ 9. Accepting Warranty or Additional Liability. While redistributing
166+ the Work or Derivative Works thereof, You may choose to offer,
167+ and charge a fee for, acceptance of support, warranty, indemnity,
168+ or other liability obligations and/or rights consistent with this
169+ License. However, in accepting such obligations, You may act only
170+ on Your own behalf and on Your sole responsibility, not on behalf
171+ of any other Contributor, and only if You agree to indemnify,
172+ defend, and hold each Contributor harmless for any liability
173+ incurred by, or claims asserted against, such Contributor by reason
174+ of your accepting any such warranty or additional liability.
175+
176+ END OF TERMS AND CONDITIONS
177+
178+ APPENDIX: How to apply the Apache License to your work.
179+
180+ To apply the Apache License to your work, attach the following
181+ boilerplate notice, with the fields enclosed by brackets "[]"
182+ replaced with your own identifying information. (Don't include
183+ the brackets!) The text should be enclosed in the appropriate
184+ comment syntax for the file format. We also recommend that a
185+ file or class name and description of purpose be included on the
186+ same "printed page" as the copyright notice for easier
187+ identification within third-party archives.
188+
189+ Copyright 2019 Input Output HK Ltd.
190+
191+ Licensed under the Apache License, Version 2.0 (the "License");
192+ you may not use this file except in compliance with the License.
193+ You may obtain a copy of the License at
194+
195+ http://www.apache.org/licenses/LICENSE-2.0
196+
197+ Unless required by applicable law or agreed to in writing, software
198+ distributed under the License is distributed on an "AS IS" BASIS,
199+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200+ See the License for the specific language governing permissions and
201+ limitations under the License.
README.mdnew file+55
@@ -0,0 +1,55 @@
1+# What is this fork?
2+
3+This fork contains a patched version of GHCJS 8.10 which improves performance and memory usage.
4+
5+For more info see this PR: https://github.com/input-output-hk/haskell.nix/pull/1306
6+
7+## Package versions
8+
9+This branch is updated every day with commits from https://github.com/input-output-hk/haskell.nix/tree/master. This means that it receives all of the updates the initial project does.
10+
11+## Caching
12+
13+Building the patched compiler itself takes around 2-3 hours. The [Typeable](https://typeable.io) public nix cache probably has a cached version of the compiler. You can follow these instruction to set it up: [app.cachix.org/organization/typeable/cache/typeable](https://app.cachix.org/organization/typeable/cache/typeable).
14+
15+---
16+
17+# `haskell.nix` is infrastructure for building Haskell packages with Nix
18+
19+[![](https://badge.buildkite.com/d453edcd29bd2f8f3f3b32c9b7d6777a33773d9671c37a6ccc.svg?branch=master)](https://buildkite.com/input-output-hk/haskell-dot-nix)
20+[![](https://img.shields.io/buildkite/c8d5a20d3ff0f440f82adb9190b43c16c91e5e47e8adfa867a/master.svg?label=nightly%20updates)](https://buildkite.com/input-output-hk/haskell-dot-nix-nightly-updates)
21+
22+`haskell.nix` can automatically translate your Cabal or Stack project and
23+its dependencies into Nix code.
24+
25+## Documentation
26+
27+- [Introduction](https://input-output-hk.github.io/haskell.nix/index.html)
28+- [Getting Started](https://input-output-hk.github.io/haskell.nix/tutorials/getting-started.html)
29+- [Troubleshooting](https://input-output-hk.github.io/haskell.nix/troubleshooting.html)
30+- Explore the documentation from there to find further topics.
31+
32+## Help! Something isn't working
33+
34+The #1 problem that people have when using `haskell.nix` is that they find themselves building GHC.
35+This should not happen, but you *must* follow the `haskell.nix` setup instructions properly to avoid it.
36+If you find this happening to you, please check that you have followed the
37+[getting started instructions](https://input-output-hk.github.io/haskell.nix/tutorials/getting-started.html#setting-up-the-binary-cache) and
38+consult the corresponding [troubleshooting section](https://input-output-hk.github.io/haskell.nix/troubleshooting.html#why-am-i-building-ghc).
39+
40+The troubleshooting documentation also contains some help for other common issues.
41+Please give it a read before asking on IRC or opening an issue.
42+
43+If you're still stuck, join the [#haskell.nix](https://www.irccloud.com/invite?channel=%23haskell.nix&hostname=irc.libera.chat&port=6697&ssl=1) channel on [irc.libera.chat](https://libera.chat/), or open an issue.
44+
45+## Related repos
46+
47+The `haskell.nix` repository contains the runtime system for building
48+Haskell packages in Nix. It depends on other repos, which are:
49+
50+- [`nix-tools`](https://github.com/input-output-hk/nix-tools) — provides the programs for generating Nix expressions from Haskell projects.
51+
52+- [`hackage.nix`](https://github.com/input-output-hk/hackage.nix) — the latest contents of the [Hackage](https://hackage.haskell.org/) databases, converted to Nix expressions.
53+
54+- [`stackage.nix`](https://github.com/input-output-hk/stackage.nix) — all of the [Stackage](https://www.stackage.org/) snapshots, converted to Nix expressions.
55+
bors.tomlnew file+8
@@ -0,0 +1,8 @@
1+status = [
2+ "buildkite/haskell-dot-nix",
3+ "ci/hydra:Cardano:haskell-nix:required",
4+]
5+timeout_sec = 7200
6+required_approvals = 1
7+block_labels = [ "WIP", "DO NOT MERGE" ]
8+delete_merged_branches = true
build.nixnew file+101
@@ -0,0 +1,101 @@
1+# This file contains the package set used by the release.nix jobset.
2+#
3+# It is separate from default.nix because that file is the public API
4+# of Haskell.nix, which shouldn't have tests, etc.
5+let
6+ haskellNix = (import ./default.nix {});
7+in
8+{ nixpkgs ? haskellNix.sources.nixpkgs-2111
9+, nixpkgsArgs ? haskellNix.nixpkgsArgs
10+, pkgs ? import nixpkgs nixpkgsArgs
11+, evalPackages ? import nixpkgs nixpkgsArgs
12+, nixpkgsForHydra ? haskellNix.sources.nixpkgs-2105
13+, pkgsForHydra ? import nixpkgsForHydra (nixpkgsArgs // { inherit (pkgs) system; })
14+, ifdLevel ? 1000
15+, compiler-nix-name ? throw "No `compiler-nix-name` passed to build.nix"
16+}:
17+
18+let
19+ haskell = pkgs.haskell-nix;
20+ buildHaskell = pkgs.buildPackages.haskell-nix;
21+ tool = buildHaskell.tool;
22+in rec {
23+ tests = import ./test/default.nix { inherit pkgs evalPackages ifdLevel compiler-nix-name; };
24+
25+ tools = pkgs.lib.optionalAttrs (ifdLevel >= 3) (
26+ pkgs.recurseIntoAttrs ({
27+ cabal-latest = tool compiler-nix-name "cabal" { inherit evalPackages; };
28+ hlint-latest = tool compiler-nix-name "hlint" {
29+ inherit evalPackages;
30+ version = {
31+ "ghc865" = "3.2.8";
32+ "ghc882" = "3.3.6";
33+ "ghc883" = "3.3.6";
34+ "ghc884" = "3.3.6";
35+ }.compiler-nix-name or "latest";
36+ };
37+ } // pkgs.lib.optionalAttrs (!__elem compiler-nix-name ["ghc921" "ghc922" "ghc923" "ghc924"]) {
38+ hls-latest = tool compiler-nix-name "haskell-language-server" { inherit evalPackages; };
39+ })
40+ );
41+
42+ # Scripts for keeping Hackage and Stackage up to date, and CI tasks.
43+ # The dontRecurseIntoAttrs prevents these from building on hydra
44+ # as not all of them can work in restricted eval mode (as they
45+ # are not pure).
46+ maintainer-scripts = pkgs.dontRecurseIntoAttrs {
47+ update-hackage = import ./scripts/update-hackage.nix {
48+ inherit (pkgs) stdenv lib writeScript coreutils glibc git
49+ openssh nixFlakes gawk bash curl findutils;
50+ # Update scripts use the internal nix-tools and cabal-install (compiled with a fixed GHC version)
51+ nix-tools = haskell.internal-nix-tools;
52+ cabal-install = haskell.internal-cabal-install;
53+ inherit (haskell) update-index-state-hashes;
54+ };
55+ update-stackage = haskell.callPackage ./scripts/update-stackage.nix {
56+ inherit (pkgs) stdenv lib writeScript coreutils glibc git
57+ openssh nixFlakes gawk bash curl findutils;
58+ # Update scripts use the internal nix-tools and cabal-install (compiled with a fixed GHC version)
59+ nix-tools = haskell.internal-nix-tools;
60+ cabal-install = haskell.internal-cabal-install;
61+ };
62+ update-pins = haskell.callPackage ./scripts/update-pins.nix {};
63+ update-docs = pkgs.buildPackages.callPackage ./scripts/update-docs.nix {
64+ generatedOptions = pkgs.callPackage ./scripts/options-doc.nix { };
65+ };
66+ # Because this is going to be used to test caching on hydra, it must not
67+ # use the darcs package from the haskell.nix we are testing. For that reason
68+ # it uses `pkgs.buildPackages.callPackage` not `haskell.callPackage`
69+ # (We could pull in darcs from a known good haskell.nix for hydra to
70+ # use)
71+ check-hydra = pkgsForHydra.buildPackages.callPackage ./scripts/check-hydra.nix {};
72+ check-closure-size = pkgs.buildPackages.callPackage ./scripts/check-closure-size.nix {
73+ # Includes cabal-install since this is commonly used.
74+ nix-tools = pkgs.linkFarm "common-tools" [
75+ { name = "nix-tools"; path = haskell.nix-tools.${compiler-nix-name}; }
76+ { name = "cabal-install"; path = haskell.cabal-install.${compiler-nix-name}; }
77+ ];
78+ };
79+ check-materialization-concurrency = pkgs.buildPackages.callPackage ./scripts/check-materialization-concurrency/check.nix {};
80+ check-path-support = pkgs.buildPackages.callPackage ./scripts/check-path-support.nix {
81+ # TODO remove this when nixpkgs-2205 is released and used for `pkgs`
82+ # check-path-support fails unless we have nix 2.4 or newer.
83+ inherit (import haskellNix.sources.nixpkgs-unstable {}) nix;
84+ };
85+ };
86+
87+ # These are pure parts of maintainer-script so they can be built by hydra
88+ # and added to the cache to speed up buildkite.
89+ maintainer-script-cache = pkgs.recurseIntoAttrs (
90+ (pkgs.lib.optionalAttrs (pkgsForHydra.system == "x86_64-linux") {
91+ inherit (maintainer-scripts) check-hydra;
92+ })
93+ // (pkgs.lib.optionalAttrs (ifdLevel > 2) {
94+ inherit (maintainer-scripts) update-docs check-closure-size;
95+ # Some of the dependencies of the impure scripts so that they will
96+ # will be in the cache too for buildkite.
97+ inherit (pkgs.buildPackages) glibc coreutils git openssh cabal-install nix-prefetch-git;
98+ inherit (haskell) nix-tools;
99+ })
100+ );
101+}
builder/Setup.ghcjs.hsnew file+272
@@ -0,0 +1,272 @@
1+{-# language LambdaCase #-}
2+import Distribution.Simple
3+import Distribution.Simple.Setup
4+import Distribution.Types.PackageDescription
5+import Distribution.Types.LocalBuildInfo
6+import Distribution.Simple.PackageIndex
7+import Distribution.Types.InstalledPackageInfo hiding (includeDirs)
8+import qualified Distribution.Types.InstalledPackageInfo as IPI
9+import Distribution.Types.PackageName
10+import System.FilePath
11+import Control.Monad (filterM, forM_, forM, unless)
12+import System.Directory (doesFileExist)
13+import Distribution.Types.Library (libBuildInfo, Library(..))
14+import Distribution.Types.BuildInfo (cSources, jsSources, includeDirs, emptyBuildInfo, options, extraBundledLibs)
15+import Distribution.Simple.BuildTarget (readBuildTargets, BuildTarget(..), readUserBuildTargets)
16+import Distribution.Verbosity (silent, verbose)
17+import Distribution.Types.ComponentName
18+import Distribution.Simple.Program.Types (programPath)
19+import Distribution.Simple.Program.Db (lookupKnownProgram, lookupProgram, knownPrograms)
20+import Distribution.Simple.Program (Program, gccProgram, arProgram, runDbProgram, simpleProgram, ghcProgram)
21+import Distribution.Simple.Utils (createDirectoryIfMissingVerbose)
22+import Distribution.Types.HookedBuildInfo
23+import Data.List (isPrefixOf, isSuffixOf, intercalate)
24+import System.Environment (getArgs, getProgName)
25+import Distribution.Simple.LocalBuildInfo (Component (..), withAllComponentsInBuildOrder, componentBuildDir)
26+import Distribution.Types.TestSuite (TestSuite(..))
27+import Distribution.Types.TestSuiteInterface (TestSuiteInterface(..) )
28+import Distribution.Simple.Test.LibV09 (stubName)
29+import Distribution.Types.Executable (exeName, Executable(..))
30+import Distribution.Types.Benchmark (Benchmark(..))
31+import Distribution.Types.TestSuite (TestSuite(..))
32+import Distribution.Types.UnqualComponentName (unUnqualComponentName, mkUnqualComponentName)
33+
34+
35+emarProgram :: Program
36+emarProgram = simpleProgram "emar"
37+
38+buildEMCCLib :: PackageDescription -> LocalBuildInfo -> IO ()
39+buildEMCCLib desc lbi = do
40+ let verbosity = verbose
41+ -- get build dir
42+ createDirectoryIfMissingVerbose verbosity True ((buildDir lbi) </> "emcc")
43+ --
44+ case library desc of
45+ Just lib -> do
46+ -- Let's see if we are going to export anything. If not there is likely no point in compiling anything
47+ -- from the C code.
48+ names <- forM (jsSources . libBuildInfo $ lib) $ \src -> do
49+ unwords . concatMap (drop 2 . words) . filter (isPrefixOf "// EMCC:EXPORTED_FUNCTIONS") . lines <$> readFile src
50+
51+ unless (null names) $ do
52+ let depIncludeDirs = concatMap IPI.includeDirs (topologicalOrder $ installedPkgs lbi)
53+ -- alright, let's compile all .c files into .o files with emcc, which is the `gcc` program.
54+ forM_ (cSources . libBuildInfo $ lib) $ \src -> do
55+ let dst = (buildDir lbi) </> "emcc" </> (src -<.> "o")
56+ createDirectoryIfMissingVerbose verbosity True (takeDirectory dst)
57+ runDbProgram verbosity gccProgram (withPrograms lbi) $
58+ ["-c", src, "-o", dst] ++ ["-I" <> incDir | incDir <- (includeDirs . libBuildInfo $ lib) ++ depIncludeDirs]
59+
60+ -- and now construct a canonical `.js_a` file, *if* we have any cSources we turned into objects.
61+ unless (null . cSources . libBuildInfo $ lib) $ do
62+ let dstLib = (buildDir lbi) </> "libEMCC" <> (unPackageName . pkgName . package $ desc) <> ".js_a"
63+ runDbProgram verbosity emarProgram (withPrograms lbi) $
64+ [ "-r", dstLib ] ++ [ (buildDir lbi) </> "emcc" </> (src -<.> "o") | src <- cSources . libBuildInfo $ lib ]
65+
66+ let expLib = (buildDir lbi) </> "libEMCC" <> (unPackageName . pkgName . package $ desc) <> ".exported.js_a"
67+ writeFile expLib (unwords names)
68+
69+ -- if there's no lib, this is a fairly pointless exercise
70+ Nothing -> return ()
71+
72+-- This is here so that we can link multiple libEMCC* libraries fromd ependencies together with emcc.
73+-- however we don't have figured out how to get the EXPORTED_FUNCTIONS from each dependency merged yet.
74+--
75+linkEMCCLib :: PackageDescription -> LocalBuildInfo -> IO ()
76+linkEMCCLib desc lbi = linkCLib ("emcc" </> "lib.js") desc lbi
77+
78+linkEMCCTHLib :: PackageDescription -> LocalBuildInfo -> IO ()
79+linkEMCCTHLib desc lbi = linkCLib ("th-support.js") desc lbi
80+
81+linkCLib :: String -> PackageDescription -> LocalBuildInfo -> IO ()
82+linkCLib libname desc lbi = do
83+ withAllComponentsInBuildOrder desc lbi $ \comp clbi -> do
84+ let extraLibs = [ "-l" <> l | l <- concatMap IPI.extraLibraries (topologicalOrder $ installedPkgs lbi)
85+ , l /= "m"
86+ , l /= "dl" ]
87+ libDirs = [ "-L" <> path | path <- concatMap IPI.libraryDirs (topologicalOrder $ installedPkgs lbi) ]
88+
89+ let verbosity = verbose
90+ libs <- filterM doesFileExist $
91+ concatMap (\x -> [ libDir </> "libEMCC" <> (unPackageName . pkgName . sourcePackageId $ x) <> ".js_a"
92+ | libDir <- libraryDirs x ])
93+ (topologicalOrder $ installedPkgs lbi)
94+ exff <- filterM doesFileExist $
95+ concatMap (\x -> [ libDir </> "libEMCC" <> (unPackageName . pkgName . sourcePackageId $ x) <> ".exported.js_a"
96+ | libDir <- libraryDirs x ])
97+ (topologicalOrder $ installedPkgs lbi)
98+ print exff
99+ exfns <- concat <$> forM exff (fmap words . readFile)
100+ unless (null libs && null exfns) $ do
101+ libs <- case libs of
102+ [] -> do writeFile (buildDir lbi </> "emcc_linking_dummy.c") ""
103+ runDbProgram verbosity gccProgram (withPrograms lbi) $
104+ ["-c", buildDir lbi </> "emcc_linking_dummy.c", "-o", buildDir lbi </> "emcc_linking_dummy.o"]
105+ return [(buildDir lbi </> "emcc_linking_dummy.o")]
106+ _ -> return libs
107+
108+ let dst = if libname == "emcc" </> "lib.js" then buildDir lbi
109+ -- who designed this shit in cabal?
110+ else case comp of
111+ (CTest test@(TestSuite { testInterface = TestSuiteLibV09 _ _ })) -> buildDir lbi </> stubName test </> stubName test ++ "-tmp"
112+ (CTest test@(TestSuite { testInterface = TestSuiteExeV10 _ _ })) -> buildDir lbi </> unUnqualComponentName (testName test) </> unUnqualComponentName (testName test) ++ "-tmp"
113+ (CExe exe) -> buildDir lbi </> unUnqualComponentName (exeName exe) </> unUnqualComponentName (exeName exe) ++ "-tmp"
114+ _ -> componentBuildDir lbi clbi
115+ dst' = dst </> libname
116+ createDirectoryIfMissingVerbose verbosity True (takeDirectory dst')
117+ runDbProgram verbosity gccProgram (withPrograms lbi) $
118+ [ "-o", dst'
119+ , "-s", "WASM=0"
120+ , "-s", "ALLOW_TABLE_GROWTH" -- we need this for addFunction/removeFunction
121+ -- addFunction, removeFunction are for dynamic functions.
122+ -- getTempRet0/setTempRet0 are for 64bit legalization.
123+ , "-s", "EXPORTED_RUNTIME_METHODS=['printErr','addFunction','removeFunction','getTempRet0','setTempRet0']"
124+ --
125+ , "-s", "EXPORTED_FUNCTIONS=['" <> intercalate "', '" exfns <> "']"
126+ ] ++ libs ++ libDirs ++ extraLibs
127+
128+postBuildHook :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
129+postBuildHook args flags desc lbi = do
130+ case (takeFileName . programPath <$> lookupProgram ghcProgram (withPrograms lbi)) of
131+ Just "js-unknown-ghcjs-ghc" ->
132+ readBuildTargets silent desc (buildArgs flags) >>= \case
133+ [BuildTargetComponent (CLibName _)] -> print "OK. Lib (Build)" >> buildEMCCLib desc lbi
134+ [BuildTargetComponent (CExeName _)] -> print "OK. Exe"
135+ [BuildTargetComponent (CTestName _)] -> print "OK. Test"
136+ [BuildTargetComponent (CBenchName _)] -> print "OK. Bench"
137+ _ -> print "EEk!"
138+ _ -> return ()
139+
140+postConfHook :: Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo -> IO ()
141+postConfHook args flags desc lbi = do
142+ case (takeFileName . programPath <$> lookupProgram ghcProgram (withPrograms lbi)) of
143+ Just "js-unknown-ghcjs-ghc" -> do
144+ -- always link the TH lib
145+ -- this is technically only needed if the package uses TH somewhere.
146+ linkEMCCTHLib desc lbi
147+ -- only link the final lib if we want to produce an output.
148+ readBuildTargets silent desc (configArgs flags) >>= \case
149+ [BuildTargetComponent (CLibName _)] -> print "OK. Lib" >> postConf simpleUserHooks args flags desc lbi
150+ [BuildTargetComponent (CExeName _)] -> print "OK. Exe (Link)" >> linkEMCCLib desc lbi
151+ [BuildTargetComponent (CTestName _)] -> print "OK. Test (Link)" >> linkEMCCLib desc lbi
152+ [BuildTargetComponent (CBenchName _)] -> print "OK. Bench (Link)" >> linkEMCCLib desc lbi
153+ _ -> print "EEk!"
154+ -- defer to default postConf. XXX we should do this for the above cases in linkEMCCLib as well!
155+ _ -> postConf simpleUserHooks args flags desc lbi
156+
157+--
158+-- Injecting emcc/lib.js as needed.
159+--
160+-- We inject jsSources: dist/build/emcc/lib.js, the amalgamated emcc library,
161+-- into Executables, Tests and Benchmarks.
162+emccBuildHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO ()
163+emccBuildHook desc lbi hooks flags = do
164+ let lbi' = lbi { localPkgDescr = updatePackageDescription (localPkgDescr lbi) }
165+ -- for some reason tests/benchmarks seem to rely on the description, whereas libraries and executables depend on the local build info...
166+ desc' = updatePackageDescription desc
167+ doesFileExist jsLib >>= \x -> print $ jsLib <> " " <> (if x then "exists" else "doesn't exist!")
168+ doesFileExist jsLib >>= \case
169+ True -> buildHook simpleUserHooks desc' lbi' hooks flags
170+ False -> buildHook simpleUserHooks desc lbi hooks flags
171+
172+ where
173+ jsLib = "dist/build" </> "emcc" </> "lib.js"
174+ extraOpts = PerCompilerFlavor [jsLib] []
175+ -- don't inject it for libraries, only for exe, test, bench.
176+ updateLibrary :: Library -> Library
177+ updateLibrary = id -- lib@Library{ libBuildInfo = bi } = lib { libBuildInfo = bi { options = options bi <> extraOpts } }
178+ updateExe :: Executable -> Executable
179+ updateExe exe@Executable{ buildInfo = bi } = exe { buildInfo = bi { options = options bi <> extraOpts } }
180+ updateTest :: TestSuite -> TestSuite
181+ updateTest test@TestSuite{ testBuildInfo = bi } = test { testBuildInfo = bi { options = options bi <> extraOpts } }
182+ updateBench :: Benchmark -> Benchmark
183+ updateBench bench@Benchmark{ benchmarkBuildInfo = bi } = bench { benchmarkBuildInfo = bi { options = options bi <> extraOpts } }
184+ updatePackageDescription :: PackageDescription -> PackageDescription
185+ updatePackageDescription desc = desc
186+ { library = updateLibrary <$> library desc
187+ , executables = updateExe <$> executables desc
188+ , testSuites = updateTest <$> testSuites desc
189+ , benchmarks = updateBench <$> benchmarks desc
190+ }
191+
192+--
193+-- Injecting EMCC<name> extra libraries as needed
194+-- this one we only need alongside library components; as it's shipped and installed
195+-- into the package databse. This is not necesary for executables/test/benchmarks, that
196+-- are not installed into the package database
197+--
198+emccCopyHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> CopyFlags -> IO ()
199+emccCopyHook desc lbi hooks flags = do
200+ emccLibs <- filterM (\l -> doesFileExist (buildDir lbi </> "lib" <> l <> ".js_a"))
201+ [ "EMCC" <> (unPackageName . pkgName . package $ desc)
202+ , "EMCC" <> (unPackageName . pkgName . package $ desc) <> ".exported" ]
203+ print $ "EMCC extra lib files: " ++ intercalate ", " emccLibs
204+ let lbi' = lbi { localPkgDescr = updatePackageDescription emccLibs (localPkgDescr lbi) }
205+ desc' = updatePackageDescription emccLibs desc
206+ copyHook simpleUserHooks desc' lbi' hooks flags
207+ where
208+ emccLib = (buildDir lbi) </> "libEMCC" <> (unPackageName . pkgName . package $ desc) <> ".js_a"
209+ -- don't inject it for libraries, only for exe, test, bench.
210+ updateLibrary :: [String] -> Library -> Library
211+ updateLibrary extraLibs lib@Library{ libBuildInfo = bi } = lib { libBuildInfo = bi { extraBundledLibs = extraBundledLibs bi <> extraLibs } }
212+ updatePackageDescription :: [String] -> PackageDescription -> PackageDescription
213+ updatePackageDescription extraLibs desc = desc { library = updateLibrary extraLibs <$> library desc }
214+
215+emccRegHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
216+emccRegHook desc lbi hooks flags = do
217+ emccLibs <- filterM (\l -> doesFileExist (buildDir lbi </> "lib" <> l <> ".js_a"))
218+ [ "EMCC" <> (unPackageName . pkgName . package $ desc)
219+ , "EMCC" <> (unPackageName . pkgName . package $ desc) <> ".exported" ]
220+ print $ "EMCC extra lib files: " ++ intercalate ", " emccLibs
221+ let lbi' = lbi { localPkgDescr = updatePackageDescription emccLibs (localPkgDescr lbi) }
222+ desc' = updatePackageDescription emccLibs desc
223+ regHook simpleUserHooks desc' lbi' hooks flags
224+ where
225+ emccLib = (buildDir lbi) </> "libEMCC" <> (unPackageName . pkgName . package $ desc) <> ".js_a"
226+ -- don't inject it for libraries, only for exe, test, bench.
227+ updateLibrary :: [String] -> Library -> Library
228+ updateLibrary extraLibs lib@Library{ libBuildInfo = bi } = lib { libBuildInfo = bi { extraBundledLibs = extraBundledLibs bi <> extraLibs } }
229+ updatePackageDescription :: [String] -> PackageDescription -> PackageDescription
230+ updatePackageDescription extraLibs desc = desc { library = updateLibrary extraLibs <$> library desc }
231+
232+emccUnregHook :: PackageDescription -> LocalBuildInfo -> UserHooks -> RegisterFlags -> IO ()
233+emccUnregHook desc lbi hooks flags = do
234+ emccLibs <- filterM (\l -> doesFileExist (buildDir lbi </> "lib" <> l <> ".js_a"))
235+ [ "EMCC" <> (unPackageName . pkgName . package $ desc)
236+ , "EMCC" <> (unPackageName . pkgName . package $ desc) <> ".exported" ]
237+ print $ "EMCC extra lib files: " ++ intercalate ", " emccLibs
238+ let lbi' = lbi { localPkgDescr = updatePackageDescription emccLibs (localPkgDescr lbi) }
239+ desc' = updatePackageDescription emccLibs desc
240+ unregHook simpleUserHooks desc' lbi' hooks flags
241+ where
242+ emccLib = (buildDir lbi) </> "libEMCC" <> (unPackageName . pkgName . package $ desc) <> ".js_a"
243+ -- don't inject it for libraries, only for exe, test, bench.
244+ updateLibrary :: [String] -> Library -> Library
245+ updateLibrary extraLibs lib@Library{ libBuildInfo = bi } = lib { libBuildInfo = bi { extraBundledLibs = extraBundledLibs bi <> extraLibs } }
246+ updatePackageDescription :: [String] -> PackageDescription -> PackageDescription
247+ updatePackageDescription extraLibs desc = desc { library = updateLibrary extraLibs <$> library desc }
248+--
249+-- Main
250+--
251+main :: IO ()
252+main = do
253+ args <- getArgs
254+ defaultMainWithHooksArgs emccHooks (injectEmar args)
255+ where
256+ injectEmar :: [String] -> [String]
257+ injectEmar [] = []
258+ injectEmar (x:xs) | "--with-gcc=" `isPrefixOf` x
259+ , "emcc" `isSuffixOf` x
260+ = x:("--with-emar="<> (takeDirectory $ drop 11 $ x) </> "emar"):injectEmar xs
261+ injectEmar (x:xs) = x:injectEmar xs
262+
263+ emccHooks :: UserHooks
264+ emccHooks = simpleUserHooks
265+ { postConf = postConfHook
266+ , buildHook = emccBuildHook
267+ , postBuild = postBuildHook
268+ , copyHook = emccCopyHook
269+ , regHook = emccRegHook
270+ , unregHook = emccUnregHook
271+ , hookedPrograms = [emarProgram]
272+ }
builder/Setup.hsnew file+2
@@ -0,0 +1,2 @@
1+import Distribution.Simple
2+main = defaultMain
builder/comp-builder.nixnew file+596
@@ -0,0 +1,596 @@
1+{ pkgs, stdenv, buildPackages, ghc, lib, gobject-introspection ? null, haskellLib, makeConfigFiles, haddockBuilder, ghcForComponent, hsPkgs, compiler, runCommand, libffi, gmp, zlib, ncurses, nodejs }@defaults:
2+lib.makeOverridable (
3+let self =
4+{ componentId
5+, component
6+, package
7+, name # This is the package name
8+, setup
9+, src
10+, flags
11+, revision
12+, cabalFile
13+, cabal-generator
14+, patches ? []
15+
16+, preUnpack ? component.preUnpack, postUnpack ? component.postUnpack
17+, configureFlags ? component.configureFlags
18+, preConfigure ? component.preConfigure, postConfigure ? component.postConfigure
19+, setupBuildFlags ? component.setupBuildFlags
20+, preBuild ? component.preBuild , postBuild ? component.postBuild
21+, preCheck ? component.preCheck , postCheck ? component.postCheck
22+, setupInstallFlags ? component.setupInstallFlags
23+, preInstall ? component.preInstall , postInstall ? component.postInstall
24+, preHaddock ? component.preHaddock , postHaddock ? component.postHaddock
25+, shellHook ? ""
26+, configureAllComponents ? component.configureAllComponents ||
27+ # When set, configure all the components in the package
28+ # (not just the one we are building).
29+ # Enable for tests in packages that use cabal-doctest.
30+ ( haskellLib.isTest componentId &&
31+ lib.any (x: x.identifier.name or "" == "cabal-doctest") package.setup-depends
32+ )
33+, allComponent # Used when `configureAllComponents` is set to get a suitable configuration.
34+
35+, build-tools ? component.build-tools
36+, pkgconfig ? component.pkgconfig
37+, platforms ? component.platforms
38+, frameworks ? component.frameworks
39+
40+, dontPatchELF ? component.dontPatchELF
41+, dontStrip ? component.dontStrip
42+, hardeningDisable ? component.hardeningDisable
43+
44+, enableStatic ? component.enableStatic
45+, enableShared ? ghc.enableShared && component.enableShared && !haskellLib.isCrossHost
46+ # on x86 we'll use shared libraries, even with musl m(
47+ # ghc's internal linker seems to be broken on x86.
48+ && !(stdenv.hostPlatform.isMusl && !stdenv.hostPlatform.isx86)
49+, enableDeadCodeElimination ? component.enableDeadCodeElimination
50+, writeHieFiles ? component.writeHieFiles
51+
52+, ghcOptions ? component.ghcOptions
53+, contentAddressed ? component.contentAddressed
54+
55+# Options for Haddock generation
56+, doHaddock ? component.doHaddock # Enable haddock and hoogle generation
57+, doHoogle ? component.doHoogle # Also build a hoogle index
58+, hyperlinkSource ? component.doHyperlinkSource # Link documentation to the source code
59+, quickjump ? component.doQuickjump # Generate an index for interactive documentation navigation
60+, keepSource ? component.keepSource || configureAllComponents # Build from `source` output in the store then delete `dist`
61+, setupHaddockFlags ? component.setupHaddockFlags
62+
63+# Profiling
64+, enableLibraryProfiling ? component.enableLibraryProfiling
65+, enableProfiling ? component.enableProfiling
66+, profilingDetail ? component.profilingDetail
67+
68+# Coverage
69+, doCoverage ? component.doCoverage
70+
71+# Data
72+, enableSeparateDataOutput ? component.enableSeparateDataOutput
73+
74+# Prelinked ghci libraries; will make iserv faster; especially for static builds.
75+, enableLibraryForGhci ? true
76+
77+# Debug
78+, enableDebugRTS ? false
79+, enableDWARF ? false
80+
81+# This will only work with a custom TSan way enabled custom compiler
82+, enableTSanRTS ? false
83+
84+# LLVM
85+, useLLVM ? ghc.useLLVM
86+, smallAddressSpace ? false
87+
88+}@drvArgs:
89+
90+let
91+ componentForSetup =
92+ if configureAllComponents
93+ then allComponent
94+ else component;
95+
96+ # Ignore attempts to include DWARF info when it is not possible
97+ enableDWARF = drvArgs.enableDWARF or false
98+ && stdenv.hostPlatform.isLinux
99+ && !haskellLib.isCrossHost
100+ && !stdenv.hostPlatform.isMusl
101+ && builtins.compareVersions defaults.ghc.version "8.10.2" >= 0;
102+
103+ ghc = (if enableDWARF then (x: x.dwarf) else (x: x)) (
104+ (if smallAddressSpace then (x: x.smallAddressSpace) else (x: x)) defaults.ghc);
105+ setup = (if enableDWARF then (x: x.dwarf) else (x: x)) (
106+ (if smallAddressSpace then (x: x.smallAddressSpace) else (x: x)) drvArgs.setup);
107+
108+ # TODO fix cabal wildcard support so hpack wildcards can be mapped to cabal wildcards
109+ canCleanSource = !(cabal-generator == "hpack" && !(package.cleanHpack or false));
110+ # In order to support relative references to other packages we need to use
111+ # the `origSrc` diretory as the root `src` for the derivation.
112+ # We use `rootAndSubDir` here to split the cleaned source into a `cleanSrc.root`
113+ # path (that respects the filtering) and a `cleanSrc.subDir` that
114+ # is the sub directory in that root path that contains the package.
115+ # `cleanSrc.subDir` is used in `prePatch` and `lib/cover.nix`.
116+ cleanSrc = haskellLib.rootAndSubDir (if canCleanSource
117+ then haskellLib.cleanCabalComponent package componentForSetup "${componentId.ctype}-${componentId.cname}" src
118+ else
119+ # We can clean out the siblings though to at least avoid changes to other packages
120+ # from triggering a rebuild of this one.
121+ # Passing `subDir` but not `includeSiblings = true;` will exclude anything not
122+ # in the `subDir`.
123+ if src ? origSrc && src ? filter && src.origSubDir or "" != ""
124+ then haskellLib.cleanSourceWith {
125+ name = src.name or "source";
126+ src = src.origSrc;
127+ subDir = lib.removePrefix "/" src.origSubDir;
128+ inherit (src) filter;
129+ }
130+ else src);
131+
132+ nameOnly = "${package.identifier.name}-${componentId.ctype}-${componentId.cname}";
133+
134+ fullName = "${nameOnly}-${package.identifier.version}";
135+
136+ needsProfiling = enableProfiling || enableLibraryProfiling;
137+
138+ configFiles = makeConfigFiles {
139+ component = componentForSetup;
140+ inherit (package) identifier;
141+ inherit fullName flags needsProfiling enableDWARF;
142+ };
143+
144+ enableFeature = enable: feature:
145+ (if enable then "--enable-" else "--disable-") + feature;
146+
147+ disableFeature = disable: enableFeature (!disable);
148+
149+ finalConfigureFlags = lib.concatStringsSep " " (
150+ [ "--prefix=$out"
151+ ] ++
152+ # We don't specify this in 'commonConfigureFlags', as these are also
153+ # used by haddock-builder.nix. If we do specify these options in
154+ # commonConfigureFlags, then the haddock-builder will fail, because it
155+ # sets its own outputs which *don't* include $hie
156+ lib.optionals writeHieFiles [
157+ "--ghc-option=-fwrite-ide-info" "--ghc-option=-hiedir$hie"
158+ ] ++
159+ (
160+ # If configureAllComponents is set we should not specify the component
161+ # and Setup will attempt to configure them all.
162+ if configureAllComponents
163+ then ["--enable-tests" "--enable-benchmarks"]
164+ else ["${haskellLib.componentTarget componentId}"]
165+ ) ++ [ "$(cat ${configFiles}/configure-flags)"
166+ ] ++ commonConfigureFlags);
167+
168+ # From nixpkgs 20.09, the pkg-config exe has a prefix matching the ghc one
169+ pkgConfigHasPrefix = builtins.compareVersions lib.version "20.09pre" >= 0;
170+
171+ commonConfigureFlags = ([
172+ # GHC
173+ "--with-ghc=${ghc.targetPrefix}ghc"
174+ "--with-ghc-pkg=${ghc.targetPrefix}ghc-pkg"
175+ "--with-hsc2hs=${ghc.targetPrefix}hsc2hs"
176+ ] ++ lib.optional (pkgConfigHasPrefix && pkgconfig != [])
177+ "--with-pkg-config=${ghc.targetPrefix}pkg-config"
178+ ++ lib.optionals (stdenv.hasCC or (stdenv.cc != null))
179+ ( # CC
180+ [ "--with-gcc=${stdenv.cc.targetPrefix}cc"
181+ ] ++
182+ # BINTOOLS
183+ (if stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid # might be better check to see if cc is clang/llvm?
184+ # use gold as the linker on linux to improve link times
185+ then [
186+ "--with-ld=${stdenv.cc.bintools.targetPrefix}ld.gold"
187+ "--ghc-option=-optl-fuse-ld=gold"
188+ "--ld-option=-fuse-ld=gold"
189+ ] else [
190+ "--with-ld=${stdenv.cc.bintools.targetPrefix}ld"
191+ ]
192+ ) ++ [
193+ "--with-ar=${stdenv.cc.bintools.targetPrefix}ar"
194+ "--with-strip=${stdenv.cc.bintools.targetPrefix}strip"
195+ ]
196+ ) ++ [ # other flags
197+ (disableFeature dontStrip "executable-stripping")
198+ (disableFeature dontStrip "library-stripping")
199+ (enableFeature enableLibraryProfiling "library-profiling")
200+ (enableFeature enableProfiling "profiling")
201+ (enableFeature enableStatic "static")
202+ (enableFeature enableShared "shared")
203+ (enableFeature doCoverage "coverage")
204+ (enableFeature enableLibraryForGhci "library-for-ghci")
205+ ] ++ lib.optionals (stdenv.hostPlatform.isMusl && (haskellLib.isExecutableType componentId)) [
206+ # These flags will make sure the resulting executable is statically linked.
207+ # If it uses other libraries it may be necessary for to add more
208+ # `--ghc-option=-optl=-L` options to the `configureFlags` of the
209+ # component.
210+ "--disable-executable-dynamic"
211+ "--ghc-option=-optl=-pthread"
212+ "--ghc-option=-optl=-static"
213+ ] ++ lib.optional enableSeparateDataOutput "--datadir=$data/share/${ghc.name}"
214+ ++ lib.optional (enableLibraryProfiling || enableProfiling) "--profiling-detail=${profilingDetail}"
215+ ++ lib.optional stdenv.hostPlatform.isLinux (enableFeature enableDeadCodeElimination "split-sections")
216+ ++ lib.optionals haskellLib.isCrossHost (
217+ map (arg: "--hsc2hs-option=" + arg) (["--cross-compile"] ++ lib.optionals (stdenv.hostPlatform.isWindows) ["--via-asm"])
218+ ++ lib.optional (package.buildType == "Configure") "--configure-option=--host=${stdenv.hostPlatform.config}" )
219+ ++ configureFlags
220+ ++ (ghc.extraConfigureFlags or [])
221+ ++ lib.optional enableDebugRTS "--ghc-option=-debug"
222+ ++ lib.optional enableTSanRTS "--ghc-option=-tsan"
223+ ++ lib.optional enableDWARF "--ghc-option=-g3"
224+ ++ lib.optionals useLLVM [
225+ "--ghc-option=-fPIC" "--gcc-option=-fPIC"
226+ ]
227+ ++ map (o: ''--ghc${lib.optionalString (stdenv.hostPlatform.isGhcjs) "js"}-options="${o}"'') ghcOptions
228+ ++ lib.optional (
229+ # GHC 9.2 cross compiler built with older versions of GHC seem to have problems
230+ # with unique conters. Perhaps because the name changed for the counters.
231+ # TODO This work around to use `-j1` should be removed once we are able to build 9.2 with 9.2.
232+ haskellLib.isCrossHost
233+ && builtins.compareVersions defaults.ghc.version "9.2.1" >= 0
234+ && builtins.compareVersions defaults.ghc.version "9.3" < 0)
235+ "--ghc-options=-j1"
236+ );
237+
238+ executableToolDepends =
239+ (lib.concatMap (c: if c.isHaskell or false
240+ then builtins.attrValues (c.components.exes or {})
241+ else [c]) build-tools) ++
242+ lib.optional (pkgconfig != []) buildPackages.pkgconfig;
243+
244+ # Unfortunately, we need to wrap ghc commands for cabal builds to
245+ # work in the nix-shell. See ../doc/removing-with-package-wrapper.md.
246+ shellWrappers = ghcForComponent {
247+ componentName = fullName;
248+ inherit configFiles enableDWARF;
249+ inherit (component) plugins;
250+ };
251+
252+ # In order to let shell hooks make package-specific things like Hoogle databases
253+ shellHookApplied = if builtins.isString shellHook then shellHook else
254+ if builtins.isFunction shellHook then shellHook { inherit package shellWrappers; }
255+ else abort "shellHook should be a string or a function";
256+
257+ exeExt = if stdenv.hostPlatform.isGhcjs then ".jsexe/all.js" else
258+ stdenv.hostPlatform.extensions.executable;
259+ exeName = componentId.cname + exeExt;
260+ testExecutable = "dist/build/${componentId.cname}/${exeName}";
261+
262+ # Attributes that are common to both the build and haddock derivations
263+ commonAttrs = {
264+ src = cleanSrc.root;
265+
266+ LANG = "en_US.UTF-8"; # GHC needs the locale configured during the Haddock phase.
267+ LC_ALL = "en_US.UTF-8";
268+
269+ enableParallelBuilding = true;
270+
271+ SETUP_HS = setup + /bin/Setup;
272+
273+ prePatch =
274+ # If the package is in a sub directory `cd` there first.
275+ # In some cases the `cleanSrc.subDir` will be empty and the `.cabal`
276+ # file will be in the root of `src` (`cleanSrc.root`). This
277+ # will happen when:
278+ # * the .cabal file is in the projects `src.origSrc or src`
279+ # * the package src was overridden with a value that does not
280+ # include an `origSubDir`
281+ (lib.optionalString (cleanSrc.subDir != "") ''
282+ cd ${lib.removePrefix "/" cleanSrc.subDir}
283+ ''
284+ ) +
285+ (if cabalFile != null
286+ then ''cat ${cabalFile} > ${package.identifier.name}.cabal''
287+ else
288+ # When building hpack package we use the internal nix-tools
289+ # (compiled with a fixed GHC version)
290+ lib.optionalString (cabal-generator == "hpack") ''
291+ ${buildPackages.haskell-nix.internal-nix-tools}/bin/hpack
292+ ''
293+ );
294+ }
295+ # patches can (if they like) depend on the version and revision of the package.
296+ // lib.optionalAttrs (patches != []) {
297+ patches = map (p:
298+ if builtins.isFunction p
299+ then p { inherit (package.identifier) version; inherit revision; }
300+ else p
301+ ) patches;
302+ }
303+ // haskellLib.optionalHooks {
304+ # These are hooks are needed to set up the source for building and running haddock
305+ inherit preUnpack postUnpack preConfigure postConfigure;
306+ }
307+ // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") {
308+ LOCALE_ARCHIVE = "${buildPackages.glibcLocales}/lib/locale/locale-archive";
309+ };
310+
311+ haddock = haddockBuilder {
312+ inherit componentId component package flags commonConfigureFlags
313+ commonAttrs revision doHaddock
314+ doHoogle hyperlinkSource quickjump setupHaddockFlags
315+ needsProfiling configFiles preHaddock postHaddock pkgconfig;
316+
317+ componentDrv = drv;
318+ };
319+
320+ contentAddressedAttrs = lib.optionalAttrs contentAddressed {
321+ __contentAddressed = true;
322+ outputHashMode = "recursive";
323+ outputHashAlgo = "sha256";
324+ };
325+
326+ drv = stdenv.mkDerivation (commonAttrs // contentAddressedAttrs // {
327+ pname = nameOnly;
328+ inherit (package.identifier) version;
329+
330+ doCheck = false;
331+ doCrossCheck = false;
332+
333+ inherit dontPatchELF dontStrip;
334+
335+ passthru = {
336+ inherit (package) identifier;
337+ config = component;
338+ srcSubDir = cleanSrc.subDir;
339+ srcSubDirPath = cleanSrc.root + cleanSrc.subDir;
340+ inherit configFiles executableToolDepends exeName enableDWARF;
341+ exePath = drv + "/bin/${exeName}";
342+ env = shellWrappers;
343+ profiled = self (drvArgs // { enableLibraryProfiling = true; });
344+ dwarf = self (drvArgs // { enableDWARF = true; });
345+ } // lib.optionalAttrs (haskellLib.isLibrary componentId) ({
346+ inherit haddock;
347+ inherit (haddock) haddockDir; # This is null if `doHaddock = false`
348+ } // lib.optionalAttrs (haddock ? doc) {
349+ # `doHaddock = false` turns the doc of haddock output off
350+ inherit (haddock) doc;
351+ }
352+ );
353+
354+ meta = {
355+ homepage = package.homepage or "";
356+ description = package.synopsis or "";
357+ license = haskellLib.cabalToNixpkgsLicense package.license;
358+ platforms = if platforms == null then lib.platforms.all else platforms;
359+ } // lib.optionalAttrs (haskellLib.isExecutableType componentId) {
360+ # Set main executable name for executable components, so that `nix run` in
361+ # nix flakes will work correctly. When not set, `nix run` would (typically
362+ # erroneously) deduce the executable name from the derivation name and
363+ # attempt to run, for example,
364+ # `/nix/store/...-project-exe-app-0.1.0.0/bin/project-exe-app` instead of
365+ # `/nix/store/...-project-exe-app-0.1.0.0/bin/app`.
366+ mainProgram = exeName;
367+ };
368+
369+ propagatedBuildInputs =
370+ frameworks # Frameworks will be needed at link time
371+ # Not sure why pkgconfig needs to be propagatedBuildInputs but
372+ # for gi-gtk-hs it seems to help.
373+ ++ builtins.concatLists pkgconfig
374+ ++ lib.optionals (stdenv.hostPlatform.isWindows)
375+ (lib.flatten component.libs
376+ ++ map haskellLib.dependToLib component.depends);
377+
378+ buildInputs = lib.optionals (!stdenv.hostPlatform.isWindows)
379+ (lib.flatten component.libs
380+ ++ map haskellLib.dependToLib component.depends);
381+
382+ nativeBuildInputs =
383+ [shellWrappers buildPackages.removeReferencesTo]
384+ ++ executableToolDepends;
385+
386+ outputs = ["out" ]
387+ ++ (lib.optional enableSeparateDataOutput "data")
388+ ++ (lib.optional keepSource "source")
389+ ++ (lib.optional writeHieFiles "hie");
390+
391+ prePatch =
392+ # emcc is very slow if it cannot cache stuff in $HOME
393+ (lib.optionalString (stdenv.hostPlatform.isGhcjs) ''
394+ export HOME=$(mktemp -d)
395+ '') +
396+ (lib.optionalString (!canCleanSource) ''
397+ echo "Cleaning component source not supported, leaving it un-cleaned"
398+ '') +
399+ (lib.optionalString keepSource ''
400+ cp -r . $source
401+ cd $source
402+ chmod -R +w .
403+ '') + commonAttrs.prePatch;
404+
405+ configurePhase = ''
406+ runHook preConfigure
407+ echo Configure flags:
408+ printf "%q " ${finalConfigureFlags}
409+ echo
410+ $SETUP_HS configure ${finalConfigureFlags}
411+ runHook postConfigure
412+ '';
413+
414+ buildPhase =
415+ # It seems that by the time the iserv wrapper specifiec by `--ghc-option=-pgmi` runs
416+ # all the array environment variables are removed from the environment. To get a list
417+ # of all the locations a DLLs might be present we need access to pkgsHostTarget.
418+ # Adding a string version of the list array of nix store paths allows us to get that
419+ # list when we need it.
420+ (lib.optionalString stdenv.hostPlatform.isWindows ''
421+ export pkgsHostTargetAsString="''${pkgsHostTarget[@]}"
422+ '') +
423+ # The following could be refactored but would lead to many rebuilds
424+
425+ # In case of content addressed components we need avoid parallel building (passing -j1)
426+ # in order to have a deterministic output and therefore avoid potential situations
427+ # where the binary cache becomes useless
428+ # See also https://gitlab.haskell.org/ghc/ghc/-/issues/12935
429+ (if contentAddressed then ''
430+ runHook preBuild
431+ $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " setupBuildFlags}
432+ runHook postBuild
433+ '' else if stdenv.hostPlatform.isGhcjs then ''
434+ runHook preBuild
435+ # https://gitlab.haskell.org/ghc/ghc/issues/9221
436+ $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " setupBuildFlags}
437+ runHook postBuild
438+ '' else ''
439+ runHook preBuild
440+ # https://gitlab.haskell.org/ghc/ghc/issues/9221
441+ $SETUP_HS build ${haskellLib.componentTarget componentId} -j$(($NIX_BUILD_CORES > 4 ? 4 : $NIX_BUILD_CORES)) ${lib.concatStringsSep " " setupBuildFlags}
442+ runHook postBuild
443+ '');
444+
445+ # Note: Cabal does *not* copy test executables during the `install` phase.
446+ #
447+ # Note 2: if a package contains multiple libs (lib + sublibs) SETUP register will generate a
448+ # folder instead of a file for the configuration. Therefore if the result is a folder,
449+ # we need to register each and every element of that folder.
450+ #
451+ # Note 3: if a package has no libs SETUP will not generate anything. This can
452+ # happen when building the `all` component of a package.
453+ installPhase = let
454+ target-pkg-and-db = "${ghc.targetPrefix}ghc-pkg -v0 --package-db $out/package.conf.d";
455+ in ''
456+ runHook preInstall
457+ $SETUP_HS copy ${lib.concatStringsSep " " (
458+ setupInstallFlags
459+ ++ lib.optional configureAllComponents
460+ (haskellLib.componentTarget componentId)
461+ )}
462+ ${lib.optionalString (haskellLib.isLibrary componentId) ''
463+ $SETUP_HS register --gen-pkg-config=${name}.conf
464+ ${ghc.targetPrefix}ghc-pkg -v0 init $out/package.conf.d
465+ ${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/${configFiles.packageCfgDir} -f $out/package.conf.d register ${name}.conf
466+
467+ mkdir -p $out/exactDep
468+ touch $out/exactDep/configure-flags
469+ touch $out/exactDep/cabal.config
470+ touch $out/envDep
471+
472+ ${ # The main library in a package has the same name as the package
473+ if package.identifier.name == componentId.cname
474+ then ''
475+ if id=$(${target-pkg-and-db} field ${package.identifier.name} id --simple-output); then
476+ echo "--dependency=${package.identifier.name}=$id" >> $out/exactDep/configure-flags
477+ echo "package-id $id" >> $out/envDep
478+ else
479+ echo 'ERROR: ${package.identifier.name} id could not be found with ${target-pkg-and-db}'
480+ exit 1
481+ fi
482+ if ver=$(${target-pkg-and-db} field ${package.identifier.name} version --simple-output); then
483+ echo "constraint: ${package.identifier.name} == $ver" >> $out/exactDep/cabal.config
484+ echo "constraint: ${package.identifier.name} installed" >> $out/exactDep/cabal.config
485+ else
486+ echo 'ERROR: ${package.identifier.name} version could not be found with ${target-pkg-and-db}'
487+ exit 1
488+ fi
489+ ''
490+ else
491+ # If the component name is not the package name this must be a sublib.
492+ # As we build sublibs separately, the following query should be safe.
493+ (''
494+ if id=$(${target-pkg-and-db} field "z-${package.identifier.name}-z-*" id --simple-output); then
495+ name=$(${target-pkg-and-db} field "z-${package.identifier.name}-z-*" name --simple-output)
496+ echo "--dependency=''${name#z-${package.identifier.name}-z-}=$id" >> $out/exactDep/configure-flags
497+ ''
498+ # Allow `package-name:sublib-name` to work in `build-depends`
499+ # by adding the same `--dependency` again, but with the package
500+ # name added.
501+ + ''
502+ echo "--dependency=${package.identifier.name}:''${name#z-${package.identifier.name}-z-}=$id" >> $out/exactDep/configure-flags
503+ else
504+ echo 'ERROR: ${package.identifier.name} id could not be found with ${target-pkg-and-db}'
505+ exit 1
506+ fi
507+ '')
508+ }
509+ ''}
510+ ${(lib.optionalString (haskellLib.isTest componentId || haskellLib.isBenchmark componentId) ''
511+ mkdir -p $out/bin
512+ if [ -f ${testExecutable} ]; then
513+ mkdir -p $(dirname $out/bin/${exeName})
514+ ${if stdenv.hostPlatform.isGhcjs then ''
515+ cat <(echo \#!${lib.getBin buildPackages.nodejs-12_x}/bin/node) ${testExecutable} >| $out/bin/${exeName}
516+ chmod +x $out/bin/${exeName}
517+ '' else ''
518+ cp -r ${testExecutable} $(dirname $out/bin/${exeName})
519+ ''}
520+ fi
521+ '')
522+ # In case `setup copy` did not create this
523+ + (lib.optionalString enableSeparateDataOutput ''
524+ mkdir -p $data
525+ '')
526+ + (lib.optionalString (stdenv.hostPlatform.isWindows && (haskellLib.mayHaveExecutable componentId)) (''
527+ echo "Symlink libffi and gmp .dlls ..."
528+ for p in ${lib.concatStringsSep " " [ libffi gmp ]}; do
529+ find "$p" -iname '*.dll' -exec ln -s {} $out/bin \;
530+ done
531+ ''
532+ # symlink all .dlls into the local directory.
533+ + ''
534+ for p in $pkgsHostTargetAsString; do
535+ find "$p" -iname '*.dll' -exec ln -s {} $out/bin \;
536+ find "$p" -iname '*.dll.a' -exec ln -s {} $out/bin \;
537+ done
538+ ''))
539+ + (lib.optionalString doCoverage ''
540+ mkdir -p $out/share
541+ cp -r dist/hpc $out/share
542+ cp dist/setup-config $out/
543+ '')
544+ }
545+ runHook postInstall
546+ '' + (
547+ # Keep just the autogen files and package.conf.inplace package
548+ # DB (probably empty unless this is a library component).
549+ # We also have to remove any refernces to $out to avoid
550+ # circular references.
551+ lib.optionalString (configureAllComponents || keepSource) ''
552+ mv dist dist-tmp-dir
553+ mkdir -p dist/build
554+ if [ -d dist-tmp-dir/build/${componentId.cname}/autogen ]; then
555+ mv dist-tmp-dir/build/${componentId.cname}/autogen dist/build/
556+ elif [ -d dist-tmp-dir/build/autogen ]; then
557+ mv dist-tmp-dir/build/autogen dist/build/
558+ fi
559+ mv dist-tmp-dir/package.conf.inplace dist/
560+ if [ -d dist/build/autogen ]; then
561+ remove-references-to -t $out dist/build/autogen/*
562+ fi
563+ rm -rf dist-tmp-dir
564+ ''
565+ ) + (lib.optionalString (keepSource && haskellLib.isLibrary componentId) ''
566+ remove-references-to -t $out ${name}.conf
567+ '') + (lib.optionalString (haskellLib.isTest componentId) ''
568+ echo The test ${package.identifier.name}.components.tests.${componentId.cname} was built. To run the test build ${package.identifier.name}.checks.${componentId.cname}.
569+ '');
570+
571+ doInstallCheck = true;
572+ installCheckPhase = lib.optionalString (haskellLib.isLibrary componentId) ''
573+ if test -n "$(shopt -s nullglob; echo $out/package.conf.d/${name}-*.conf)"; then
574+ echo $out/package.conf.d/${name}-*.conf " is present"
575+ else
576+ echo "ERROR: $out/package.conf.d/${name}-*.conf was not created"
577+ exit 1
578+ fi
579+ '';
580+
581+ shellHook = ''
582+ export PATH="${shellWrappers}/bin:$PATH"
583+ ${shellHookApplied}
584+ '';
585+ }
586+ // haskellLib.optionalHooks {
587+ # These are the hooks that are not needed by haddock (see commonAttrs for the ones that
588+ # are shared with the haddock derivation)
589+ inherit
590+ preBuild postBuild
591+ preInstall postInstall;
592+ }
593+ // lib.optionalAttrs (hardeningDisable != [] || stdenv.hostPlatform.isMusl) {
594+ hardeningDisable = hardeningDisable ++ lib.optional stdenv.hostPlatform.isMusl "pie";
595+ });
596+in drv; in self)
builder/default.nixnew file+93
@@ -0,0 +1,93 @@
1+{ pkgs, buildPackages, evalPackages, stdenv, lib, haskellLib, ghc, compiler-nix-name, fetchurl, pkgconfig, nonReinstallablePkgs, hsPkgs, compiler }:
2+
3+let
4+ # Builds a single component of a package.
5+ comp-builder = haskellLib.weakCallPackage pkgs ./comp-builder.nix {
6+ inherit ghc haskellLib makeConfigFiles haddockBuilder ghcForComponent hsPkgs compiler;
7+ };
8+
9+ haddockBuilder = haskellLib.weakCallPackage pkgs ./haddock-builder.nix {
10+ inherit ghc ghcForComponent haskellLib makeConfigFiles nonReinstallablePkgs;
11+ };
12+
13+ setup-builder = haskellLib.weakCallPackage pkgs ./setup-builder.nix {
14+ ghc = (ghc.passthru.buildGHC or ghc);
15+ hsPkgs = hsPkgs.buildPackages;
16+ # We need to use the buildPackages stdenv to build the setup-builder.
17+ # in the native case, it would be the same in the cross case however
18+ # we *really* want to build the Setup.hs on the build machine and not
19+ # have the stdenv confuse it with the target/host env.
20+ inherit (buildPackages) stdenv pkgconfig;
21+ inherit buildPackages;
22+ inherit haskellLib nonReinstallablePkgs makeSetupConfigFiles;
23+ };
24+
25+ # Wraps GHC to provide dependencies in a way that works for both the
26+ # component builder and for nix-shells.
27+ ghcForComponent = import ./ghc-for-component-wrapper.nix {
28+ inherit lib ghc haskellLib;
29+ inherit (buildPackages) stdenv;
30+ inherit (buildPackages.buildPackages) runCommand makeWrapper;
31+ inherit (buildPackages.buildPackages.xorg) lndir;
32+ };
33+
34+ # Builds a derivation which contains a ghc package-db of
35+ # dependencies for a component.
36+ makeConfigFiles = haskellLib.weakCallPackage pkgs ./make-config-files.nix {
37+ inherit ghc haskellLib nonReinstallablePkgs;
38+ };
39+ # When building setup depends we need to use the build systems GHC and Packages
40+ makeSetupConfigFiles = haskellLib.weakCallPackage buildPackages ./make-config-files.nix {
41+ inherit haskellLib nonReinstallablePkgs;
42+ ghc = (ghc.passthru.buildGHC or ghc);
43+ };
44+
45+
46+ hoogleLocal = let
47+ nixpkgsHoogle = import (pkgs.path + /pkgs/development/haskell-modules/hoogle.nix);
48+ in { packages ? [], hoogle ? pkgs.buildPackages.haskell-nix.tool "ghc8107" "hoogle" {
49+ inherit evalPackages;
50+ version = "5.0.18.3";
51+ index-state = pkgs.haskell-nix.internalHackageIndexState;
52+ }
53+ }:
54+ let
55+ haskellPackages = {
56+ # For musl we can use haddock from the buildGHC
57+ ghc = if stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl
58+ then ghc.buildGHC
59+ else ghc;
60+ inherit packages hoogle;
61+ };
62+ in if lib.versionAtLeast lib.trivial.release "22.05"
63+ then haskellLib.weakCallPackage pkgs nixpkgsHoogle {
64+ inherit haskellPackages;
65+ } (p: p.packages)
66+ else haskellLib.weakCallPackage pkgs nixpkgsHoogle haskellPackages;
67+
68+ # Same as haskellPackages.shellFor in nixpkgs.
69+ shellFor = haskellLib.weakCallPackage pkgs ./shell-for.nix {
70+ inherit hsPkgs ghcForComponent makeConfigFiles hoogleLocal haskellLib buildPackages evalPackages compiler;
71+ inherit (buildPackages) glibcLocales;
72+ };
73+
74+ # Same as haskellPackages.ghcWithPackages and ghcWithHoogle in nixpkgs.
75+ withPackages = {withHoogle}: packages: (shellFor {
76+ name = ghc.name + "-with-packages";
77+ packages = _: [];
78+ additional = packages;
79+ inherit withHoogle;
80+ }).ghc;
81+
82+in {
83+ # Build a Haskell package from its config.
84+ # TODO: this pkgs is the adjusted pkgs, but pkgs.pkgs is unadjusted
85+ build-package = haskellLib.weakCallPackage pkgs ./hspkg-builder.nix {
86+ inherit haskellLib ghc compiler-nix-name comp-builder setup-builder;
87+ };
88+
89+ inherit shellFor makeConfigFiles;
90+
91+ ghcWithPackages = withPackages { withHoogle = false; };
92+ ghcWithHoogle = withPackages { withHoogle = true; };
93+}
builder/ghc-for-component-wrapper.nixnew file+154
@@ -0,0 +1,154 @@
1+# The ghcForComponent function wraps ghc so that it is configured with
2+# the package database of all dependencies of a given component.
3+# It has been adapted from the ghcWithPackages wrapper in nixpkgs.
4+#
5+# This wrapper exists so that nix-shells for components will have a
6+# GHC automatically configured with the dependencies in the package
7+# database.
8+
9+{ lib, stdenv, ghc, runCommand, lndir, makeWrapper, haskellLib
10+}@defaults:
11+
12+{ componentName # Full derivation name of the component
13+, configFiles # The component's "config" derivation
14+, postInstall ? ""
15+, enableDWARF
16+, plugins
17+}:
18+
19+let
20+ ghc = if enableDWARF then defaults.ghc.dwarf else defaults.ghc;
21+
22+ inherit (configFiles) targetPrefix ghcCommand ghcCommandCaps packageCfgDir;
23+ libDir = "$out/${configFiles.libDir}";
24+ docDir = "$out/share/doc/ghc/html";
25+ # For musl we can use haddock from the buildGHC
26+ haddock = if stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl
27+ then ghc.buildGHC
28+ else ghc;
29+
30+in runCommand "${componentName}-${ghc.name}-env" {
31+ preferLocalBuild = true;
32+ passthru = {
33+ inherit (ghc) version meta;
34+ inherit targetPrefix;
35+ baseGhc = ghc;
36+ };
37+} (
38+ ''
39+ . ${makeWrapper}/nix-support/setup-hook
40+
41+ ''
42+ # Start with a ghc and remove all of the package directories
43+ + ''
44+ mkdir -p $out/bin
45+ ${lndir}/bin/lndir -silent ${ghc} $out
46+ rm -rf ${libDir}/*/
47+ ''
48+ # ... but retain the lib/ghc/bin directory. This contains `unlit' and friends.
49+ + ''
50+ ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/bin ${libDir}
51+ ''
52+ # ... and the ghcjs shim's if they are available ...
53+ + ''
54+ if [ -d ${ghc}/lib/${ghcCommand}-${ghc.version}/shims ]; then
55+ ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/shims ${libDir}
56+ fi
57+ ''
58+ # ... and node modules ...
59+ + ''
60+ if [ -d ${ghc}/lib/${ghcCommand}-${ghc.version}/ghcjs-node ]; then
61+ ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/ghcjs-node ${libDir}
62+ fi
63+ ''
64+ # Replace the package database with the one from target package config.
65+ + ''
66+ ln -s ${configFiles}/${packageCfgDir} $out/${packageCfgDir}
67+
68+ ''
69+ # Set the GHC_PLUGINS environment variable according to the plugins for the component.
70+ # GHC will automatically load the relevant symbols from the given libraries and
71+ # initialize them with the given arguments.
72+ #
73+ # GHC_PLUGINS is a `read`able [(FilePath,String,String,[String])], where the
74+ # first component is a path to the shared library, the second is the package ID,
75+ # the third is the module name, and the fourth is the plugin arguments.
76+ + ''
77+ GHC_PLUGINS="["
78+ LIST_PREFIX=""
79+ ${builtins.concatStringsSep "\n" (map (plugin: ''
80+ id=$(${ghc}/bin/ghc-pkg --package-db ${plugin.library}/package.conf.d field ${plugin.library.package.identifier.name} id --simple-output)
81+ lib_dir=$(${ghc}/bin/ghc-pkg --package-db ${plugin.library}/package.conf.d field ${plugin.library.package.identifier.name} dynamic-library-dirs --simple-output)
82+ lib_base=$(${ghc}/bin/ghc-pkg --package-db ${plugin.library}/package.conf.d field ${plugin.library.package.identifier.name} hs-libraries --simple-output)
83+ lib="$(echo ''${lib_dir}/lib''${lib_base}*)"
84+ GHC_PLUGINS="''${GHC_PLUGINS}''${LIST_PREFIX}(\"''${lib}\",\"''${id}\",\"${plugin.moduleName}\",["
85+ LIST_PREFIX=""
86+ ${builtins.concatStringsSep "\n" (map (arg: ''
87+ GHC_PLUGINS="''${GHC_PLUGINS}''${LIST_PREFIX}\"${arg}\""
88+ LIST_PREFIX=","
89+ '') plugin.args)}
90+ GHC_PLUGINS="''${GHC_PLUGINS}])"
91+ LIST_PREFIX=","
92+ '') plugins)}
93+ GHC_PLUGINS="''${GHC_PLUGINS}]"
94+
95+ ''
96+ # now the tricky bit. For GHCJS (to make plugins work), we need a special
97+ # file called ghc_libdir. That points to the build ghc's lib.
98+ + ''
99+ echo "${ghc.buildGHC or ghc}/lib/${(ghc.buildGHC or ghc).name}" > "${libDir}/ghc_libdir"
100+
101+ ''
102+ # Wrap compiler executables with correct env variables.
103+ # The NIX_ variables are used by the patched Paths_ghc module.
104+ + ''
105+ for prg in ${ghcCommand} ${ghcCommand}i ${ghcCommand}-${ghc.version} ${ghcCommand}i-${ghc.version}; do
106+ if [[ -x "${ghc}/bin/$prg" ]]; then
107+ rm -f $out/bin/$prg
108+ makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
109+ --add-flags '"-B$NIX_${ghcCommandCaps}_LIBDIR"' \
110+ --set "NIX_${ghcCommandCaps}" "$out/bin/${ghcCommand}" \
111+ --set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
112+ --set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
113+ --set "GHC_PLUGINS" "$GHC_PLUGINS" \
114+ --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
115+ fi
116+ done
117+
118+ for prg in "${targetPrefix}runghc" "${targetPrefix}runhaskell"; do
119+ if [[ -x "${ghc}/bin/$prg" ]]; then
120+ rm -f $out/bin/$prg
121+ makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
122+ --add-flags "-f $out/bin/${ghcCommand}" \
123+ --set "NIX_${ghcCommandCaps}" "$out/bin/${ghcCommand}" \
124+ --set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
125+ --set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
126+ --set "GHC_PLUGINS" "$GHC_PLUGINS" \
127+ --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
128+ fi
129+ done
130+
131+ ''
132+ # Wrap haddock, if the base GHC provides it.
133+ + ''
134+ if [[ -x "${haddock}/bin/haddock" ]]; then
135+ rm -f $out/bin/haddock
136+ makeWrapper ${haddock}/bin/haddock $out/bin/haddock \
137+ --add-flags '"-B$NIX_${ghcCommandCaps}_LIBDIR"' \
138+ --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
139+ fi
140+
141+ ''
142+ # Point ghc-pkg to the package database of the component using the
143+ # --global-package-db flag.
144+ + ''
145+ for prg in ${ghcCommand}-pkg ${ghcCommand}-pkg-${ghc.version}; do
146+ if [[ -x "${ghc}/bin/$prg" ]]; then
147+ rm -f $out/bin/$prg
148+ makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "--global-package-db=$out/${packageCfgDir}"
149+ fi
150+ done
151+
152+ ${postInstall}
153+ ''
154+)
builder/haddock-builder.nixnew file+158
@@ -0,0 +1,158 @@
1+{ stdenv, buildPackages, lib, haskellLib, ghc, ghcForComponent, nonReinstallablePkgs, runCommand, writeText, writeScript, makeConfigFiles }:
2+
3+{ componentId
4+, component
5+, package
6+, flags
7+, revision
8+, commonAttrs
9+, preHaddock
10+, postHaddock
11+, pkgconfig
12+, commonConfigureFlags
13+
14+, doHaddock
15+, doHoogle
16+, hyperlinkSource
17+, quickjump
18+, setupHaddockFlags
19+
20+, needsProfiling
21+, componentDrv
22+, configFiles # component config files
23+}:
24+
25+let
26+ doHaddock' = doHaddock
27+ && (haskellLib.isLibrary componentId)
28+ && !haskellLib.isCrossHost;
29+
30+ # the target dir for haddock documentation
31+ docdir = docoutput: docoutput + "/share/doc/" + componentId.cname;
32+
33+ packageCfgDir = configFiles.packageCfgDir;
34+
35+ fullName = "${componentDrv.name}-haddock";
36+
37+ # These config files are like the one used in the build derivation,
38+ # but `chooseDrv` will be used to map all the references to libraries
39+ # to their haddock derivation.
40+ docsConfigFiles = makeConfigFiles {
41+ inherit (package) identifier;
42+ inherit component fullName flags needsProfiling;
43+ chooseDrv = p: p.haddock;
44+ inherit (componentDrv) enableDWARF;
45+ };
46+
47+ finalConfigureFlags = lib.concatStringsSep " " (
48+ [ "--prefix=${componentDrv}"
49+ "${haskellLib.componentTarget componentId}"
50+ "$(cat ${docsConfigFiles}/configure-flags)"
51+ ]
52+ ++ commonConfigureFlags
53+ ++ lib.optional doHaddock' " --docdir=${docdir "$doc"}");
54+
55+ shellWrappers = ghcForComponent {
56+ componentName = fullName;
57+ configFiles = docsConfigFiles;
58+ inherit (componentDrv) enableDWARF;
59+ inherit (component) plugins;
60+ };
61+
62+ drv = stdenv.mkDerivation (commonAttrs // {
63+ name = fullName;
64+
65+ passthru = {
66+ configFiles = docsConfigFiles;
67+
68+ # The directory containing the haddock documentation.
69+ haddockDir = if doHaddock' then "${docdir drv.doc}/html" else null;
70+ };
71+
72+ # `out` contains the `package.conf.d` files used for building the
73+ # haddock files.
74+ # `doc` contains just the haddock output files.
75+ outputs = ["out"]
76+ ++ lib.optional doHaddock' "doc";
77+
78+ propagatedBuildInputs = builtins.concatLists pkgconfig;
79+
80+ buildInputs = component.libs
81+ ++ map (d: d.components.library.haddock or d) component.depends;
82+
83+ nativeBuildInputs =
84+ [ shellWrappers buildPackages.removeReferencesTo ]
85+ ++ componentDrv.executableToolDepends;
86+
87+ configurePhase = ''
88+ runHook preConfigure
89+ echo Configure flags:
90+ printf "%q " ${finalConfigureFlags}
91+ echo
92+ $SETUP_HS configure ${finalConfigureFlags}
93+ runHook postConfigure
94+ '';
95+
96+ buildPhase = ''
97+ mkdir -p $out
98+ '' + lib.optionalString doHaddock' ''
99+ runHook preHaddock
100+
101+ docdir="${docdir "$doc"}"
102+ # This mkdir needed for packages like base-noprelude and bytestring-builder
103+ # (which is also empty when `bytestring >= 0.10.4`)
104+ mkdir -p "$docdir"
105+
106+ # If we don't have any source files, no need to run haddock
107+ [[ -n $(find . -name "*.hs" -o -name "*.lhs") ]] && {
108+ $SETUP_HS haddock \
109+ "--html" \
110+ ${lib.optionalString doHoogle "--hoogle"} \
111+ ${lib.optionalString hyperlinkSource "--hyperlink-source"} \
112+ ${lib.optionalString quickjump "--quickjump"} \
113+ ${lib.concatStringsSep " " setupHaddockFlags}
114+ }
115+ runHook postHaddock
116+ '';
117+
118+ installPhase =
119+ let
120+ target-pkg-and-db = "${ghc.targetPrefix}ghc-pkg -v0 --package-db $out/package.conf.d";
121+ in ''
122+ html="dist/doc/html/${package.identifier.name}"
123+
124+ if [ -d "$html" ]; then
125+ # Ensure that libraries are not pulled into the docs closure.
126+ # As an example, the prettified source code of a
127+ # Paths_package module will contain store paths of the library package.
128+ for x in "$html/src/"*.html; do
129+ remove-references-to -t $out $x
130+ remove-references-to -t ${componentDrv} $x
131+ done
132+
133+ docdir="${docdir "$doc"}"
134+ mkdir -p "$docdir"
135+
136+ cp -R "$html" "$docdir"/html
137+ fi
138+
139+ ${ghc.targetPrefix}ghc-pkg -v0 init $out/package.conf.d
140+
141+ for i in "${componentDrv}/package.conf.d"/*.conf; do
142+ # Copy the .conf files from the build derivation, but replace the `haddock-intefaces:`
143+ # field with correct location for haddocks (now it is known). This will insure that
144+ # the other haddock derivations build to reference this one will have the correct
145+ # working hyper links.
146+ pkg=$(basename "$i")
147+ sed -e "s|haddock-interfaces:.*|haddock-interfaces: $docdir/html/${componentId.cname}.haddock|" -e "s|haddock-html:.*|haddock-html: $docdir/html/|" "$i" > "$pkg"
148+ ${ghc.targetPrefix}ghc-pkg -v0 --package-db ${docsConfigFiles}/${configFiles.packageCfgDir} -f $out/package.conf.d register "$pkg"
149+ done
150+
151+ ln -s ${componentDrv}/exactDep $out/exactDep
152+ ln -s ${componentDrv}/envDep $out/envDep
153+ '';
154+ }
155+ // haskellLib.optionalHooks {
156+ inherit preHaddock postHaddock;
157+ });
158+in drv
builder/hspkg-builder.nixnew file+138
@@ -0,0 +1,138 @@
1+{ pkgs, buildPackages, stdenv, lib, haskellLib, ghc, compiler-nix-name, fetchurl, runCommand, comp-builder, setup-builder }:
2+
3+config:
4+{ flags
5+, package
6+, components
7+, cabal-generator
8+
9+, name
10+, sha256
11+, src
12+, revision
13+, revisionSha256
14+, patches
15+
16+, shellHook
17+
18+, ...
19+}@pkg:
20+
21+assert (if ghc.isHaskellNixCompiler or false then true
22+ else throw ("It is likely you used `haskell.compiler.X` instead of `haskell-nix.compiler.X`"
23+ + pkgs.lib.optionalString (name != null) (" for " + name)));
24+
25+let
26+ # Some packages bundled with GHC are not the same as they are in hackage.
27+ bundledSrc = {
28+ # These are problematic because the hackage versions will not install and are part of LTS.
29+ "ghc902/stm-2.5.0.0" = "/libraries/stm";
30+ "ghc902/filepath-1.4.2.1" = "/libraries/filepath";
31+ }."${compiler-nix-name}/${name}" or null;
32+ src = if bundledSrc == null then pkg.src else ghc.configured-src + bundledSrc;
33+ cabalFile = if revision == null || revision == 0 || bundledSrc != null then null else
34+ fetchurl {
35+ name = "${name}-${toString revision}.cabal";
36+ url = "https://hackage.haskell.org/package/${name}/revision/${toString revision}.cabal";
37+ sha256 = revisionSha256;
38+ };
39+
40+ defaultSetupSrc = if stdenv.hostPlatform.isGhcjs then ./Setup.ghcjs.hs else ./Setup.hs;
41+
42+ # This is the `Cabal` library that was built for `cabal-install` to use.
43+ # It makes sense to use this version (when possible) because it will match the behavior of
44+ # building with `cabal-install` (including fixes that may not be in the
45+ # version of Cabal bundled with GHC).
46+ cabalFromCabalInstall = buildPackages.haskell-nix.cabal-install-unchecked.${compiler-nix-name}.project.hsPkgs.Cabal.components.library;
47+
48+ # Check there is no chance we are building `cabalFromCabalInstall`. Using `cabalFromCabalInstall`
49+ # to build itseld would cause infinite recursion.
50+ useCabalFromCabalInstall =
51+ # `cabalFromCabalInstall` is not cross compiled
52+ stdenv.buildPlatform != stdenv.hostPlatform
53+ ||
54+ # These are the dependencies of `Cabal`
55+ !builtins.elem package.identifier.name
56+ ["nix-tools" "alex" "happy" "hscolour" "Cabal" "bytestring" "aeson" "time"
57+ "filepath" "base-compat-batteries" "base-compat" "unix" "directory" "transformers"
58+ "containers" "binary" "mtl" "text" "process" "parsec"];
59+
60+ defaultSetup = setup-builder ({
61+ name = "${ghc.targetPrefix}default-Setup";
62+ component = {
63+ depends = config.setup-depends ++ lib.optional useCabalFromCabalInstall cabalFromCabalInstall;
64+ libs = [];
65+ frameworks = [];
66+ doExactConfig = false;
67+ includeDirs = [];
68+ asmSources = [];
69+ cSources = [];
70+ cmmSources = [];
71+ cxxSources = [];
72+ jsSources = [];
73+ extraSrcFiles = [ "Setup.hs" "Setup.lhs" ];
74+ pkgconfig = [];
75+ build-tools = [];
76+
77+ platforms = null;
78+ preBuild = null; postBuild = null;
79+ preInstall = null; postInstall = null;
80+ preUnpack = null; postUnpack = null;
81+ };
82+ package = {
83+ identifier = {
84+ name = "default-Setup";
85+ version = "1.0";
86+ };
87+ homepage = null;
88+ synopsis = null;
89+ license = "MIT";
90+ };
91+ src = null;
92+ cleanSrc = buildPackages.runCommand "default-Setup-src" {} ''
93+ mkdir $out
94+ cat ${defaultSetupSrc} > $out/Setup.hs
95+ '';
96+ inherit defaultSetupSrc;
97+ } // lib.optionalAttrs useCabalFromCabalInstall {
98+ # This is needed so that we don't get duplicate packages when we
99+ # add a custom Cabal package to the dependencies. That way custom
100+ # setups won't complain about e.g. binary from the Cabal dependencies
101+ # and binary from the global package-db.
102+ nonReinstallablePkgs = [];
103+ });
104+
105+ # buildPackages.runCommand "default-Setup" { nativeBuildInputs = [(ghc.passthru.buildGHC or ghc)]; } ''
106+ # cat ${defaultSetupSrc} > Setup.hs
107+ # mkdir -p $out/bin
108+ # ${(ghc.passthru.buildGHC or ghc).targetPrefix}ghc Setup.hs --make -o $out/bin/Setup
109+ # '';
110+
111+ setup = if package.buildType == "Simple"
112+ then defaultSetup
113+ else setup-builder {
114+ component = components.setup // {
115+ depends = config.setup-depends ++ components.setup.depends ++ package.setup-depends;
116+ extraSrcFiles = components.setup.extraSrcFiles ++ [ "Setup.hs" "Setup.lhs" ];
117+ pkgconfig = if components ? library then components.library.pkgconfig or [] else [];
118+ };
119+ inherit package name src flags revision patches defaultSetupSrc;
120+ inherit (pkg) preUnpack postUnpack;
121+ };
122+
123+ buildComp = allComponent: componentId: component: comp-builder {
124+ inherit allComponent componentId component package name src flags setup cabalFile cabal-generator patches revision
125+ shellHook
126+ ;
127+ };
128+
129+in rec {
130+ components = haskellLib.applyComponents (buildComp pkg.allComponent) pkg;
131+ checks = pkgs.recurseIntoAttrs (builtins.mapAttrs
132+ (_: d: haskellLib.check d)
133+ (lib.filterAttrs (_: d: d.config.doCheck) components.tests));
134+ inherit (package) identifier detailLevel isLocal isProject buildType;
135+ inherit setup cabalFile;
136+ isHaskell = true;
137+ inherit src;
138+}
builder/make-config-files.nixnew file+222
@@ -0,0 +1,222 @@
1+{ stdenv, lib, haskellLib, ghc, nonReinstallablePkgs, runCommand, writeText, writeScript }@defaults:
2+
3+{ identifier, component, fullName, flags ? {}, needsProfiling ? false, enableDWARF ? false, chooseDrv ? drv: drv, nonReinstallablePkgs ? defaults.nonReinstallablePkgs }:
4+
5+let
6+ # Sort and remove duplicates from nonReinstallablePkgs.
7+ # That way changes to the order of nonReinstallablePkgs does not require rebuilds.
8+ nonReinstallablePkgs' = __attrNames (lib.genAttrs nonReinstallablePkgs (x: x));
9+
10+ ghc = if enableDWARF then defaults.ghc.dwarf else defaults.ghc;
11+
12+ flagsAndConfig = field: xs: lib.optionalString (xs != []) ''
13+ echo ${lib.concatStringsSep " " (map (x: "--${field}=${x}") xs)} >> $out/configure-flags
14+ echo "${field}: ${lib.concatStringsSep " " xs}" >> $out/cabal.config
15+ '';
16+
17+ target-pkg = "${ghc.targetPrefix}ghc-pkg";
18+
19+ # This is a bit of a hack. So we'll have a slightly longer explanation here:
20+
21+ # Every library component built with `comp-builder.nix` includes an `exactDep`
22+ # and `envDep` directory with precomputed values used here.
23+ # GHC derivations include `exactDep` and `envDep` directories that have
24+ # the same information for each of the built in packages.
25+
26+ # exactDep will pass --exact-configuration to the `SETUP_HS configure` command.
27+ # This requires us to pass --dependency={dep name}={pkg id}. The dependency
28+ # name will usually be the name of the package `p`, which we can locate in the
29+ # package-db, passed in via `pdbArg`. Thus querying the package-db for the
30+ # id field for package `p`, will usually provide us with the right value. Sublibs
31+ # need a bit of special handling:
32+ #
33+ # - Sublibs: if the dependency is a sublibrary of a package, we need to use
34+ # the sublibrary's name for the dep name, and lookup the sublibraries
35+ # pkg id for z-{pkg name}-z-{sublib name}. As we do not provide the
36+ # sublib name to exactDep, as we don't have access to it at the call-site,
37+ # we resort to a bit of globbing, which (as pkg db's should contain only
38+ # a single package) work.
39+
40+ getLibComponent = dep:
41+ dep.components.library # Regular package dependency
42+ or dep; # or a sublib
43+
44+ # Work our suitable packageCfgDir subdirectory
45+ isGhcjs = ghc.isGhcjs or false;
46+ ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
47+ ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
48+ ghcCommandCaps = lib.toUpper ghcCommand';
49+ libDir = "lib/${ghcCommand}-${ghc.version}";
50+ packageCfgDir = "${libDir}/package.conf.d";
51+
52+ # Filters out only library packages that for this GHC target
53+ # TODO investigate why this is needed
54+ # TODO find out why p ? configFiles helps (for instance for `R1909.aarch64-unknown-linux-gnu.tests.cabal-22.run.x86_64-linux`)
55+ libDeps = map chooseDrv (
56+ (if enableDWARF then (x: map (p: p.dwarf or p) x) else x: x)
57+ ((if needsProfiling then (x: map (p: p.profiled or p) x) else x: x)
58+ (lib.filter (p: (p ? configFiles) && p.configFiles.targetPrefix == ghc.targetPrefix)
59+ (map getLibComponent component.depends)))
60+ );
61+ cfgFiles =
62+ let xs = map
63+ (p: "${p.configFiles}")
64+ libDeps;
65+ in lib.concatStringsSep "\" \"" xs;
66+ libs = lib.concatMapStringsSep "\" \"" (p: "${p}") libDeps;
67+ drv = runCommand "${ghc.targetPrefix}${fullName}-config" {
68+ nativeBuildInputs = [ghc];
69+ passthru = {
70+ inherit (ghc) targetPrefix;
71+ inherit ghcCommand ghcCommandCaps libDir packageCfgDir component;
72+ # Use ''${pkgroot} relative paths so that we can relocate the package database
73+ # along with referenced packages and still have it work on systems with
74+ # or without nix installed.
75+ relocatableConfigFiles = runCommand "${ghc.targetPrefix}${fullName}-relocatable-config" ''
76+ cp -r ${drv} $out
77+ chmod -R +w $out
78+ sed -i 's|/nix/store/|''${pkgroot}/../../../|' $out/${packageCfgDir}/*.conf
79+ ${target-pkg} -v0 --package-db $out/${packageCfgDir} recache
80+ '';
81+ };
82+ } (''
83+ mkdir -p $out
84+
85+ ${target-pkg} init $out/${packageCfgDir}
86+
87+ ${lib.concatStringsSep "\n" (lib.mapAttrsToList flagsAndConfig {
88+ "extra-lib-dirs" = map (p: "${lib.getLib p}/lib") (lib.flatten component.libs)
89+ # On windows also include `bin` directories that may contain DLLs
90+ ++ lib.optionals (stdenv.hostPlatform.isWindows)
91+ (map (p: "${lib.getBin p}/bin")
92+ (lib.flatten component.libs ++ lib.concatLists component.pkgconfig));
93+ "extra-include-dirs" = map (p: "${lib.getDev p}/include") (lib.flatten component.libs);
94+ "extra-framework-dirs" = lib.optionals (stdenv.hostPlatform.isDarwin)
95+ (map (p: "${p}/Library/Frameworks") component.frameworks);
96+ })}
97+
98+ ghc=${ghc}
99+ ${ # Copy over the nonReinstallablePkgs from the global package db.
100+ ''
101+ for p in ${lib.concatStringsSep " " nonReinstallablePkgs'}; do
102+ find $ghc/lib/${ghc.name}/package.conf.d -name $p'*.conf' -exec cp -f {} $out/${packageCfgDir} \;
103+ done
104+ ''}
105+
106+ for l in "${cfgFiles}"; do
107+ if [ -n "$l" ]; then
108+ files=("$l/${packageCfgDir}/"*.conf)
109+ if (( ''${#files[@]} )); then
110+ cp -f "''${files[@]}" $out/${packageCfgDir}
111+ else
112+ echo "$l/${packageCfgDir} didn't contain any *.conf files!"
113+ exit 1
114+ fi
115+ fi
116+ done
117+ for l in "${libs}"; do
118+ if [ -n "$l" ]; then
119+ files=("$l/package.conf.d/"*.conf)
120+ if (( ''${#files[@]} )); then
121+ cp -f "''${files[@]}" $out/${packageCfgDir}
122+ else
123+ echo "$l/package.conf.d didn't contain any *.conf files!"
124+ exit 1
125+ fi
126+ fi
127+ done
128+
129+ ${ # Note: we pass `clear` first to ensure that we never consult the implicit global package db.
130+ flagsAndConfig "package-db" ["clear" "$out/${packageCfgDir}"]
131+ }
132+
133+ echo ${lib.concatStringsSep " " (lib.mapAttrsToList (fname: val: "--flags=${lib.optionalString (!val) "-" + fname}") flags)} >> $out/configure-flags
134+
135+ ${ # Provide a cabal config without remote package repositories
136+ ''
137+ echo "write-ghc-environment-files: never" >> $out/cabal.config
138+ ''}
139+
140+ ${ # Provide a GHC environment file
141+ ''
142+ cat > $out/ghc-environment <<EOF
143+ package-db $out/${packageCfgDir}
144+ EOF
145+ ''}
146+
147+ ${ lib.optionalString component.doExactConfig ''
148+ echo "--exact-configuration" >> $out/configure-flags
149+ echo "allow-newer: ${identifier.name}:*" >> $out/cabal.config
150+ echo "allow-older: ${identifier.name}:*" >> $out/cabal.config
151+ ''}
152+
153+ for p in ${lib.concatStringsSep " " libDeps}; do
154+ cat $p/envDep >> $out/ghc-environment
155+ ${ lib.optionalString component.doExactConfig ''
156+ cat $p/exactDep/configure-flags >> $out/configure-flags
157+ cat $p/exactDep/cabal.config >> $out/cabal.config
158+ ''}
159+ done
160+ for p in ${lib.concatStringsSep " " (lib.remove "ghc" nonReinstallablePkgs')}; do
161+ if [ -e $ghc/envDeps/$p ]; then
162+ cat $ghc/envDeps/$p >> $out/ghc-environment
163+ fi
164+ done
165+ '' + lib.optionalString component.doExactConfig ''
166+ for p in ${lib.concatStringsSep " " nonReinstallablePkgs'}; do
167+ if [ -e $ghc/exactDeps/$p ]; then
168+ cat $ghc/exactDeps/$p/configure-flags >> $out/configure-flags
169+ cat $ghc/exactDeps/$p/cabal.config >> $out/cabal.config
170+ fi
171+ done
172+ ''
173+ # This code originates in the `generic-builder.nix` from nixpkgs. However GHC has been fixed
174+ # to drop unused libraries referenced from libraries; and this patch is usually included in the
175+ # nixpkgs's GHC builds. This doesn't sadly make this stupid hack unnecessary. It resurfaces in
176+ # the form of Cabal trying to be smart. Cabal when linking a library figures out that you likely
177+ # need those `rpath` entries, and passes `-optl-Wl,-rpath,...` for each dynamic library path to
178+ # GHC, thus subverting the linker and forcing it to insert all those RPATHs weather or not they
179+ # are needed. We therefore reuse the linker hack here to move all dynamic libraries into a
180+ # common folder (as links) and thus prevent Cabal from going nuts.
181+ #
182+ # TODO: Fix Cabal.
183+ # TODO: this is only needed if we do dynamic libraries.
184+ #
185+ # NOTE [ln -s -f]: we force link, as we may have dependencies that contain shared deps
186+ # (e.g. libiconv), and thus we don't want to fail, but just link it again.
187+ #
188+ # Confusing sed stuff:
189+ # '/^ ./{H;$!d} ; x' Groups lines that start with a space with the initial
190+ # line of a block. Needs a blank line added to the file
191+ # to terminate the last block.
192+ # 's/ /\n/g ; s/\n\n*/\n/g; s/^\n//;' Puts each field on its own line.
193+ # 's|/nix/store/|''${pkgroot}/../../../|' Convert store path to pkgroot relative path
194+ # 's|''${pkgroot}/../../../|/nix/store/|' Convert pkgroot relative path to store path
195+
196+ # Work around a limit in the macOS Sierra linker on the number of paths
197+ # referenced by any one dynamic library:
198+ #
199+ # Create a local directory with symlinks of the *.dylib (macOS shared
200+ # libraries) from all the dependencies.
201+ + lib.optionalString stdenv.isDarwin ''
202+ local dynamicLinksDir="$out/lib/links"
203+ mkdir -p $dynamicLinksDir
204+ # Enumerate dynamic-library-dirs with ''${pkgroot} expanded.
205+ local dirsToLink=$(
206+ for f in "$out/${packageCfgDir}/"*.conf; do
207+ (cat $f; echo) | sed -En '/^ ./{H;$!d} ; x ; /^dynamic-library-dirs:/ {s/^dynamic-library-dirs:// ; s/ /\n/g ; s/\n\n*/\n/g; s/^\n//; p}'
208+ done | sed 's|''${pkgroot}/../../../|/nix/store/|' | sort -u
209+ )
210+ for d in $dirsToLink; do
211+ ln -f -s "$d/"*.{a,dylib,so} $dynamicLinksDir
212+ done
213+ # Edit the local package DB to reference the links directory.
214+ for f in "$out/${packageCfgDir}/"*.conf; do
215+ chmod +w $f
216+ echo >> $f
217+ sed -i -E "/^ ./{H;$!d} ; x ; s,^dynamic-library-dirs:.*,dynamic-library-dirs: $dynamicLinksDir," $f
218+ done
219+ '' + ''
220+ ${target-pkg} -v0 --package-db $out/${packageCfgDir} recache
221+ '');
222+in drv
builder/setup-builder.nixnew file+104
@@ -0,0 +1,104 @@
1+{ pkgs, stdenv, lib, buildPackages, haskellLib, ghc, nonReinstallablePkgs, hsPkgs, makeSetupConfigFiles, pkgconfig }@defaults:
2+
3+let self =
4+{ component, package, name, src, enableDWARF ? false, flags ? {}, revision ? null, patches ? [], defaultSetupSrc
5+, preUnpack ? component.preUnpack, postUnpack ? component.postUnpack
6+, prePatch ? null, postPatch ? null
7+, preBuild ? component.preBuild , postBuild ? component.postBuild
8+, preInstall ? component.preInstall , postInstall ? component.postInstall
9+, cleanSrc ? haskellLib.cleanCabalComponent package component "setup" src
10+, nonReinstallablePkgs ? defaults.nonReinstallablePkgs
11+, smallAddressSpace ? false
12+}@drvArgs:
13+
14+let
15+ ghc = (if enableDWARF then (x: x.dwarf) else (x: x)) (
16+ (if smallAddressSpace then (x: x.smallAddressSpace) else (x: x)) defaults.ghc);
17+
18+ cleanSrc' = haskellLib.rootAndSubDir cleanSrc;
19+
20+ fullName = "${name}-setup";
21+
22+ includeGhcPackage = lib.any (p: p.identifier.name == "ghc") component.depends;
23+
24+ configFiles = makeSetupConfigFiles {
25+ inherit (package) identifier;
26+ inherit fullName flags component enableDWARF nonReinstallablePkgs;
27+ };
28+ hooks = haskellLib.optionalHooks {
29+ inherit
30+ preUnpack postUnpack
31+ prePatch postPatch
32+ preBuild postBuild
33+ preInstall postInstall
34+ ;
35+ };
36+
37+ executableToolDepends =
38+ (lib.concatMap (c: if c.isHaskell or false
39+ then builtins.attrValues (c.components.exes or {})
40+ else [c]) component.build-tools) ++
41+ lib.optional (component.pkgconfig != []) pkgconfig;
42+
43+ drv =
44+ stdenv.mkDerivation ({
45+ name = "${ghc.targetPrefix}${fullName}";
46+ src = cleanSrc'.root;
47+ buildInputs = component.libs
48+ ++ component.frameworks
49+ ++ builtins.concatLists component.pkgconfig;
50+ nativeBuildInputs = [ghc] ++ executableToolDepends;
51+
52+ passthru = {
53+ inherit (package) identifier;
54+ config = component;
55+ srcSubDir = cleanSrc'.subDir;
56+ srcSubDirPath = cleanSrc'.root + cleanSrc'.subDir;
57+ cleanSrc = cleanSrc';
58+ inherit configFiles;
59+ dwarf = self (drvArgs // { enableDWARF = true; });
60+ smallAddressSpace = self (drvArgs // { smallAddressSpace = true; });
61+ };
62+
63+ meta = {
64+ homepage = package.homepage or "";
65+ description = package.synopsis or "";
66+ license = haskellLib.cabalToNixpkgsLicense package.license;
67+ platforms = if component.platforms == null then lib.platforms.all else component.platforms;
68+ };
69+
70+ phases = ["unpackPhase" "patchPhase" "buildPhase" "installPhase"];
71+ buildPhase = ''
72+ runHook preBuild
73+ if [[ ! -f ./Setup.hs && ! -f ./Setup.lhs ]]; then
74+ cat ${defaultSetupSrc} > Setup.hs
75+ fi
76+ for f in Setup.hs Setup.lhs; do
77+ if [ -f $f ]; then
78+ echo Compiling package $f
79+ ghc $f -threaded ${if includeGhcPackage then "-package ghc " else ""
80+ }-package-db ${configFiles}/${configFiles.packageCfgDir} --make -o ./Setup
81+ fi
82+ done
83+ [ -f ./Setup ] || (echo Failed to build Setup && exit 1)
84+ runHook postBuild
85+ '';
86+
87+ installPhase = ''
88+ runHook preInstall
89+ mkdir -p $out/bin
90+ install ./Setup $out/bin/Setup
91+ runHook postInstall
92+ '';
93+ }
94+ // (lib.optionalAttrs (cleanSrc'.subDir != "") {
95+ prePatch =
96+ # If the package is in a sub directory `cd` there first
97+ ''
98+ cd ${lib.removePrefix "/" cleanSrc'.subDir}
99+ '';
100+ })
101+ // (lib.optionalAttrs (patches != []) { patches = map (p: if builtins.isFunction p then p { inherit (package.identifier) version; inherit revision; } else p) patches; })
102+ // hooks
103+ );
104+in drv; in self
builder/shell-for.nixnew file+189
@@ -0,0 +1,189 @@
1+{ lib, stdenv, mkShell, glibcLocales, pkgconfig, ghcForComponent, makeConfigFiles, hsPkgs, hoogleLocal, haskellLib, buildPackages, evalPackages, compiler }:
2+
3+{ # `packages` function selects packages that will be worked on in the shell itself.
4+ # These packages will not be built by `shellFor`, but their
5+ # dependencies will be included in the shell's `ghc-pkg list`.
6+ packages ? ps: builtins.attrValues (haskellLib.selectLocalPackages ps)
7+ # `components` function selects components that will be worked on in the shell itself.
8+ # By default `shellFor` will include the dependencies of all of the components
9+ # in the selected packages. If only as subset of the components will be
10+ # worked on in the shell then we can pass a different `components` function
11+ # to select those.
12+, components ? ps: lib.concatMap haskellLib.getAllComponents (packages ps)
13+ # Additional packages to be added unconditionally
14+, additional ? _: []
15+, withHoogle ? true
16+, withHaddock ? withHoogle
17+, exactDeps ? false
18+, tools ? {}
19+, packageSetupDeps ? true
20+, enableDWARF ? false
21+, ... } @ args:
22+
23+let
24+ # TODO find out why hoogle index creation can be made to work for cross compilers
25+ withHoogle' = withHoogle && !haskellLib.isCrossHost;
26+
27+ selectedPackages = packages hsPkgs;
28+ additionalPackages = additional hsPkgs;
29+ directlySelectedComponents = components hsPkgs;
30+
31+ # Given `directlySelectedComponents = [ a b ]`, we construct a shell that includes all of their dependencies
32+ #
33+ # But we want to exclude `a` if it is a transitive dependecy of `b`
34+ # because:
35+ # - cabal will end up ignoring that built version;
36+ # - The user has indicated that's what they're working on, so they probably don't want to have to build
37+ # it first (and it will change often).
38+ # Generally we never want to include any of `directlySelectedComponents` as dependencies.
39+ #
40+ # We do this by defining a set of `selectedComponents`, where `x` is in `selectedComponents` if and only if:
41+ # - `x` is in `directlySelectedComponents`
42+ # - `x` is a transitive dependency of something in `directlySelectedComponents`
43+ # and `x` transitively depends on something in `directlySelectedComponents`
44+ # We use the dependencies of `selectedComponents` filtering out members of `selectedComponents`
45+ #
46+ # Furthermore, if `a` depends on `b`, `a` will include the library component of `b` in its `buildInputs`
47+ # (to make `propagatedBuildInputs` of `pkgconfig-depends` work). So we also need to filter those
48+ # (the pkgconfig depends of `b` will still be included in the
49+ # system shell's `buildInputs` via `b`'s own `buildInputs`).
50+
51+
52+ # all packages that are indirectly depended on by `directlySelectedComponents`
53+ # including `directlySelectedComponents`
54+ transitiveDependenciesComponents =
55+ builtins.listToAttrs
56+ (builtins.map (x: lib.nameValuePair (x.name) x)
57+ (haskellLib.flatLibDepends {depends = directlySelectedComponents;}));
58+
59+ isSelectedComponent =
60+ comp: selectedComponentsBitmap."${((haskellLib.dependToLib comp).name or null)}" or false;
61+ selectedComponentsBitmap =
62+ lib.mapAttrs
63+ (_: x: (builtins.any isSelectedComponent x.config.depends))
64+ transitiveDependenciesComponents
65+ // builtins.listToAttrs (map (x: lib.nameValuePair x.name true) directlySelectedComponents); # base case
66+
67+ selectedComponents =
68+ lib.filter isSelectedComponent (lib.attrValues transitiveDependenciesComponents);
69+
70+ # Given a list of `depends`, removes those which are selected components
71+ removeSelectedInputs =
72+ lib.filter (input: !(isSelectedComponent input));
73+
74+ # The configs of all the selected components.
75+ # This excludes the `setup` dependencies of `Simple` packages, because
76+ # `cabal-install` does not build a `Setup` executable for `Simple` packages.
77+ selectedConfigs = map (c: c.config) selectedComponents
78+ ++ lib.optionals packageSetupDeps (map (p: p.setup.config)
79+ (lib.filter (p: p.buildType != "Simple") selectedPackages));
80+
81+ name = if lib.length selectedPackages == 1
82+ then "ghc-shell-for-${(lib.head selectedPackages).identifier.name}"
83+ else "ghc-shell-for-packages";
84+
85+ # We need to remove any dependencies which would bring in selected components (see above).
86+ packageInputs = removeSelectedInputs (lib.concatMap (cfg: cfg.depends) selectedConfigs)
87+ ++ additionalPackages;
88+
89+ # Add the system libraries and build tools of the selected haskell packages to the shell.
90+ # We need to remove any inputs which are selected components (see above).
91+ # `buildInputs`, `propagatedBuildInputs`, and `executableToolDepends` contain component
92+ # derivations, not packages, so we use `removeSelectedInputs`).
93+ systemInputs = removeSelectedInputs (lib.concatMap
94+ (c: c.buildInputs ++ c.propagatedBuildInputs) selectedComponents);
95+ nativeBuildInputs = removeSelectedInputs
96+ (lib.concatMap (c: c.executableToolDepends) selectedComponents);
97+
98+ # Set up a "dummy" component to use with ghcForComponent.
99+ component = {
100+ depends = packageInputs;
101+ libs = [];
102+ pkgconfig = [];
103+ frameworks = [];
104+ doExactConfig = false;
105+ };
106+ configFiles = makeConfigFiles {
107+ fullName = args.name or name;
108+ identifier.name = name;
109+ inherit component enableDWARF;
110+ chooseDrv = p: if withHaddock && p ? haddock then p.haddock else p;
111+ };
112+ ghcEnv = ghcForComponent {
113+ inherit configFiles;
114+ componentName = name;
115+ postInstall = lib.optionalString withHoogle' ''
116+ ln -s ${hoogleIndex}/bin/hoogle $out/bin
117+ '';
118+ inherit enableDWARF;
119+ plugins = [];
120+ };
121+
122+ hoogleIndex = let
123+ # Get the doc package for a component, and add attributes that
124+ # hoogle.nix expects.
125+ docPackage = p: lib.getOutput "doc" p // {
126+ pname = p.identifier.name;
127+ haddockDir = lib.const p.haddockDir;
128+ };
129+ in hoogleLocal ({
130+ packages = map docPackage (haskellLib.flatLibDepends component);
131+
132+ # Need to add hoogle to hsPkgs.
133+ # inherit (hsPkgs) hoogle;
134+ } // (
135+ lib.optionalAttrs (args ? tools && args.tools ? hoogle) {
136+ hoogle = buildPackages.haskell-nix.hackage-tool (
137+ haskellLib.versionOrModToMods args.tools.hoogle ++ [{
138+ name = "hoogle";
139+ compiler-nix-name = compiler.nix-name;
140+ inherit evalPackages;
141+ }]);
142+ }
143+ ));
144+
145+ mkDrvArgs = builtins.removeAttrs args ["packages" "components" "additional" "withHoogle" "tools"];
146+in
147+ mkShell (mkDrvArgs // {
148+ name = mkDrvArgs.name or name;
149+
150+ buildInputs = systemInputs
151+ ++ mkDrvArgs.buildInputs or [];
152+ nativeBuildInputs = [ ghcEnv ]
153+ ++ nativeBuildInputs
154+ ++ mkDrvArgs.nativeBuildInputs or []
155+ ++ lib.attrValues (buildPackages.haskell-nix.tools' evalPackages compiler.nix-name tools)
156+ # If this shell is a cross compilation shell include
157+ # wrapper script for running cabal build with appropriate args.
158+ # Includes `--with-compiler` in case the `cabal.project` file has `with-compiler:` in it.
159+ ++ lib.optional (ghcEnv.targetPrefix != "") (
160+ buildPackages.writeShellScriptBin "${ghcEnv.targetPrefix}cabal" ''
161+ exec cabal \
162+ --with-ghc=${ghcEnv.targetPrefix}ghc \
163+ --with-compiler=${ghcEnv.targetPrefix}ghc \
164+ --with-ghc-pkg=${ghcEnv.targetPrefix}ghc-pkg \
165+ --with-hsc2hs=${ghcEnv.targetPrefix}hsc2hs \
166+ ${lib.optionalString (ghcEnv.targetPrefix == "js-unknown-ghcjs-") ''
167+ --with-ghcjs=${ghcEnv.targetPrefix}ghc \
168+ --with-ghcjs-pkg=${ghcEnv.targetPrefix}ghc-pkg \
169+ --ghcjs \
170+ ''} $(builtin type -P "${ghcEnv.targetPrefix}pkg-config" &> /dev/null && echo "--with-pkg-config=${ghcEnv.targetPrefix}pkg-config") \
171+ "$@"
172+ '');
173+ phases = ["installPhase"];
174+ installPhase = ''
175+ echo "${"Shell for " + toString (builtins.map (p : p.identifier.name) selectedPackages)}"
176+ echo $nativeBuildInputs $buildInputs > $out
177+ '';
178+
179+ # This helps tools like `ghcide` (that use the ghc api) to find
180+ # the correct global package DB.
181+ NIX_GHC_LIBDIR = ghcEnv + "/" + configFiles.libDir;
182+
183+ passthru = (mkDrvArgs.passthru or {}) // {
184+ ghc = ghcEnv;
185+ inherit configFiles;
186+ };
187+ } // lib.optionalAttrs exactDeps {
188+ CABAL_CONFIG = "${configFiles}/cabal.config";
189+ })
changelog.mdnew file+231
@@ -0,0 +1,231 @@
1+This file contains a summary of changes to Haskell.nix and `nix-tools`
2+that will impact users.
3+
4+## Jul 27, 2022
5+* Removed reliance on `builtins.currentSystem`. It was used it to provide
6+ `pkgs.evalPackages` via an overlay that it used to run derivations
7+ used in imports from derivation (IFDs).
8+
9+ These derivations are now run on `buildPackages` by default.
10+
11+ Passsing `evalPackages` to a project function will change where all the
12+ derivations used in IFDs are run for that project (including shell tools):
13+ evalPackages = import nixpkgs haskellNix.nixpkgsArgs;
14+
15+ Passing `evalSystem` instead will use create a suitable `nixpkgs` using `pkgs.path`
16+ and `pkgs.overlay`:
17+ evalSystem = "x86_64-linux";
18+ or
19+ evalSystem = builtins.currentSystem;
20+
21+ The `haskellLib.cleanGit` function is also affected by this change. If you are cross
22+ compiling and using `cleanGit` you should probably do something like:
23+ pkgs = import nixpkgs haskellNix.nixpkgsArgs;
24+ evalPackages = import nixpkgs (haskellNix.nixpkgsArgs // { system = evalSystem; });
25+ p = pkgs.pkgsCross.mingwW64.haskell-nix.cabalProject {
26+ inherit evalPackages;
27+ src = evalPackages.haskell-nix.haskellLib.cleanGit { src = ./.; };
28+ };
29+
30+## Feb 16, 2022
31+* Removed lookupSha256 argument from project functions.
32+ Pass a `sha256map` instead.
33+* Added better support for `repository` in `cabal.project`. These
34+ blocks should now work without the need for passing `extra-hackages` and
35+ `extra-hackage-tarballs`.
36+
37+## Aug 6, 2021
38+* Included dependencies of haskell.nix that were tracked in `nix/sources.json`
39+ as flake inputs (`flake.lock` replaces `nix/sources.json`).
40+* Uses `flake-compat` to continue to provide a compatible interface for non
41+ flake projects.
42+
43+## Jul 23, 2021
44+* `source-repository-package` references in `cabal.project` files are now
45+ left as a `source-repository-package` when calculating the the `plan-nix` for
46+ `cabalProject` based functions.
47+ This makes haskell.nix match the behaviour of `cabal` better.
48+ Materialized files for projects that use `source-repository-package`
49+ references will need to be updated.
50+* Only planned components are included in a haskell.nix cabal project.
51+ If cabal solver does not include the component in the `plan.json` file it
52+ will not be present in `hsPkgs.pkg.components`.
53+* When the same package occurs more than once in a plan.json file
54+ the latest version is picked by haskell.nix.
55+
56+## Apr 8, 2021
57+* Project arguments are now validated with the Nix module system.
58+ If unexpected argments are passed to a project function this may now
59+ result in an error.
60+
61+## Feb 22, 2021
62+* Add `.dwarf` to build any component with DWARF dubug info on linux
63+ (ghc >=8.10.2).
64+* Pass `enableDWARF` to `shellFor` for to get a shell where all the
65+ components are the `.dwarf` ones.
66+
67+## Feb 18, 2021
68+* `ghcOptions` has been moved from package and is now a list of strings.
69+ old: packages.x.package.ghcOptions = "someGHCoption";
70+ new: packages.x.ghcOptions = ["someGHCoption"];
71+ To specify ghcOptions for all packages:
72+ ghcOptions = ["someGHCoption"];
73+ For a single component:
74+ packages.x.compoents.library.ghcOptions = ["someGHCoption"];
75+
76+## Feb 8, 2021
77+* Removed older versions of haskell-language-server from custom-tools
78+ (0.8.0 is in hackage so we can still get that version).
79+
80+## Jan 14, 2021
81+* Added support for cross package refs (with a project). Relative
82+ directory references between packages within a project should now
83+ work.
84+* Added `includeSiblings` to `cleanSourceWith`. When `true` it
85+ prevents the `subDir` arg from causing filtering of other directories.
86+* Added `keepGitDir` to `cleanGit` to allow `.git` directory to be kept
87+ (useful for components that use the `githash` package).
88+
89+## Nov 26, 2020
90+* Renamed `otherShells` arg for `shellFor` to `inputsFrom
91+
92+## Nov 25, 2020
93+* The `shellFor` `makeConfigFiles` `ghcWithHoogle` and `ghcWithPackages`
94+ functions have been removed from `project.hsPkgs`. Instead access
95+ them from `project` itself (e.g. change `p.hsPkgs.shellFor` to `p.shellFor`).
96+* The reflex-platform like `project.shells.ghc` has been removed.
97+ If needed, add something like `p // { shells.ghc = p.shellFor {} }`
98+ to `shell.nix`.
99+
100+## Nov 24, 2020
101+* Added `${targetPrefix}cabal` wrapper script for running cross
102+ compilers in `shellFor`.
103+* `otherShells` arg added to `shellFor`.
104+
105+## Oct 31, 2020
106+* Passing `tools.hoogle` to `shellFor` with a value suitable for `haskel-nix.tool` will
107+ use the specified `hoogle` inside `shellFor`. This allows for materialization
108+ of `hoogle`.
109+
110+## Oct 28, 2020
111+* Passing `compiler-nix-name` to project functions for `stack.yaml`
112+ based projects now overrides the compiler used (was ignored before).
113+
114+## Sep 8, 2020
115+* Added the ability to generate coverage reports for packages and
116+ projects.
117+* Added the `doCoverage` module option that allows users to choose
118+ packages to enable coverage for.
119+* Added a `doCoverage` flag to the component builder that outputs HPC
120+ information when coverage is enabled.
121+* Added test for coverage.
122+
123+## July 21, 2020
124+* Removed `components.all`, use `symlinkJoin` on components.exes or
125+ `shellFor` if you need a shell.
126+* Added `components` argument to `shellFor`.
127+
128+## July 21, 2020
129+* Added GHC 8.8.4 and replaced 8.8.3 in tests and as the ghc
130+ used to build nix-tools for stack projects.
131+
132+## July 20, 2020
133+* Changed `haskell-nix.roots` and `p.roots` to single derivations.
134+
135+## July 8, 2020
136+* Removed `sources.nixpkgs-default`, use `sources.nixpkgs` instead.
137+* Removed `./nixpkgs` directory, use `(import ./. {}).sources`
138+ or `./nix/sources.nix` instead.
139+* Removes V1 interface for details on how to fix old code see:
140+ https://github.com/input-output-hk/haskell.nix/issues/709
141+* Removed defaultCompilerNixName.
142+* cabalProject, cabalProject', hackage-project and hackage-package
143+ now require a `compiler-nix-name` argument.
144+* `haskell-nix.tool` and `.tools` now require a `compiler-nix-name` argument.
145+ New functions `p.tool` and `p.tools` (where p is a project) do not.
146+ Like `shellFor { tools = ... }` they will use the compiler nix name
147+ from the project (including stack projects where it is derived from
148+ the resolver).
149+* `haskell-nix.alex` and `haskell-nix.happy` have been removed. Use
150+ `p.tool "alex" "3.2.5"` or `shellFor { tools = { alex = "3.2.5"; } }`.
151+* `haskell-nix.nix-tools` -> `haskell-nix.nix-tools.ghc883` (it includes
152+ the hpack exe now).
153+* `haskell-nix.cabal-install` ->
154+ `p.tool "cabal" "3.2.0.0"` or `shellFor { tools = { cabal = "3.2.0.0"; } }`
155+* `haskell-nix.haskellNixRoots` -> `haskell-nix.roots ghc883` or `p.roots`
156+
157+## June 25, 2020
158+* Haddock docs are now built in their own derivation when needed (not as part
159+ of the component build).
160+ They should build automatically when something (such as `shellFor`) attempts
161+ to accesses the `.doc` attribute of component.
162+
163+## December 27, 2019
164+* Fix overlays/bootstrap.nix to provide LLVM 6, not LLVM 5, to ghc-8.6.X compilers.
165+
166+## November 18, 2019
167+ * Changed the `cleanSourceHaskell` to accept an attrset of `src` and
168+ (optional) `name` parameters. This allows you to keep the source
169+ derivation name constant, so that your builds are always
170+ cached. Usage of `cleanSourceHaskell` will need to be updated.
171+
172+## October 12, 2019
173+ * [`shellFor`](https://input-output-hk.github.io/haskell.nix/reference/library/#shellfor) no longer sets `CABAL_CONFIG` by default.
174+ This avoids surprising users, but means that Cabal may select a plan which is different to your Haskell.nix package set.
175+ If you would like the old behaviour, use `shellFor { exactDeps = true; }`.
176+
177+## August 9, 2019
178+ * Add the [`haskellLib.collectComponents`](https://input-output-hk.github.io/haskell.nix/reference/library/#haskellLib) function.
179+
180+## June 21, 2019
181+ * Add `ghcWithPackages` and `ghcWithHoogle` to hsPkgs ([documentation](https://input-output-hk.github.io/haskell.nix/reference/library/#package-set-functions).
182+ * Benchmark components can now build successfully.
183+ * Reduced the closure bloat of nix-tools, and added closure size limit to CI.
184+ * Added more reference documentation and set up auto-generated
185+ documentation for [Module Options](https://input-output-hk.github.io/haskell.nix/reference/modules/).
186+ * Miscellaneous bug fixes.
187+
188+## June 7, 2019
189+ * Several additions to the [documentation](https://input-output-hk.github.io/haskell.nix/).
190+ * More information about getting nix-tools, Haskell.nix, pinning.
191+ * Updates the stack-to-nix and cabal-to-nix guides.
192+ * Adds a section on development environments.
193+ * Adds a little information about cross compilation.
194+ * Adds a (partially complete) reference section (command line manuals, library reference).
195+ * Symlinks the changelog into the documentation pages.
196+
197+## May 29, 2019
198+ * Added `shellFor` function to package set.
199+
200+## May 28, 2019
201+ * Added `snaphots` and `haskellPackages` attributes to the
202+ Haskell.nix top-level.
203+
204+## May 22, 2019
205+ * Add the `cleanSourceHaskell` utility function to the Haskell.nix
206+ top-level.
207+
208+## May 21, 2019
209+ * Add the `callCabalProjectToNix` function, which uses "import from
210+ derivation" (IFD) so that nix-tools doesn't need to be run
211+ manually.
212+ * The `hackage.nix` update process has changed, so that Cabal index
213+ state hashes are also included in the generated repo.
214+
215+## May 20, 2019
216+ * Remove Travis CI in favour of Buildkite.
217+
218+## May 17, 2019
219+ * Add the `callStackToNix` function, which uses "import from
220+ derivation" (IFD) so that `stack-to-nix` doesn't need to be run
221+ manually.
222+
223+## Mar 15, 2019
224+ * `overlays` was renamed to `extras` in
225+ [#79](https://github.com/input-output-hk/haskell.nix/pull/79)
226+ to prevent confusion between the notion of Nix overlays.
227+
228+ Therefore `plan-pkgs` and `stack-pkgs` as generated by `plan-to-nix` and `stack-to-nix` will
229+ expose `extras` instead of `overlay`. Similarly `mkStackPkgSet`, `mkPkgSet` and `mkCabalProjectPkgSet`
230+ take a `pkg-def-extras` instead of `pkg-def-overlay` argument. If you are using `iohk-nix`, the
231+ `iohk-overlay` was parameter was renamed to `iohk-extras`.
ci-lib.nixnew file+45
@@ -0,0 +1,45 @@
1+{
2+ # Generic nixpkgs, use *only* for lib functions that are stable across versions
3+ pkgs ? (import ./. {}).pkgs,
4+ lib ? pkgs.lib
5+}: rec {
6+ inherit (import ./dimension.nix) dimension;
7+
8+ # A filter for removing packages that aren't supported on the current platform
9+ # according to 'meta.platforms'.
10+ platformFilterGeneric = pkgs: system:
11+ # This needs to use the correct nixpkgs version so all the systems line up
12+ let lib = pkgs.lib;
13+ platform = lib.systems.elaborate { inherit system; };
14+ # Can't just default to [] for platforms, since no meta.platforms
15+ # means "all platforms" not "no platforms"
16+ in drv : if drv ? meta && drv.meta ? platforms then
17+ lib.any (lib.meta.platformMatch platform) drv.meta.platforms
18+ else true;
19+
20+ # Hydra doesn't like these attributes hanging around in "jobsets": it thinks they're jobs!
21+ stripAttrsForHydra = filterAttrsOnlyRecursive (n: _: n != "recurseForDerivations" && n != "dimension");
22+
23+ # Keep derivations and attrsets with 'recurseForDerivations'. This ensures that we match the
24+ # derivations that Hercules will see, and prevents Hydra from trying to pick up all sorts of bad stuff
25+ # (like attrsets that contain themselves!).
26+ filterDerivations = filterAttrsOnlyRecursive (n: attrs: lib.isDerivation attrs || attrs.recurseForDerivations or false);
27+
28+ # A version of 'filterAttrsRecursive' that doesn't recurse into derivations. This prevents us from going into an infinite
29+ # loop with the 'out' attribute on derivations.
30+ # TODO: Surely this shouldn't be necessary. I think normal 'filterAttrsRecursive' will effectively cause infinite loops
31+ # if you keep derivations and your predicate forces the value of the attribute, as this then triggers a loop on the
32+ # 'out' attribute. Weird.
33+ # To make this function faster, unwanted attributes are mapped to {} instead of being
34+ # removed. This keeps the function lazy and avoids unwanted evaluation of sibling
35+ # derivations.
36+ filterAttrsOnlyRecursive = pred: set:
37+ lib.mapAttrs (name: v:
38+ if pred name v
39+ then
40+ if builtins.isAttrs v
41+ && !lib.isDerivation v
42+ then filterAttrsOnlyRecursive pred v
43+ else v
44+ else {}) set;
45+}
ci.nixnew file+126
@@ -0,0 +1,126 @@
1+# 'supportedSystems' restricts the set of systems that we will evaluate for. Useful when you're evaluating
2+# on a machine with e.g. no way to build the Darwin IFDs you need!
3+{ supportedSystems ? [ "x86_64-linux" "x86_64-darwin" ]
4+, ifdLevel ? 3
5+# Whether or not we are evaluating in restricted mode. This is true in Hydra, but not in Hercules.
6+, restrictEval ? false
7+, checkMaterialization ? false
8+, pkgs ? (import ./. {}).pkgs }:
9+ let
10+ inherit (import ./ci-lib.nix { inherit pkgs; }) dimension platformFilterGeneric filterAttrsOnlyRecursive;
11+ inherit (pkgs.haskell-nix) sources;
12+ nixpkgsVersions = {
13+ "R2111" = "nixpkgs-2111";
14+ "R2205" = "nixpkgs-2205";
15+ "unstable" = "nixpkgs-unstable";
16+ };
17+ haskellNix = import ./default.nix { inherit checkMaterialization; };
18+ nixpkgsArgs = haskellNix.nixpkgsArgs // {
19+ # Needed for dwarf tests
20+ config = haskellNix.nixpkgsArgs.config // {
21+ permittedInsecurePackages = ["libdwarf-20210528" "libdwarf-20181024" "dwarfdump-20181024"];
22+ };
23+ };
24+ compilerNixNames = nixpkgsName: nixpkgs: builtins.mapAttrs (compiler-nix-name: runTests: {
25+ inherit runTests;
26+ }) (
27+ # GHC version to cache and whether to run the tests against them.
28+ # This list of GHC versions should include everything for which we
29+ # have a ./materialized/ghcXXX directory containing the materialized
30+ # cabal-install and nix-tools plans. When removing a ghc version
31+ # from here (so that is no longer cached) also remove ./materialized/ghcXXX.
32+ # Update supported-ghc-versions.md to reflect any changes made here.
33+ nixpkgs.lib.optionalAttrs (nixpkgsName == "R2111") {
34+ ghc865 = false;
35+ ghc8107 = true;
36+ } // nixpkgs.lib.optionalAttrs (nixpkgsName == "R2205") {
37+ ghc865 = false;
38+ ghc8107 = true;
39+ } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") {
40+ ghc865 = false;
41+ ghc884 = false; # Native version is used to boot 9.0.1
42+ ghc8107 = true;
43+ ghc902 = true;
44+ ghc924 = true;
45+ });
46+ systems = nixpkgsName: nixpkgs: compiler-nix-name: nixpkgs.lib.genAttrs (
47+ nixpkgs.lib.filter (v:
48+ # We have less x86_64-darwin build capacity so build fewer GhC versions
49+ (v != "x86_64-darwin" || (
50+ !__elem compiler-nix-name ["ghc8104" "ghc810420210212" "ghc8105" "ghc8106" "ghc901" "ghc921" "ghc922"]))
51+ &&
52+ # aarch64-darwin requires ghc 8.10.7
53+ (v != "aarch64-darwin" || (
54+ !__elem compiler-nix-name ["ghc865" "ghc884" "ghc8104" "ghc810420210212" "ghc8105" "ghc8106" "ghc901" "ghc921" "ghc922"]))
55+ &&
56+ # aarch64-linux requires ghc 8.8.4
57+ (v != "aarch64-linux" || (
58+ !__elem compiler-nix-name ["ghc865" "ghc8104" "ghc810420210212" "ghc8105" "ghc8106" "ghc901" "ghc921" "ghc922"]
59+ ))) supportedSystems) (v: v);
60+ crossSystems = nixpkgsName: nixpkgs: compiler-nix-name: system:
61+ # We need to use the actual nixpkgs version we're working with here, since the values
62+ # of 'lib.systems.examples' are not understood between all versions
63+ let lib = nixpkgs.lib;
64+ in lib.optionalAttrs (nixpkgsName == "unstable"
65+ && ((system == "x86_64-linux" && __elem compiler-nix-name ["ghc865" "ghc884" "ghc8107"])
66+ || (system == "x86_64-darwin" && __elem compiler-nix-name ["ghc8107"]))) {
67+ inherit (lib.systems.examples) ghcjs;
68+ } // lib.optionalAttrs (nixpkgsName == "unstable"
69+ && ((system == "x86_64-linux" && __elem compiler-nix-name ["ghc8107" "ghc902" "ghc924"])
70+ || (system == "x86_64-darwin" && __elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity
71+ inherit (lib.systems.examples) mingwW64;
72+ } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && __elem compiler-nix-name ["ghc8107" "ghc902" "ghc922" "ghc923" "ghc924"]) {
73+ # Musl cross only works on linux
74+ # aarch64 cross only works on linux
75+ inherit (lib.systems.examples) musl64 aarch64-multiplatform;
76+ };
77+ isDisabled = d: d.meta.disabled or false;
78+in
79+dimension "Nixpkgs version" nixpkgsVersions (nixpkgsName: nixpkgs-pin:
80+ let pinnedNixpkgsSrc = sources.${nixpkgs-pin};
81+ evalPackages = import pinnedNixpkgsSrc nixpkgsArgs;
82+ in dimension "GHC version" (compilerNixNames nixpkgsName evalPackages) (compiler-nix-name: {runTests}:
83+ dimension "System" (systems nixpkgsName evalPackages compiler-nix-name) (systemName: system:
84+ let pkgs = import pinnedNixpkgsSrc (nixpkgsArgs // { inherit system; });
85+ build = import ./build.nix { inherit pkgs evalPackages ifdLevel compiler-nix-name; };
86+ platformFilter = platformFilterGeneric pkgs system;
87+ in filterAttrsOnlyRecursive (_: v: platformFilter v && !(isDisabled v)) ({
88+ # Native builds
89+ # TODO: can we merge this into the general case by picking an appropriate "cross system" to mean native?
90+ native = pkgs.recurseIntoAttrs ({
91+ roots = pkgs.haskell-nix.roots' compiler-nix-name ifdLevel;
92+ ghc = pkgs.buildPackages.haskell-nix.compiler."${compiler-nix-name}";
93+ } // pkgs.lib.optionalAttrs runTests {
94+ inherit (build) tests tools maintainer-scripts maintainer-script-cache;
95+ } // pkgs.lib.optionalAttrs (ifdLevel >= 1) {
96+ iserv-proxy = pkgs.ghc-extra-projects."${compiler-nix-name}".getComponent "iserv-proxy:exe:iserv-proxy";
97+ } // pkgs.lib.optionalAttrs (ifdLevel >= 3) {
98+ hello = (pkgs.haskell-nix.hackage-package { name = "hello"; version = "1.0.0.2"; inherit evalPackages compiler-nix-name; }).getComponent "exe:hello";
99+ });
100+ }
101+ //
102+ dimension "Cross system" (crossSystems nixpkgsName evalPackages compiler-nix-name system) (crossSystemName: crossSystem:
103+ # Cross builds
104+ let pkgs = import pinnedNixpkgsSrc (nixpkgsArgs // { inherit system crossSystem; });
105+ build = import ./build.nix { inherit pkgs evalPackages ifdLevel compiler-nix-name; };
106+ in pkgs.recurseIntoAttrs (pkgs.lib.optionalAttrs (ifdLevel >= 1) ({
107+ roots = pkgs.haskell-nix.roots' compiler-nix-name ifdLevel;
108+ ghc = pkgs.buildPackages.haskell-nix.compiler."${compiler-nix-name}";
109+ # TODO: look into cross compiling ghc itself
110+ # ghc = pkgs.haskell-nix.compiler."${compiler-nix-name}";
111+ # TODO: look into making tools work when cross compiling
112+ # inherit (build) tools;
113+ } // pkgs.lib.optionalAttrs (runTests && crossSystemName != "aarch64-multiplatform") {
114+ # Tests are broken on aarch64 cross https://github.com/input-output-hk/haskell.nix/issues/513
115+ inherit (build) tests;
116+ }) // pkgs.lib.optionalAttrs (ifdLevel >= 2 && crossSystemName != "ghcjs") {
117+ # GHCJS builds its own template haskell runner.
118+ remote-iserv = pkgs.ghc-extra-projects."${compiler-nix-name}".getComponent "remote-iserv:exe:remote-iserv";
119+ iserv-proxy = pkgs.ghc-extra-projects."${compiler-nix-name}".getComponent "iserv-proxy:exe:iserv-proxy";
120+ } // pkgs.lib.optionalAttrs (ifdLevel >= 3) {
121+ hello = (pkgs.haskell-nix.hackage-package { name = "hello"; version = "1.0.0.2"; inherit compiler-nix-name; }).getComponent "exe:hello";
122+ })
123+ ))
124+ )
125+ )
126+)
compat/cabal-licenses.nixdeleted−14
@@ -1,14 +0,0 @@
1−stdenv: with stdenv.lib.licenses;
2−{ BSD-3-Clause = bsd3;
3− BSD-2-Clause = bsd2;
4− MIT = mit;
5− ISC = isc;
6− "LGPL-2.1-only" = lgpl21;
7− "LGPL-3.0-only" = lgpl3;
8− "GPL-3.0-only" = gpl3;
9− "Apache-2.0" = asl20;
10− # Generic
11− LicenseRef-LGPL = "LGPL";
12− LicenseRef-PublicDomain = publicDomain;
13− LicenseRef-OtherLicense = null;
14−}
compat/default.nixdeleted−2
@@ -1,2 +0,0 @@
1−hackage:
2−{ license-map = import ./cabal-licenses.nix; platform-map = import ./cabal-os-arch-comp.nix; host-map = import ./host-map.nix; driver = import ./driver.nix hackage; }
compat/driver.nixdeleted−119
@@ -1,119 +0,0 @@
1−hackage:
2−{ cabalexpr, pkgs, compiler ? "Ghc", version, os ? "Osx", arch ? "X86_64" }:
3−assert (builtins.elem compiler ["Ghc" "Ghcjs" "Nhc" "Yhc" "Hugs" "Hbc" "Helium" "Jhc" "Lhc" "Uhc" "Eta"]);
4−assert (builtins.elem os ["Linux" "Windows" "Osx" "FreeBSD" "OpenBSD" "NetBSD" "DragonFly" "Solaris" "AIX" "HPUX" "IRIX" "HaLVM" "Hurd" "IOS" "Android" "Ghcjs"]);
5−assert (builtins.elem arch ["I386" "X86_64" "PPC" "PPC64" "Sparc" "Arm" "Aarch64" "Mips" "SH" "IA64" "S390" "Alpha" "Hppa" "Rs6000" "M68k" "Vax" "JavaScript"]);
6−
7−with rec {
8− # utilities
9− collectAttr = a: s: pkgs.lib.lists.fold (e: acc: (if e ? ${a} then e.${a} else []) ++ acc) [] (builtins.attrValues s);
10−
11− # resolver for cabal license to nix license
12− resolve = { license = stdenv: license: (import ./cabal-licenses.nix stdenv).${license}; };
13−
14− # cabal os, arch and compilers.
15− cabal = import ./cabal-os-arch-comp.nix;
16−
17− expr0 = flags: extraHsPkgs: let e = cabalexpr {
18− inherit flags;
19− # null out self references. Tests, Benchmarks, ...
20− # naturally depend on the package (as a library), but
21− # we don't want those dependencies.
22− hsPkgs = pkgs.haskellPackages
23− // { ${e.package.identifier.name} = null; }
24− // extraHsPkgs;
25− # We also need to do some system pkgs -> haskell pkgs
26− # resolution.
27− pkgs = pkgs
28− # fetchgit should always come from the buildPackages
29− # if it comes from the targetPackages we won't even
30− # be able to execute it.
31− // { fetchgit = pkgs.buildPackages.fetchgit; }
32− # haskell lib -> nix lib mapping
33− // { crypto = pkgs.openssl;
34− "c++" = null; # no libc++
35− "stdc++" = null; "stdc++-6" = null;
36− ssl = pkgs.openssl;
37− z = pkgs.zlib;
38− pthread = null; # available by default
39− }
40− # -- windows
41− // { advapi32 = null; gdi32 = null; imm32 = null; msimg32 = null;
42− shell32 = null; shfolder = null; shlwapi = null; user32 = null;
43− winmm = null;
44− kernel32 = null; ws2_32 = null;
45−
46− # this should be bundled with gcc.
47− # if it's not we have more severe
48− # issues anyway.
49− gcc_s_seh-1 = null;
50−
51− ssl32 = null; eay32 = pkgs.openssl;
52−
53− iphlpapi = null; # IP Help API
54−
55− msvcrt = null; # this is the libc
56−
57− Crypt32 = null;
58− }
59− # -- os x
60− // pkgs.darwin.apple_sdk.frameworks;
61−
62− # package-conf mappings.
63− # pkgconfig name -> nix package
64− pkgconfPkgs = { libpcre = pkgs.pcre; };
65−
66− compiler = cabal.compiler // {
67− "is${compiler}" = true;
68− version = rec {
69− eq = v: builtins.compareVersions version v == 0;
70− lt = v: builtins.compareVersions version v == -1;
71− gt = v: builtins.compareVersions version v == 1;
72− le = v: eq v || lt v;
73− ge = v: eq v || gt v;
74− };
75− };
76− system = cabal.os // { "is${os}" = true; }
77− // cabal.arch // { "is${arch}" = true; };
78− }; in e;
79−};
80−# These are the keys that <pkg>.override can override.
81−# the ... is used to allow to override all potential
82−# other keys, that the builder understands.
83−{ mkDerivation, stdenv, flags ? {}, hsPkgs ? {}, ... }@args:
84−let expr = expr0 flags hsPkgs;
85− pname = expr.package.identifier.name;
86− pversion = expr.package.identifier.version;
87− builderArgs = {
88− inherit pname;
89− version = pversion;
90− sha256 = hackage.hashes.${pname}.${pversion} or null;
91−
92− isLibrary = builtins.hasAttr pname expr.components;
93− isExecutable = builtins.hasAttr "exes" expr.components;
94−
95− homepage = expr.package.homepage;
96− description = expr.package.synopsis;
97− license = resolve.license stdenv expr.package.license;
98−
99− configureFlags = pkgs.lib.mapAttrsToList (flag: enabled: (if enabled then "-f" else "-f-") + flag) expr.flags;
100− } // pkgs.lib.optionalAttrs (builtins.hasAttr pname expr.components) {
101− libraryHaskellDepends = expr.components.${pname}.depends or [];
102− libraryPkgconfigDepends = expr.components.${pname}.pkgconfig or [];
103− librarySystemDepends = (expr.components.${pname}.libs or []) ++ pkgs.lib.optionals (os == "Osx") (expr.components.${pname}.frameworks or []);
104− libraryToolDepends = expr.components.${pname}.build-tools or [];
105− } // pkgs.lib.optionalAttrs (builtins.hasAttr "exes" expr.components) {
106− executableHaskellDepends = collectAttr "depends" expr.components.exes;
107− executableToolDepends = collectAttr "build-tools" expr.components.exes;
108− } // pkgs.lib.optionalAttrs (builtins.hasAttr "tests" expr.components) {
109− testHaskellDepends = collectAttr "depends" expr.components.tests;
110− } // pkgs.lib.optionalAttrs (builtins.hasAttr "benchmarks" expr.components) {
111− benchmarkHaskellDepends = collectAttr "depends" expr.components.benchmarks;
112− } // pkgs.lib.optionalAttrs (builtins.hasAttr "src" expr) {
113− inherit (expr) src;
114− } // pkgs.lib.optionalAttrs (builtins.hasAttr "postUnpack" expr) {
115− inherit (expr) postUnpack;
116− } // builtins.removeAttrs args [ "mkDerivation" "stdenv" "flags" "hsPkgs" ];
117−in mkDerivation (builderArgs // pkgs.lib.optionalAttrs (expr.cabal-generator or "" == "hpack")
118− { preConfigure = "hpack;" + (builderArgs.preConfigure or "");
119− libraryToolDepends = builderArgs.libraryToolDepends ++ [ pkgs.haskellPackages.hpack ]; })
compat/host-map.nixdeleted−20
@@ -1,20 +0,0 @@
1−stdenv: with stdenv.hostPlatform; {
2− os = if isLinux then "Linux" else
3− if isWindows then "Windows" else
4− if isDarwin then "Osx" else
5− if isFreeBSD then "Freebsd" else
6− if isOpenBSD then "Openbsd" else
7− if isNetBSD then "Netbsd" else
8− if isHurd then "Hurd" else
9− if isiOS then "Ios" else
10− if isAndroid then "Android" else
11− throw "Unknown OS";
12− arch = if isx86 && is32bit then "I386" else
13− if isx86 && is64bit then "X86_64" else
14− if isPowerPC && is32bit then "PPC" else
15− if isPowerPC && is64bit then "PPC64" else
16− if isArm && is32bit then "Arm" else
17− if isArm && is64bit then "Aarch64" else
18− if isMips then "Mips" else
19− throw "Unknown Arch";
20−}
compiler/bootstrap/cabal-install.nixnew file+82
@@ -0,0 +1,82 @@
1+{ fetchurl, hackage, stdenv, lib, ghc, zlib, src, version }:
2+let dependencies =
3+ [ { name = "deepseq"; version = "1.4.3.0"; }
4+ { name = "binary"; version = "0.8.5.1"; }
5+ { name = "time"; version = "1.9.1"; }
6+ { name = "transformers"; version = "0.5.5.0"; }
7+ { name = "mtl"; version = "2.2.2"; }
8+ { name = "text"; version = "1.2.3.0"; }
9+ { name = "parsec"; version = "3.1.13.0"; }
10+ { name = "network-uri"; version = "2.6.1.0"; }
11+ { name = "network"; version = "2.7.0.0"; }
12+ { name = "HTTP"; version = "4000.3.12"; }
13+ { name = "zlib"; version = "0.6.2"; }
14+ { name = "random"; version = "1.1"; }
15+ { name = "stm"; version = "2.4.5.0"; }
16+ { name = "hashable"; version = "1.2.7.0"; }
17+ { name = "async"; version = "2.2.1"; }
18+ { name = "base16-bytestring"; version = "0.1.1.6"; }
19+ { name = "base64-bytestring"; version = "1.0.0.1"; }
20+ { name = "cryptohash-sha256"; version = "0.11.101.0";}
21+ { name = "resolv"; version = "0.1.1.1"; }
22+ { name = "mintty"; version = "0.1.2"; }
23+ { name = "echo"; version = "0.1.3"; }
24+ { name = "edit-distance"; version = "0.2.2.1"; }
25+ { name = "ed25519"; version = "0.0.5.0"; }
26+ { name = "tar"; version = "0.5.1.0"; }
27+ { name = "digest"; version = "0.0.1.2"; }
28+ { name = "zip-archive"; version = "0.3.3"; }
29+ { name = "hackage-security"; version = "0.5.3.0"; }
30+ ]; in
31+let depPaths = builtins.map ({name, version}:
32+ fetchurl {
33+ url = "mirror://hackage/${name}-${version}.tar.gz";
34+ inherit (hackage.${name}.${version}) sha256; }) dependencies;
35+in stdenv.mkDerivation ({
36+ name = "cabal-install";
37+
38+ inherit version;
39+
40+ passthru = {
41+ inherit version;
42+ };
43+
44+ meta = {
45+ platforms = lib.platforms.all;
46+ };
47+
48+ nativeBuildInputs = [ ghc zlib ];
49+
50+ inherit src;
51+
52+ configurePhase = "";
53+
54+ buildPhase = ''
55+ # We need the .git directory to make the ./bootstrap command use ../Cabal.
56+ mkdir .git
57+
58+ cd cabal-install
59+ # unpack dependencies, so we can bootstrap without network.
60+ for dep in ${builtins.concatStringsSep " " depPaths}; do
61+ tar xzf $dep
62+ done
63+
64+ # make sure we have the patched (revised) .cabal files.
65+ ${builtins.concatStringsSep "\n"
66+ (builtins.map ({name, version}:
67+ let revInfo = hackage.${name}.${version}.revisions.default; in
68+ if revInfo.revNum == null || revInfo.revNum == 0
69+ then ""
70+ else let revision = fetchurl { url = "https://hackage.haskell.org/package/${name}-${version}/revision/${toString revInfo.revNum}.cabal"; inherit (revInfo) sha256; }; in
71+ ''cp "${revision}" "${name}-${version}/${name}.cabal"''
72+ ) dependencies)
73+ }
74+ mkdir $out
75+ ghc-pkg init $out/packages.conf.d
76+ EXTRA_CONFIGURE_OPTS="" SCOPE_OF_INSTALLATION="--package-db=$out/packages.conf.d" PREFIX="$out" ./bootstrap.sh --no-doc -j
77+ '';
78+
79+ installPhase = ''
80+
81+ '';
82+})
compiler/ghc/default.nixnew file+512
@@ -0,0 +1,512 @@
1+# This is the nix expression to build ghc. The Glasgow Haskell Compiler. It is
2+# heavily inspired (and based) upon the ghc expression from nixos/nixpkgs.
3+# haskell.nix ships its own version of the ghc expression as it needs more
4+# control over the expression to isolate it against varying <nixpkgs> and
5+# allow us to customize it to the way haskell.nix works.
6+let self =
7+{ stdenv, lib, haskell-nix, targetPackages
8+
9+# build-tools
10+, bootPkgs
11+, buildPackages
12+, autoconf, automake, coreutils, fetchurl, fetchpatch, perl, python3, m4, sphinx, numactl, elfutils
13+, autoreconfHook
14+, bash
15+
16+, libiconv ? null
17+
18+, ncurses # TODO remove this once the cross compilers all work without
19+
20+, installDeps
21+
22+, # GHC can be built with system libffi or a bundled one.
23+ libffi ? null
24+
25+, useLLVM ? !stdenv.targetPlatform.isx86
26+, # LLVM is conceptually a run-time-only dependency, but for
27+ # non-x86, we need LLVM to bootstrap later stages, so it becomes a
28+ # build-time dependency too.
29+ buildLlvmPackages, llvmPackages
30+
31+, # If enabled, GHC will be built with the GPL-free but slower integer-simple
32+ # library instead of the faster but GPLed integer-gmp library.
33+ enableIntegerSimple ? !(lib.any (lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms), gmp
34+, # If enabled, GHC will be built with the GPL-free native backend of the
35+ # bignum library that is nearly as fast as GMP
36+ enableNativeBignum ? !((lib.any (lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms) || enableIntegerSimple)
37+
38+, # If enabled, use -fPIC when compiling static libs.
39+ enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform && !stdenv.targetPlatform.isAarch32
40+
41+, # Whether to build dynamic libs for the standard library (on the target
42+ # platform). Static libs are always built.
43+ enableShared ? !haskell-nix.haskellLib.isCrossTarget
44+
45+, enableLibraryProfiling ? true
46+
47+, enableDWARF ? false
48+
49+, enableTerminfo ?
50+ # Terminfo does not work on older ghc cross arm and windows compilers
51+ (!haskell-nix.haskellLib.isCrossTarget || !(stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isWindows) || builtins.compareVersions ghc-version "8.10" >= 0)
52+
53+, # Wheter to build in NUMA support
54+ enableNUMA ? true
55+
56+, # What flavour to build. An empty string indicates no
57+ # specific flavour and falls back to ghc default values.
58+ ghcFlavour ? lib.optionalString haskell-nix.haskellLib.isCrossTarget (
59+ if useLLVM
60+ then "perf-cross"
61+ else "perf-cross-ncg"
62+ )
63+
64+, # Whether to disable the large address space allocator
65+ # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
66+ disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64
67+
68+, ghc-version ? src-spec.version
69+, ghc-version-date ? null
70+, src-spec
71+, ghc-patches ? []
72+
73+# extra values we want to have available as passthru values.
74+, extra-passthru ? {}
75+}@args:
76+
77+assert !(enableIntegerSimple || enableNativeBignum) -> gmp != null;
78+
79+# Early check to make sure only one of these is enabled
80+assert enableNativeBignum -> !enableIntegerSimple;
81+assert enableIntegerSimple -> !enableNativeBignum;
82+
83+let
84+ inherit (stdenv) buildPlatform hostPlatform targetPlatform;
85+ inherit (haskell-nix.haskellLib) isCrossTarget;
86+
87+ inherit (bootPkgs) ghc;
88+
89+ ghcHasNativeBignum = builtins.compareVersions ghc-version "9.0" >= 0;
90+
91+ bignumSpec =
92+ assert ghcHasNativeBignum -> !enableIntegerSimple;
93+ assert !ghcHasNativeBignum -> !enableNativeBignum;
94+ if ghcHasNativeBignum then ''
95+ BIGNUM_BACKEND = ${if enableNativeBignum then "native" else "gmp"}
96+ '' else ''
97+ INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
98+ '';
99+
100+ # TODO check if this possible fix for segfaults works or not.
101+ targetLibffi =
102+ # on native platforms targetPlatform.{libffi, gmp} do not exist; thus fall back
103+ # to the non-targetPlatform version in those cases.
104+ let targetLibffi = targetPackages.libffi or libffi; in
105+ # we need to set `dontDisableStatic` for musl for libffi to work.
106+ if stdenv.targetPlatform.isMusl
107+ then targetLibffi.overrideAttrs (old: { dontDisableStatic = true; })
108+ else targetLibffi;
109+
110+ targetGmp = targetPackages.gmp or gmp;
111+
112+ targetIconv = targetPackages.libiconv or libiconv;
113+
114+ targetNumactl = targetPackages.numactl or numactl;
115+
116+ # TODO(@Ericson2314) Make unconditional
117+ targetPrefix = lib.optionalString
118+ (targetPlatform != hostPlatform)
119+ "${targetPlatform.config}-";
120+
121+ buildMK = ''
122+ BuildFlavour = ${ghcFlavour}
123+ ifneq \"\$(BuildFlavour)\" \"\"
124+ include mk/flavours/\$(BuildFlavour).mk
125+ endif
126+ DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
127+ '' + bignumSpec + ''
128+ EXTRA_HADDOCK_OPTS += --quickjump --hyperlinked-source
129+ '' + lib.optionalString (targetPlatform != hostPlatform) ''
130+ CrossCompilePrefix = ${targetPrefix}
131+ '' + lib.optionalString isCrossTarget ''
132+ Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
133+ ''
134+ # GHC 9.0.1 fails to compile for musl unless HADDOC_DOCS = NO
135+ + lib.optionalString (isCrossTarget || (targetPlatform.isMusl && builtins.compareVersions ghc-version "9.0.1" >= 0)) ''
136+ HADDOCK_DOCS = NO
137+ BUILD_SPHINX_HTML = NO
138+ BUILD_SPHINX_PDF = NO
139+ '' + lib.optionalString enableRelocatedStaticLibs ''
140+ GhcLibHcOpts += -fPIC
141+ GhcRtsHcOpts += -fPIC
142+ GhcRtsCcOpts += -fPIC
143+ '' + lib.optionalString (enableRelocatedStaticLibs && targetPlatform.isx86_64 && !targetPlatform.isWindows) ''
144+ GhcLibHcOpts += -fexternal-dynamic-refs
145+ GhcRtsHcOpts += -fexternal-dynamic-refs
146+ '' + lib.optionalString enableDWARF ''
147+ GhcLibHcOpts += -g3
148+ GhcRtsHcOpts += -g3
149+ '' + lib.optionalString targetPlatform.useAndroidPrebuilt ''
150+ EXTRA_CC_OPTS += -std=gnu99
151+ '' + lib.optionalString (!enableTerminfo) ''
152+ WITH_TERMINFO=NO
153+ ''
154+ # musl doesn't have a system-linker. Only on x86, and on x86 we need it, as
155+ # our elf linker for x86_64 is broken.
156+ + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86)) ''
157+ compiler_CONFIGURE_OPTS += --flags=-dynamic-system-linker
158+ ''
159+ # While split sections are now enabled by default in ghc 8.8 for windows,
160+ # the seem to lead to `too many sections` errors when building base for
161+ # profiling.
162+ #
163+ # It appears that loading split sections through iserv on qemu-aarch64, is
164+ # particularly slow. Let's disable them for now.
165+ + lib.optionalString (targetPlatform.isWindows || targetPlatform.isAndroid) ''
166+ SplitSections = NO
167+ '' + lib.optionalString (!enableLibraryProfiling) ''
168+ BUILD_PROF_LIBS = NO
169+ '';
170+
171+ # Splicer will pull out correct variations
172+ libDeps = platform: lib.optional enableTerminfo [ targetPackages.ncurses targetPackages.ncurses.dev ]
173+ ++ [targetLibffi]
174+ ++ lib.optional (!enableIntegerSimple) gmp
175+ ++ lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv
176+ ++ lib.optional (enableNUMA && platform.isLinux && !platform.isAarch32 && !platform.isAndroid) numactl
177+ # Even with terminfo disabled some older ghc cross arm and windows compilers do not build unless `ncurses` is found and they seem to want the buildPlatform version
178+ ++ lib.optional (!enableTerminfo && haskell-nix.haskellLib.isCrossTarget && (stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isWindows) && builtins.compareVersions ghc-version "8.10" < 0) ncurses.dev;
179+
180+ toolsForTarget =
181+ if hostPlatform == buildPlatform then
182+ [ targetPackages.stdenv.cc ] ++ lib.optional useLLVM llvmPackages.llvm
183+ else assert targetPlatform == hostPlatform; # build != host == target
184+ [ stdenv.cc ] ++ lib.optional useLLVM buildLlvmPackages.llvm;
185+
186+ targetCC = builtins.head toolsForTarget;
187+
188+in
189+stdenv.mkDerivation (rec {
190+ version = ghc-version;
191+ name = "${targetPrefix}ghc-${version}";
192+
193+ patches = ghc-patches;
194+
195+ src = if src-spec ? file
196+ then src-spec.file
197+ else fetchurl { inherit (src-spec) url sha256; };
198+
199+ # configure was run by configured-src already.
200+ phases = [ "unpackPhase" "patchPhase" ]
201+ ++ lib.optional (ghc-patches != []) "autoreconfPhase"
202+ ++ [ "configurePhase" "buildPhase"
203+ "checkPhase" "installPhase"
204+ "fixupPhase"
205+ "installCheckPhase"
206+ "distPhase"
207+ ];
208+
209+ # GHC is a bit confused on its cross terminology.
210+ preConfigure =
211+ # This code is only included when cross compiling as it breaks aarch64-darwin native compilation
212+ lib.optionalString (targetPlatform != hostPlatform) ''
213+ for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
214+ export "''${env#TARGET_}=''${!env}"
215+ done
216+ # GHC is a bit confused on its cross terminology, as these would normally be
217+ # the *host* tools.
218+ export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
219+ export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
220+ # Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
221+ export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${lib.optionalString targetPlatform.isAarch32 ".gold"}"
222+ export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
223+ export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
224+ export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
225+ export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
226+ export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
227+ export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip"
228+ '' + ''
229+ echo -n "${buildMK}" > mk/build.mk
230+ sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
231+ '' + lib.optionalString useLLVM ''
232+ export LLC="${llvmPackages.llvm}/bin/llc"
233+ export OPT="${llvmPackages.llvm}/bin/opt"
234+ '' + lib.optionalString (!stdenv.isDarwin) ''
235+ export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}"
236+ '' + lib.optionalString stdenv.isDarwin ''
237+ export NIX_LDFLAGS+=" -no_dtrace_dof"
238+ '' + lib.optionalString targetPlatform.useAndroidPrebuilt ''
239+ sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
240+ '' + lib.optionalString targetPlatform.isMusl ''
241+ echo "patching llvm-targets for musl targets..."
242+ echo "Cloning these existing '*-linux-gnu*' targets:"
243+ grep linux-gnu llvm-targets | sed 's/^/ /'
244+ echo "(go go gadget sed)"
245+ sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
246+ echo "llvm-targets now contains these '*-linux-musl*' targets:"
247+ grep linux-musl llvm-targets | sed 's/^/ /'
248+
249+ echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
250+ # (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
251+ for x in configure aclocal.m4; do
252+ substituteInPlace $x \
253+ --replace '*-android*|*-gnueabi*)' \
254+ '*-android*|*-gnueabi*|*-musleabi*)'
255+ done
256+ '' + lib.optionalString (src-spec.version != ghc-version) ''
257+ substituteInPlace configure --replace 'RELEASE=YES' 'RELEASE=NO'
258+ echo '${ghc-version}' > VERSION
259+ '' + lib.optionalString (ghc-version-date != null) ''
260+ substituteInPlace configure --replace 'RELEASE=YES' 'RELEASE=NO'
261+ echo '${ghc-version-date}' > VERSION_DATE
262+ '' + lib.optionalString (builtins.compareVersions ghc-version "9.2.3" >= 0) ''
263+ ./boot
264+ '';
265+
266+ configurePlatforms = [ "build" "host" "target" ];
267+ # `--with` flags for libraries needed for RTS linker
268+ configureFlags = [
269+ "--datadir=$doc/share/doc/ghc"
270+ "--with-curses-includes=${targetPackages.ncurses.dev}/include" "--with-curses-libraries=${targetPackages.ncurses.out}/lib"
271+ ] ++ lib.optionals (targetLibffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetLibffi.dev}/include" "--with-ffi-libraries=${targetLibffi.out}/lib"
272+ ] ++ lib.optional (!enableIntegerSimple) [
273+ "--with-gmp-includes=${targetGmp.dev}/include" "--with-gmp-libraries=${targetGmp.out}/lib"
274+ ] ++ lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
275+ "--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
276+ ] ++ lib.optional (targetPlatform != hostPlatform) [
277+ "--with-iconv-includes=${targetIconv}/include" "--with-iconv-libraries=${targetIconv}/lib"
278+ ] ++ lib.optionals (targetPlatform != hostPlatform) [
279+ "--enable-bootstrap-with-devel-snapshot"
280+ ] ++ lib.optionals (disableLargeAddressSpace) [
281+ "--disable-large-address-space"
282+ ] ++ lib.optionals (targetPlatform.isAarch32) [
283+ "CFLAGS=-fuse-ld=gold"
284+ "CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
285+ "CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
286+ ] ++ lib.optionals enableDWARF [
287+ "--enable-dwarf-unwind"
288+ "--with-libdw-includes=${lib.getDev elfutils}/include"
289+ "--with-libdw-libraries=${lib.getLib elfutils}/lib"
290+ ];
291+
292+ enableParallelBuilding = true;
293+ postPatch = "patchShebangs .";
294+
295+ outputs = [ "out" "doc" "generated" ];
296+
297+ # Make sure we never relax`$PATH` and hooks support for compatibility.
298+ strictDeps = true;
299+
300+ # Don’t add -liconv to LDFLAGS automatically so that GHC will add it itself.
301+ dontAddExtraLibs = true;
302+
303+ nativeBuildInputs = [
304+ perl autoconf automake m4 python3 sphinx
305+ ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
306+ ] ++ lib.optional (patches != []) autoreconfHook;
307+
308+ # For building runtime libs
309+ depsBuildTarget = toolsForTarget;
310+
311+ buildInputs = [ perl bash ] ++ (libDeps hostPlatform);
312+
313+ depsTargetTarget = map lib.getDev (libDeps targetPlatform);
314+ depsTargetTargetPropagated = map (lib.getOutput "out") (libDeps targetPlatform);
315+
316+ # required, because otherwise all symbols from HSffi.o are stripped, and
317+ # that in turn causes GHCi to abort
318+ stripDebugFlags = [ "-S" ] ++ lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
319+
320+ # See #63511 - the only unstripped file is the debug rts which isn't meant to
321+ # be stripped.
322+ stripDebugList = [ "lib/${name}/bin" ];
323+
324+ checkTarget = "test";
325+
326+ hardeningDisable = [ "format" ]
327+ ++ lib.optional stdenv.targetPlatform.isAarch32 "pic"
328+ ++ lib.optional stdenv.targetPlatform.isMusl "pie";
329+
330+ postInstall = lib.optionalString (enableNUMA && targetPlatform.isLinux) ''
331+ # Patch rts.conf to ensure libnuma can be found
332+
333+ for file in $(find "$out/lib" -name "rts*.conf"); do
334+ if grep -q numa $file; then
335+ substituteInPlace $file \
336+ --replace "library-dirs:" "library-dirs: ${targetNumactl}/lib" \
337+ --replace "include-dirs:" "include-dirs: ${targetNumactl}/include"
338+ "$out/bin/${targetPrefix}ghc-pkg" recache
339+ fi
340+ done
341+ '' + ''
342+ # Install the bash completion file.
343+ install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
344+
345+ # Patch scripts to include "readelf" and "cat" in $PATH.
346+ for i in "$out/bin/"*; do
347+ test ! -h $i || continue
348+ egrep --quiet '^#!' <(head -n 1 $i) || continue
349+ # The ghcprog fixup is for musl (where runhaskell script just needs to point to the correct
350+ # ghc program to work).
351+ sed -i \
352+ -e '2i export PATH="$PATH:${lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' \
353+ -e 's/ghcprog="ghc-/ghcprog="${targetPrefix}ghc-/' \
354+ $i
355+ done
356+
357+ # Save generated files for needed when building ghc and ghcjs
358+ mkdir -p $generated/includes/dist-derivedconstants/header
359+ cp includes/dist-derivedconstants/header/GHCConstantsHaskell*.hs \
360+ $generated/includes/dist-derivedconstants/header
361+ if [[ -f includes/ghcplatform.h ]]; then
362+ cp includes/ghcplatform.h $generated/includes
363+ elif [[ -f includes/dist-install/build/ghcplatform.h ]]; then
364+ cp includes/dist-install/build/ghcplatform.h $generated/includes
365+ fi
366+ mkdir -p $generated/compiler/stage2/build
367+ cp compiler/stage2/build/Config.hs $generated/compiler/stage2/build || true
368+ if [[ -f compiler/stage2/build/GHC/Platform/Constants.hs ]]; then
369+ mkdir -p $generated/compiler/stage2/build/GHC/Platform
370+ cp compiler/stage2/build/GHC/Platform/Constants.hs $generated/compiler/stage2/build/GHC/Platform
371+ fi
372+ if [[ -f compiler/stage2/build/GHC/Settings/Config.hs ]]; then
373+ mkdir -p $generated/compiler/stage2/build/GHC/Settings
374+ cp compiler/stage2/build/GHC/Settings/Config.hs $generated/compiler/stage2/build/GHC/Settings
375+ fi
376+ cp compiler/stage2/build/*.hs-incl $generated/compiler/stage2/build || true
377+ mkdir -p $generated/rts/build
378+ cp rts/build/config.hs-incl $generated/rts/build || true
379+
380+ # Save generated files for needed when building ghc-boot
381+ mkdir -p $generated/libraries/ghc-boot/dist-install/build/GHC/Platform
382+ if [[ -f libraries/ghc-boot/dist-install/build/GHC/Version.hs ]]; then
383+ cp libraries/ghc-boot/dist-install/build/GHC/Version.hs $generated/libraries/ghc-boot/dist-install/build/GHC/Version.hs
384+ fi
385+ if [[ -f libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs ]]; then
386+ cp libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs $generated/libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs
387+ fi
388+
389+ ${installDeps targetPrefix}
390+
391+ # Sanity checks for https://github.com/input-output-hk/haskell.nix/issues/660
392+ if ! "$out/bin/${targetPrefix}ghc" --version; then
393+ echo "ERROR: Missing file $out/bin/${targetPrefix}ghc"
394+ exit 1
395+ fi
396+ if ! "$out/bin/${targetPrefix}ghc-pkg" --version; then
397+ echo "ERROR: Missing file $out/bin/${targetPrefix}ghc-pkg"
398+ exit 1
399+ fi
400+ if [[ ! -d "$out/lib/${targetPrefix}ghc-${version}" ]]; then
401+ echo "ERROR: Missing directory $out/lib/${targetPrefix}ghc-${version}"
402+ exit 1
403+ fi
404+ if (( $(ls -1 "$out/lib/${targetPrefix}ghc-${version}" | wc -l) < 30 )); then
405+ echo "ERROR: Expected more files in $out/lib/${targetPrefix}ghc-${version}"
406+ exit 1
407+ fi
408+ '';
409+
410+ passthru = {
411+ inherit bootPkgs targetPrefix;
412+
413+ inherit llvmPackages;
414+ inherit enableShared;
415+ inherit useLLVM;
416+
417+ # Our Cabal compiler name
418+ haskellCompilerName = "ghc-${version}";
419+
420+ # This uses a similar trick to `pkgs.srcOnly` to get the configured src
421+ # We could add `configured-src` as an output of the ghc derivation, but
422+ # having it as its own derivation means it can be accessed quickly without
423+ # building GHC.
424+ configured-src = stdenv.mkDerivation ({
425+ name = name + "-configured-src";
426+ inherit
427+ buildInputs
428+ version
429+ nativeBuildInputs
430+ patches
431+ src
432+ strictDeps
433+ depsBuildTarget
434+ depsTargetTarget
435+ depsTargetTargetPropagated
436+ postPatch
437+ preConfigure
438+ configurePlatforms
439+ configureFlags
440+ outputs
441+ ;
442+
443+ # Including all the outputs (not just $out) causes `mkDerivation` to use the nixpkgs multiple-outputs.sh hook.
444+ # This hook changes the arguments passed to `configure`.
445+ installPhase = ''
446+ cp -r . $out
447+ mkdir $doc
448+ mkdir $generated
449+ '';
450+ phases = [ "unpackPhase" "patchPhase" ]
451+ ++ lib.optional (ghc-patches != []) "autoreconfPhase"
452+ ++ [ "configurePhase" "installPhase"];
453+ });
454+
455+ # Used to detect non haskell-nix compilers (accidental use of nixpkgs compilers can lead to unexpected errors)
456+ isHaskellNixCompiler = true;
457+
458+ # The same GHC, but with debug enabled (if it can be)
459+ dwarf = lib.makeOverridable self (args // {
460+ enableDWARF = stdenv.targetPlatform.isLinux
461+ && builtins.compareVersions ghc-version "8.10.2" >= 0;
462+ });
463+
464+ # The same GHC, but without the large (1TB) address space reservation
465+ smallAddressSpace = lib.makeOverridable self (args // {
466+ disableLargeAddressSpace = true;
467+ });
468+ } // extra-passthru;
469+
470+ meta = {
471+ homepage = http://haskell.org/ghc;
472+ description = "The Glasgow Haskell Compiler";
473+ maintainers = [];
474+ inherit (ghc.meta) license platforms;
475+ };
476+
477+ # Needed for `haddock` to work on source that includes non ASCII chars
478+ LANG = "en_US.UTF-8";
479+ LC_ALL = "en_US.UTF-8";
480+} // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") {
481+ LOCALE_ARCHIVE = "${buildPackages.glibcLocales}/lib/locale/locale-archive";
482+} // lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
483+ dontStrip = true;
484+ dontPatchELF = true;
485+ noAuditTmpdir = true;
486+} // lib.optionalAttrs (stdenv.buildPlatform.isDarwin || stdenv.targetPlatform.isWindows) {
487+ # ghc install on macOS wants to run `xattr -r -c`
488+ # The macOS version fails because it wants python 2.
489+ # The nix version of xattr does not support those args.
490+ # Luckily setting the path to something that does not exist will skip the step.
491+ preBuild = lib.optionalString stdenv.buildPlatform.isDarwin ''
492+ export XATTR=$(mktemp -d)/nothing
493+ ''
494+ # We need to point at a stand in `windows.h` header file so that the RTS headers can
495+ # work on the hostPlatform. We also need to work around case sensitve file system issues.
496+ + lib.optionalString stdenv.targetPlatform.isWindows ''
497+ export NIX_CFLAGS_COMPILE_${
498+ # We want this only to apply to the non windows hostPlatform (the
499+ # windows gcc cross compiler has a full `windows.h`).
500+ # This matches the way `suffixSalt` is calculated in nixpkgs.
501+ # See https://github.com/NixOS/nixpkgs/blob/8411006d6bcd7f6e6a8a1a80ce8fcdccdd16c6ab/pkgs/build-support/cc-wrapper/default.nix#L58
502+ lib.replaceStrings ["-" "."] ["_" "_"] stdenv.hostPlatform.config
503+ }+=" -I${../windows/include}"
504+ if [[ -f libraries/base/include/winio_structs.h ]]; then
505+ substituteInPlace libraries/base/include/winio_structs.h --replace Windows.h windows.h
506+ fi
507+ if [[ -f rts/win32/ThrIOManager.c ]]; then
508+ substituteInPlace rts/win32/ThrIOManager.c --replace rts\\OSThreads.h rts/OSThreads.h
509+ fi
510+ '';
511+});
512+in self
compiler/ghc/source-dist.nixnew file+40
@@ -0,0 +1,40 @@
1+{ src, stdenv, pkgs, version, ghc, alex, happy, hscolour }:
2+stdenv.mkDerivation {
3+
4+ inherit version;
5+
6+ name = "ghc-source-dist";
7+
8+ buildInputs = [ ghc alex happy hscolour ] ++ (with pkgs; [ automake bash git cacert python3 autoconf xorg.lndir ]);
9+
10+ inherit src;
11+
12+ phases = [ "unpackPhase" "buildPhase" "installPhase" ];
13+
14+ buildPhase = ''
15+ # Happy and Alex are confused about their data dirs. See
16+ # https://github.com/haskell/cabal/issues/5862 for details.
17+ #
18+ # This is fixed in more recent builds. We can't rely on
19+ # custom built tools as computing the source-dist is pretty
20+ # much in the bootstrap lane.
21+
22+ export alex_datadir=$(find ${alex}/share -name "alex-*" -type d -and -not -path "*doc*")
23+ export happy_datadir=$(find ${happy}/share -name "happy-*" -type d -and -not -path "*doc*")
24+
25+ # We need to --skip-url-rewrites, ghc is a bit too strict here.
26+ python3 ./boot --skip-url-rewrites
27+ # let's not flood the screen with garbage.
28+ ./configure --silent
29+
30+ # this folder ends up being needed for the windows dists; just mock it.
31+ mkdir ghc-tarballs
32+ make sdist --silent
33+ '';
34+
35+ installPhase = ''
36+ mkdir -p $out
37+ install -Dm644 sdistprep/ghc-$(cat VERSION)-src.tar.xz $out/src.tar.xz
38+ install -Dm644 sdistprep/ghc-$(cat VERSION)-testsuite.tar.xz $out/testsuite.tar.xz
39+ '';
40+}
compiler/ghcjs/ghcjs-src.jsonnew file+6
@@ -0,0 +1,6 @@
1+{
2+ "url": "https://github.com/ghcjs/ghcjs",
3+ "rev": "58ed01e77028108c2b1da10d52cb331788b6a466",
4+ "sha256": "1lr3grk5jjm8bvvkndilm06ry1dj7i66k4g27fr009bggdy9q6ws",
5+ "fetchSubmodules": true
6+}
compiler/ghcjs/ghcjs.nixnew file+301
@@ -0,0 +1,301 @@
1+{ pkgs
2+, ghcjsSrcJson ? ./ghcjs-src.json
3+, ghcjsSrc ? pkgs.buildPackages.fetchgit (builtins.fromJSON (builtins.readFile ghcjsSrcJson))
4+, ghcjsVersion ? "8.6.0.0.10"
5+, ghcVersion ? "8.6.5"
6+, compiler-nix-name ? if builtins.compareVersions ghcjsVersion "8.8.0.0" > 0
7+ then "ghc884"
8+ else "ghc865"
9+, ghc ? pkgs.buildPackages.ghc
10+, overrideBootPackages ? [] # adds if not present, overrides if present.
11+}:
12+let
13+ isGhcjs88 = builtins.compareVersions ghcjsVersion "8.8.0.0" >= 0;
14+ isGhcjs810 = builtins.compareVersions ghcjsVersion "8.10.0.0" >= 0;
15+
16+ project = pkgs.buildPackages.haskell-nix.ghcjsProject {
17+ src = ghcjsSrc;
18+ inherit ghcjsVersion compiler-nix-name overrideBootPackages;
19+ index-state = "2020-04-25T00:00:00Z";
20+ patches = if isGhcjs810
21+ then [
22+ ./patches/810/fast-weak.patch
23+ ./patches/810/boot-optimization-flags.patch
24+ ]
25+ else [];
26+# plan-sha256 = "1wy2lr08maxyi7r8jiwf2gj6pdayk5vxxwh42bj4s2gg4035z0yc";
27+# materialized = ../../materialized/ghcjs;
28+ };
29+
30+ inherit (project.hsPkgs) ghcjs;
31+
32+ all-ghcjs = pkgs.buildPackages.symlinkJoin {
33+ name = "ghcjs-${ghcjsVersion}-symlinked";
34+ paths = [
35+ (ghcjs.getComponent "exe:ghcjs-boot")
36+ ] ++ (if isGhcjs88
37+ then [
38+ (ghcjs.getComponent "exe:ghcjs")
39+ (ghcjs.getComponent "exe:ghcjs-pkg")
40+ (ghcjs.getComponent "exe:private-ghcjs-hsc2hs")
41+ (ghcjs.getComponent "exe:haddock")
42+ (ghcjs.getComponent "exe:ghcjs-dumparchive")
43+ (ghcjs.getComponent "exe:private-ghcjs-run")
44+ (ghcjs.getComponent "exe:private-ghcjs-unlit")
45+ ]
46+ else [
47+ (ghcjs.getComponent "exe:private-ghcjs-ghcjs")
48+ (ghcjs.getComponent "exe:private-ghcjs-ghcjs-pkg")
49+ (ghcjs.getComponent "exe:private-ghcjs-run")
50+ (ghcjs.getComponent "exe:private-ghcjs-unlit")
51+ (ghcjs.getComponent "exe:private-ghcjs-hsc2hs")
52+ (ghcjs.getComponent "exe:private-ghcjs-haddock")
53+ (ghcjs.getComponent "exe:private-ghcjs-ghcjs-dumparchive")
54+ ]);
55+ };
56+ libexec = "libexec/${builtins.replaceStrings ["darwin" "i686"] ["osx" "i386"] pkgs.stdenv.buildPlatform.system}-${ghc.name}/ghcjs-${ghcVersion}";
57+ booted-ghcjs = pkgs.stdenv.mkDerivation {
58+ name = "ghcjs-${ghcVersion}";
59+ src = project.configured-src;
60+
61+ nativeBuildInputs = project.bootInputs
62+ ++ pkgs.lib.optional isGhcjs88 pkgs.buildPackages.procps;
63+ passthru = {
64+ inherit all-ghcjs bundled-ghcjs project;
65+ configured-src = project.configured-src + "/ghc";
66+ # Used to detect non haskell-nix compilers (accidental use of nixpkgs compilers can lead to unexpected errors)
67+ isHaskellNixCompiler = true;
68+ } // ghcjs.components.exes;
69+ dontUpdateAutotoolsGnuConfigScripts = true;
70+ dontConfigure = true;
71+ dontInstall = true;
72+ buildPhase = ''
73+ export HOME=$TMP
74+ mkdir $HOME/.cabal
75+ touch $HOME/.cabal/config
76+ cd lib/boot
77+ ${if isGhcjs88
78+ then ''
79+ mkdir -p $out/bin
80+ mkdir -p $out/lib
81+ lndir ${all-ghcjs}/bin $out/bin
82+ chmod -R +w $out/bin
83+ rm $out/bin/ghcjs-boot
84+ cp ${ghcjs.getComponent "exe:ghcjs-boot"}/bin/ghcjs-boot $out/bin
85+ rm $out/bin/haddock
86+ cp ${ghcjs.getComponent "exe:haddock"}/bin/haddock $out/bin
87+
88+ wrapProgram $out/bin/ghcjs --add-flags "-B$out/lib"
89+ wrapProgram $out/bin/haddock --add-flags "-B$out/lib"
90+ wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/lib/package.conf.d"
91+ ''
92+ else ''
93+ mkdir -p $out
94+ lndir ${all-ghcjs} $out
95+ mkdir -p $out/lib/ghcjs-${ghcVersion}
96+ rm $out/bin/ghcjs-boot
97+ cp ${ghcjs.getComponent "exe:ghcjs-boot"}/bin/ghcjs-boot $out/bin
98+ wrapProgram $out/bin/ghcjs-boot --set ghcjs_libexecdir $out/bin
99+ mv $out/${libexec}/* $out/bin
100+
101+ wrapProgram $out/bin/private-ghcjs-ghcjs --add-flags "-B$out/lib"
102+ wrapProgram $out/bin/private-ghcjs-haddock --add-flags "-B$out/lib"
103+ wrapProgram $out/bin/private-ghcjs-ghcjs-pkg --add-flags "--global-package-db=$out/lib/package.conf.d"
104+ ''
105+ }
106+ # Avoid timeouts while unix package runs hsc2hs (it does not print anything
107+ # for more than 900 seconds).
108+ {
109+ for n in {1..50}; do
110+ if [ ! -f $TMP/done ]; then
111+ sleep 300
112+ echo Keep alive $n
113+ fi
114+ done
115+ } &
116+ ${
117+ # Unsets NIX_CFLAGS_COMPILE so the osx version of iconv.h is not used by mistake
118+ if isGhcjs810 then ''
119+ env -u NIX_CFLAGS_COMPILE PATH=$out/bin:$PATH \
120+ $out/bin/ghcjs-boot --with-emsdk=${project.emsdk} --no-haddock \
121+ || (echo failed > $TMP/done; false)
122+ ''
123+ else if isGhcjs88 then ''
124+ env -u NIX_CFLAGS_COMPILE PATH=$out/bin:$PATH \
125+ $out/bin/ghcjs-boot -j1 --with-emsdk=${project.emsdk} --no-prof --no-haddock \
126+ || (echo failed > $TMP/done; false)
127+ ''
128+ else ''
129+ env -u NIX_CFLAGS_COMPILE PATH=$out/bin:$PATH \
130+ $out/bin/ghcjs-boot -j1 --with-ghcjs-libdir=$out --with-emsdk=${project.emsdk} \
131+ || (echo failed > $TMP/done; false)
132+ ''
133+ }
134+ echo ok > $TMP/done
135+ '';
136+ # We hard code -j1 as a temporary workaround for
137+ # https://github.com/ghcjs/ghcjs/issues/654
138+ # enableParallelBuilding = true;
139+ };
140+ ghcjs-relocatable-bin = pkgs.stdenv.mkDerivation {
141+ name = "ghcjs-relocatable-bin-${ghcVersion}";
142+ src = all-ghcjs;
143+ dontConfigure = true;
144+ dontInstall = true;
145+ dontPatchShebangs = true;
146+ dontPatchELF = true;
147+ buildPhase = ''
148+ # Copy the ghcjs exectuables
149+ mkdir -p $out/bin
150+ cp $src/${libexec}/* $out/bin
151+
152+ # Add readlink (needed by bundleRootDir)
153+ cp ${pkgs.coreutils}/bin/readlink $out/bin
154+
155+ '' + (pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
156+ # Make the executables location independent using install_name_tool and @executable_path
157+
158+ # Copy the libraries needed into place
159+ cp ${pkgs.gmp}/lib/libgmp.10.dylib $out/bin
160+ cp ${pkgs.ncurses}/lib/libncursesw.6.dylib $out/bin
161+ cp ${pkgs.libffi}/lib/libffi.6.dylib $out/bin
162+
163+ # Set the ID of the libraries
164+ chmod -R +w $out/bin
165+ install_name_tool -id "@executable_path/libgmp.10.dylib" "$out/bin/libgmp.10.dylib"
166+ install_name_tool -id "@executable_path/libncursesw.6.dylib" "$out/bin/libncursesw.6.dylib"
167+ install_name_tool -id "@executable_path/libffi.6.dylib" "$out/bin/libffi.6.dylib"
168+
169+ # Modify all the references so we look for the libraries in the system location or
170+ # @executable_path (the directory containin the exetubable itself).
171+ for fn in $out/bin/*; do
172+ install_name_tool -change "${pkgs.libiconv}/lib/libiconv.dylib" /usr/lib/libiconv.dylib "$fn"
173+ install_name_tool -change "${pkgs.stdenv.libc}/lib/libSystem.B.dylib" /usr/lib/libSystem.B.dylib "$fn"
174+ install_name_tool -change "${pkgs.gmp}/lib/libgmp.10.dylib" "@executable_path/libgmp.10.dylib" "$fn"
175+ install_name_tool -change "${pkgs.ncurses}/lib/libncursesw.6.dylib" "@executable_path/libncursesw.6.dylib" "$fn"
176+ install_name_tool -change "${pkgs.libffi}/lib/libffi.6.dylib" "@executable_path/libffi.6.dylib" "$fn"
177+ done
178+ '')
179+
180+ + (pkgs.lib.optionalString pkgs.stdenv.isLinux ''
181+ # Make the executables location independent using patchelf and $ORIGIN.
182+ chmod -R +w $out/bin
183+ # This interpreter setting will not work on nixOS, but this bundle is
184+ # not really needed on nixOS systems.
185+ patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 $out/bin/*
186+ patchelf --set-rpath '$ORIGIN' $out/bin/*
187+ # Link the libraries needed into place
188+ ln -s ${pkgs.gmp}/lib/libgmp.so.* $out/bin
189+ ln -s ${pkgs.ncurses}/lib/libncursesw.so.* $out/bin
190+ ln -s ${pkgs.libffi}/lib/libffi.so.* $out/bin
191+ '');
192+ };
193+ # This is a way to find the location of the root directory of this bundle
194+ # when one of the wrapper scripts runs. By using readlink (to avoid
195+ # issues with symlinks that might be made to the script) and dirname
196+ # we can find the directory even when it may have been moved.
197+ bundleRootDir = ''"$(dirname "$(dirname "$(readlink -f "$0")")")"'';
198+ bundled-ghcjs = {
199+ compilerName ? "ghcjs", # Name for the compiler wrapper
200+ db ? null, # A ghcjs package database this argument should can
201+ # be `project.(shellFor { ... }).configFiles` or
202+ # the result of a `makeConfigFiles` call.
203+ hostDb ? null # Like db, but this will be passed as the `-host-package-db`.
204+ }:
205+ let
206+ libDeps = pkgs.lib.concatMapStrings (lib: "${lib} ") (pkgs.lib.unique (
207+ [booted-ghcjs ghc db hostDb pkgs.ncurses pkgs.gmp pkgs.libffi]
208+ ++ (pkgs.haskell-nix.haskellLib.flatLibDepends db.component)
209+ ++ (pkgs.haskell-nix.haskellLib.flatLibDepends hostDb.component)
210+ ));
211+ in pkgs.stdenv.mkDerivation {
212+ name = "${compilerName}-${ghcVersion}-bundle";
213+ src = booted-ghcjs;
214+ nativeBuildInputs = [ pkgs.makeWrapper pkgs.xorg.lndir ];
215+ dontConfigure = true;
216+ dontInstall = true;
217+ dontPatchShebangs = true;
218+ dontPatchELF = true;
219+ buildPhase = ''
220+ # Copy the ghcjs exectuables
221+ mkdir -p $out/bin
222+ lndir ${ghcjs-relocatable-bin}/bin $out/bin
223+
224+ # Make the executables writeable for patchelf and install_name_tool
225+ chmod -R +w $out/bin
226+
227+ # And links for the /lib directory of all the dependencies
228+ # including the booted ghcjs
229+ for lib in ${ libDeps }; do
230+ if [ -d $lib/lib ]; then
231+ mkdir -p $out/$(basename $lib)
232+ lndir -silent $lib $out/$(basename $lib)
233+ fi
234+ done
235+
236+ '' + (pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
237+ rm -rf $out/$(basename ${hostDb})/lib/links
238+ cp -rL ${hostDb}/lib/links $out/$(basename ${hostDb})/lib
239+ chmod -R +w $out/$(basename ${hostDb})/lib/links
240+
241+ # Modify all the references so we look for the libraries in the system location or
242+ # @executable_path (the directory containin the exetubable itself).
243+ for fn in $out/$(basename ${hostDb})/lib/links/*; do
244+ install_name_tool -change "${pkgs.libiconv}/lib/libiconv.dylib" /usr/lib/libiconv.dylib "$fn"
245+ install_name_tool -change "${pkgs.stdenv.libc}/lib/libSystem.B.dylib" /usr/lib/libSystem.B.dylib "$fn"
246+ install_name_tool -change "${pkgs.gmp}/lib/libgmp.10.dylib" "@executable_path/libgmp.10.dylib" "$fn"
247+ install_name_tool -change "${pkgs.ncurses}/lib/libncursesw.6.dylib" "@executable_path/libncursesw.6.dylib" "$fn"
248+ install_name_tool -change "${pkgs.libffi}/lib/libffi.6.dylib" "@executable_path/libffi.6.dylib" "$fn"
249+ done
250+ '') + ''
251+
252+ # Wrap the programs to add the ghcjs library dir and package DB directories
253+ wrapProgram $out/bin/ghcjs \
254+ --add-flags '"-B${bundleRootDir}/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}"' \
255+ --add-flags '"-package-db ${db}/${db.packageCfgDir}"' ${
256+ pkgs.lib.optionalString (hostDb != null)
257+ " --add-flags '-host-package-db=${hostDb}/${hostDb.packageCfgDir}'"
258+ }
259+ wrapProgram $out/bin/ghcjs-pkg --add-flags '"--global-package-db=${db}/${db.packageCfgDir}"'
260+ wrapProgram $out/bin/haddock-ghcjs --add-flags '"-B${bundleRootDir}/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}"'
261+
262+ # Fix the bang pattern to use the systems bash.
263+ # Replace the absolute output path ($out) with bundleRootDir
264+ # (this will fix the references to the unwarpped executables).
265+ # Replace the `/nix/store` refs (in the package DB paths) with
266+ # bundleRootDir.
267+ sed -i \
268+ -e 's|${pkgs.stdenv.shell}|/usr/bin/env -S bash|' \
269+ -e "s|$out/|"'${bundleRootDir}/|g' \
270+ -e 's|/nix/store/|${bundleRootDir}/|g' \
271+ $out/bin/ghcjs $out/bin/haddock-ghcjs $out/bin/ghcjs-pkg
272+
273+ # Update the ghcjs and ghc settings files so that `cc` looked up in the PATH.
274+ rm $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/settings
275+ sed -e 's|/nix/store/.*/bin/cc|cc|' \
276+ < ${booted-ghcjs}/lib/ghcjs-${ghcVersion}/settings \
277+ > $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/settings
278+ rm $out/$(basename ${ghc})/lib/ghc-${ghcVersion}/settings
279+ sed -e 's|/nix/store/.*/bin/cc|cc|' \
280+ < ${ghc}/lib/ghc-${ghcVersion}/settings \
281+ > $out/$(basename ${ghc})/lib/ghc-${ghcVersion}/settings
282+
283+ # Update the ghcjs settings files so that `node` looked up in the PATH.
284+ rm $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/nodeSettings.json
285+ sed -e 's|/nix/store/.*/bin/node|node|' \
286+ < ${booted-ghcjs}/lib/ghcjs-${ghcVersion}/nodeSettings.json \
287+ > $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/nodeSettings.json
288+
289+ # Update the ghcjs settings files so that `node` looked up in the PATH.
290+ rm $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/ghc_libdir
291+ sed -e 's|/nix/store/|../../../|' \
292+ < ${booted-ghcjs}/lib/ghcjs-${ghcVersion}/ghc_libdir \
293+ > $out/$(basename ${booted-ghcjs})/lib/ghcjs-${ghcVersion}/ghc_libdir
294+ '' + (pkgs.lib.optionalString (compilerName != "ghcjs") ''
295+ # Rename the wrappers based on the `compilerName` arg
296+ mv $out/bin/ghcjs $out/bin/${compilerName}
297+ mv $out/bin/ghcjs-pkg $out/bin/${compilerName}-pkg
298+ mv $out/bin/haddock-ghcjs $out/bin/haddock-${compilerName}
299+ '');
300+ };
301+in booted-ghcjs
compiler/ghcjs/ghcjs810-patched-boot-packages/aeson.patchnew file+13
@@ -0,0 +1,13 @@
1+diff --git a/aeson.cabal b/aeson.cabal
2+index a0ebd59..552f160 100755
3+--- a/aeson.cabal
4++++ b/aeson.cabal
5+@@ -150,7 +150,7 @@ library
6+ dlist >= 0.8.0.4 && < 0.9,
7+ hashable >= 1.2.7.0 && < 1.4,
8+ scientific >= 0.3.6.2 && < 0.4,
9+- th-abstraction >= 0.2.8.0 && < 0.4,
10++ th-abstraction >= 0.2.8.0 && < 0.5,
11+ uuid-types >= 1.0.3 && < 1.1,
12+ vector >= 0.12.0.1 && < 0.13
13+
compiler/ghcjs/ghcjs810-patched-boot-packages/default.nixnew file+176
@@ -0,0 +1,176 @@
1+{ pkgs
2+, ...
3+}:
4+let
5+ patch = p: path: pkgs.runCommand "patched" { buildInputs = [ pkgs.gnupatch ]; } ''
6+ cp -r ${path} $out
7+ chmod -R +w $out
8+ cd $out
9+ patch -p1 <${p}
10+ '';
11+ getSubdir = d: path: pkgs.runCommand "subdir" { } ''
12+ cp -r ${path}/${d} $out
13+ '';
14+in
15+[
16+ {
17+ name = "primitive";
18+ src = pkgs.fetchgit {
19+ url = "https://github.com/haskell/primitive.git";
20+ rev = "11ff865fd2157a1dfd7dfd525b1cf27e1a300633";
21+ sha256 = "1skim1vlmf0v4ixm8h8ja3m1pz0h10xrfdh1rfzawsy8rvrp2cc0";
22+ };
23+ }
24+ {
25+ name = "dlist";
26+ src = pkgs.fetchgit {
27+ url = "https://github.com/spl/dlist.git";
28+ rev = "567cfeb2f5da30f2e5faf167895b3ee04c698ca0";
29+ sha256 = "0b8ij3ls7bccbp9rlm8dnflnf1wim9xsg42wmirvwxwmh2c0r0hg";
30+ };
31+ }
32+ {
33+ name = "vector";
34+ src = pkgs.fetchgit {
35+ url = "https://github.com/haskell/vector.git";
36+ rev = "de10fd281fa5d8beee3623e809a71385a5ef6864";
37+ sha256 = "09vhbvrkw90xgqfrybmhy120rwcy4snw2f97004alr3n96lwpg1q";
38+ };
39+ }
40+ {
41+ name = "ghcjs-base";
42+ src = patch ./ghcjs-base.patch (pkgs.fetchgit {
43+ url = "https://github.com/ghcjs/ghcjs-base.git";
44+ rev = "85e31beab9beffc3ea91b954b61a5d04e708b8f2";
45+ sha256 = "15fdkjv0l7hpbbsn5238xxgzfdg61g666nzbv2sgxkwryn5rycv0";
46+ });
47+ }
48+ {
49+ name = "text";
50+ src = pkgs.fetchgit {
51+ url = "https://github.com/dfordivam/text.git";
52+ rev = "126174753ea8e5f45df8fcbba609e3f1c453bf27";
53+ sha256 = "0l7nbln2w77s12fm4ybhi0jsfnxkyiwskfx3b682pfisa6n32rgm";
54+ };
55+ }
56+ {
57+ name = "hashable";
58+ src = patch ./hashable.patch (pkgs.fetchgit {
59+ url = "https://github.com/haskell-unordered-containers/hashable.git";
60+ rev = "819fdbeaeeb62ed1344fb057de17fa29b10fa3e1";
61+ sha256 = "0xnwfwnnh0bxq16wx0qmdakvgvj8i22km3bhvvki15rd9jil04cc";
62+ });
63+ }
64+ {
65+ name = "integer-logarithms";
66+ src = pkgs.fetchgit {
67+ url = "https://github.com/haskellari/integer-logarithms.git";
68+ rev = "df09cef2c8eb0d5899e2bcccee2a4fad413bdc11";
69+ sha256 = "1k17hjnjmy44dfywx9nr804qiqmjjhkpfpll5bsfvzvpnl5r75nj";
70+ };
71+ }
72+ {
73+ name = "scientific";
74+ src = pkgs.fetchgit {
75+ url = "https://github.com/basvandijk/scientific.git";
76+ rev = "1d049cdf04e2d92ab187754044b0df933c5e6b0d";
77+ sha256 = "1v4fmfq8hyhdb5ck5r2b45s1izr7hx97v4g7s597ajbv72ldvilq";
78+ };
79+ }
80+ {
81+ name = "attoparsec";
82+ src = pkgs.fetchgit {
83+ url = "https://github.com/dfordivam/attoparsec.git";
84+ rev = "cbfb944aeff61144059a28ada93c579e93ccf7d2";
85+ sha256 = "0bbr4943439sy3grwpwbna4mk7iv87ijaiv3jjfhxhp7y67z51h8";
86+ };
87+ }
88+ {
89+ name = "splitmix";
90+ src = pkgs.fetchgit {
91+ url = "https://github.com/haskellari/splitmix.git";
92+ rev = "d8c1b57bb75178675423f87b1ff58429f37bc9fe";
93+ sha256 = "1m8v439vlwqpqw28dbr04n6m0j2cfb169ly285lp0bjmzcwlr289";
94+ };
95+ }
96+ {
97+ name = "random";
98+ src = pkgs.fetchgit {
99+ url = "https://github.com/haskell/random.git";
100+ rev = "8c59bd0fda84fa581d53069b45100d810f5a778f";
101+ sha256 = "1drdipfbmpg2g2cdrnq1k8yysh86i7ljwm6zkrrs3g8l47n4ha4d";
102+ };
103+ }
104+ {
105+ name = "uuid-types";
106+ src = getSubdir "uuid-types" (pkgs.fetchgit {
107+ url = "https://github.com/haskell-hvr/uuid.git";
108+ rev = "e8dc7126582ba4d3abc5e0f26dc1d8477caab01e";
109+ sha256 = "037cnfz7rhkw383rn117b994jzs93i3bwdv47x5qiza5h5syd76f";
110+ });
111+ }
112+ {
113+ name = "unordered-containers";
114+ src = pkgs.fetchgit {
115+ url = "https://github.com/haskell-unordered-containers/unordered-containers.git";
116+ rev = "db9ddde2b243366976a1bdfbb12a5e257ca762c3";
117+ sha256 = "1wd5hxppj1gg9fa1ihcn3s2y0i70ykv2sf8sym6dlf3r4snda9zi";
118+ };
119+ }
120+ {
121+ name = "base-orphans";
122+ src = pkgs.fetchgit {
123+ url = "https://github.com/haskell-compat/base-orphans.git";
124+ rev = "1af3a3512efbcc12e0c34637a0e433ab6e195932";
125+ sha256 = "14b6qwc3dbnmrhqk66a2cn4pvv3nf6kb3h7ym1hjn5xs7n62zhw1";
126+ };
127+ }
128+ {
129+ name = "time-compat";
130+ src = pkgs.fetchgit {
131+ url = "https://github.com/haskellari/time-compat.git";
132+ rev = "67b8b063295601fb1db185baad363a3f33ed63a9";
133+ sha256 = "0nbjsn7yrygv4i1fd8x90mnf4janq536ffvkjd5zsnyzm8qk8k3j";
134+ };
135+ }
136+ {
137+ name = "th-abstraction";
138+ src = pkgs.fetchgit {
139+ url = "https://github.com/glguy/th-abstraction.git";
140+ rev = "d75761bc5a0f912aeeb508e2c227b9fd830153fd";
141+ sha256 = "070ihxncymzsbrgvwmrm717n0qq5bf9nvc2k210nkil1cwrsnhvc";
142+ };
143+ }
144+ {
145+ name = "tagged";
146+ src = pkgs.fetchgit {
147+ url = "https://github.com/ekmett/tagged.git";
148+ rev = "15fcfe90c779efea951ecf4d451d709aed5f7d32";
149+ sha256 = "1x1wr4zf7k1kvd6rj06h9shw7p5di1jra9fysyw0jx7riiq0v3ch";
150+ };
151+ }
152+ {
153+ name = "base-compat";
154+ src = getSubdir "base-compat" (pkgs.fetchgit {
155+ url = "https://github.com/haskell-compat/base-compat.git";
156+ rev = "e8dbac72251e898fc4b1c1abb34d6578da12f476";
157+ sha256 = "1gs15g8h7p8gab9j5fjvjlhrfv112w91plraf9chq80c5slvk016";
158+ });
159+ }
160+ {
161+ name = "base-compat-batteries";
162+ src = getSubdir "base-compat-batteries" (pkgs.fetchgit {
163+ url = "https://github.com/haskell-compat/base-compat.git";
164+ rev = "e8dbac72251e898fc4b1c1abb34d6578da12f476";
165+ sha256 = "1gs15g8h7p8gab9j5fjvjlhrfv112w91plraf9chq80c5slvk016";
166+ });
167+ }
168+ {
169+ name = "aeson";
170+ src = patch ./aeson.patch (pkgs.fetchgit {
171+ url = "https://github.com/dfordivam/aeson.git";
172+ rev = "9a8f57a52eb748a030bc2bcf5c3159a5e2e696b2";
173+ sha256 = "1y8j3ddxxddpnb7c0vi73ijb08sr09z1gdzfg1rfyzn82d6i38zv";
174+ });
175+ }
176+]
compiler/ghcjs/ghcjs810-patched-boot-packages/ghcjs-base.patchnew file+471
@@ -0,0 +1,471 @@
1+diff --git a/Data/JSString.hs b/Data/JSString.hs
2+index 176aad4..9ca6693 100644
3+--- a/Data/JSString.hs
4++++ b/Data/JSString.hs
5+@@ -99,6 +99,7 @@ module Data.JSString ( JSString
6+ , breakOnEnd
7+ , break
8+ , span
9++ , span_
10+ , group
11+ , group'
12+ , groupBy
13+@@ -1231,19 +1232,23 @@ splitAt (I# n) x = case js_splitAt n x of (# y, z #) -> (y, z)
14+ -- of @t@ of elements that satisfy @p@, and whose second is the
15+ -- remainder of the list.
16+ span :: (Char -> Bool) -> JSString -> (JSString, JSString)
17+-span p x = case js_length x of
18+- 0# -> (empty, empty)
19+- l -> let c0 = js_uncheckedIndex 0# x
20+- in if p (C# (chr# c0)) then loop 0# l else (empty, x)
21++span p x = let (# a, b #) = span_ p x in (a, b)
22++{-# INLINE span #-}
23++
24++span_ :: (Char -> Bool) -> JSString -> (# JSString, JSString #)
25++span_ p x = case js_length x of
26++ 0# -> (# empty, empty #)
27++ l -> let c0 = js_uncheckedIndex 0# x
28++ in if p (C# (chr# c0)) then loop 0# l else (# empty, x #)
29+ where
30+ loop i l
31+- | isTrue# (i >=# l) = (x, empty)
32++ | isTrue# (i >=# l) = (# x, empty #)
33+ | otherwise =
34+ let c = js_uncheckedIndex i x
35+ in if p (C# (chr# c))
36+ then loop (i +# charWidth c) l
37+- else (js_substr 0# i x, js_substr1 i x)
38+-{-# INLINE span #-}
39++ else (# js_substr 0# i x, js_substr1 i x #)
40++{-# INLINE span_ #-}
41+
42+ -- | /O(n)/ 'break' is like 'span', but the prefix returned is
43+ -- over elements that fail the predicate @p@.
44+diff --git a/GHCJS/Foreign.hs b/GHCJS/Foreign.hs
45+index 5bbc5c5..b128f24 100644
46+--- a/GHCJS/Foreign.hs
47++++ b/GHCJS/Foreign.hs
48+@@ -82,7 +82,7 @@ import GHCJS.Marshal
49+ import GHCJS.Marshal.Pure
50+ -}
51+ import Data.String (IsString(..))
52+-import qualified Data.Text as T
53++-- import qualified Data.Text as T
54+
55+
56+ class ToJSString a where
57+diff --git a/GHCJS/Foreign/Internal.hs b/GHCJS/Foreign/Internal.hs
58+index 5ac81f0..449bfe4 100644
59+--- a/GHCJS/Foreign/Internal.hs
60++++ b/GHCJS/Foreign/Internal.hs
61+@@ -100,10 +100,10 @@ import Data.Typeable (Typeable)
62+ import Data.ByteString (ByteString)
63+ import Data.ByteString.Unsafe (unsafePackAddressLen)
64+
65+-import qualified Data.Text.Array as A
66+-import qualified Data.Text as T
67+-import qualified Data.Text.Internal as T
68+-import qualified Data.Text.Lazy as TL (Text, toStrict, fromStrict)
69++-- import qualified Data.Text.Array as A
70++-- import qualified Data.Text as T
71++-- import qualified Data.Text.Internal as T
72++-- import qualified Data.Text.Lazy as TL (Text, toStrict, fromStrict)
73+
74+ import Unsafe.Coerce
75+
76+diff --git a/GHCJS/Marshal.hs b/GHCJS/Marshal.hs
77+index a36aca2..6256a73 100644
78+--- a/GHCJS/Marshal.hs
79++++ b/GHCJS/Marshal.hs
80+@@ -16,7 +16,7 @@
81+
82+ module GHCJS.Marshal ( FromJSVal(..)
83+ , ToJSVal(..)
84+- , toJSVal_aeson
85++ -- , toJSVal_aeson
86+ , toJSVal_pure
87+ ) where
88+
89+@@ -24,17 +24,17 @@ import Control.Applicative
90+ import Control.Monad
91+ import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
92+
93+-import qualified Data.Aeson as AE
94+-import Data.Attoparsec.Number (Number(..))
95++-- import qualified Data.Aeson as AE
96++-- import Data.Attoparsec.Number (Number(..))
97+ import Data.Bits ((.&.))
98+ import Data.Char (chr, ord)
99+-import qualified Data.HashMap.Strict as H
100++-- import qualified Data.HashMap.Strict as H
101+ import Data.Int (Int8, Int16, Int32)
102+ import qualified Data.JSString as JSS
103+-import qualified Data.JSString.Text as JSS
104++-- import qualified Data.JSString.Text as JSS
105+ import Data.Maybe
106+-import Data.Scientific (Scientific, scientific, fromFloatDigits)
107+-import Data.Text (Text)
108++-- import Data.Scientific (Scientific, scientific, fromFloatDigits)
109++-- import Data.Text (Text)
110+ import qualified Data.Vector as V
111+ import Data.Word (Word8, Word16, Word32, Word)
112+ import Data.Primitive.ByteArray
113+@@ -85,11 +85,11 @@ instance FromJSVal JSString where
114+ {-# INLINE fromJSValUnchecked #-}
115+ fromJSVal = fromJSVal_pure
116+ {-# INLINE fromJSVal #-}
117+-instance FromJSVal Text where
118+- fromJSValUnchecked = fromJSValUnchecked_pure
119+- {-# INLINE fromJSValUnchecked #-}
120+- fromJSVal = fromJSVal_pure
121+- {-# INLINE fromJSVal #-}
122++-- instance FromJSVal Text where
123++-- fromJSValUnchecked = fromJSValUnchecked_pure
124++-- {-# INLINE fromJSValUnchecked #-}
125++-- fromJSVal = fromJSVal_pure
126++-- {-# INLINE fromJSVal #-}
127+ instance FromJSVal Char where
128+ fromJSValUnchecked = fromJSValUnchecked_pure
129+ {-# INLINE fromJSValUnchecked #-}
130+@@ -154,24 +154,24 @@ instance FromJSVal Double where
131+ {-# INLINE fromJSValUnchecked #-}
132+ fromJSVal = fromJSVal_pure
133+ {-# INLINE fromJSVal #-}
134+-instance FromJSVal AE.Value where
135+- fromJSVal r = case jsonTypeOf r of
136+- JSONNull -> return (Just AE.Null)
137+- JSONInteger -> liftM (AE.Number . flip scientific 0 . (toInteger :: Int -> Integer))
138+- <$> fromJSVal r
139+- JSONFloat -> liftM (AE.Number . (fromFloatDigits :: Double -> Scientific))
140+- <$> fromJSVal r
141+- JSONBool -> liftM AE.Bool <$> fromJSVal r
142+- JSONString -> liftM AE.String <$> fromJSVal r
143+- JSONArray -> liftM (AE.Array . V.fromList) <$> fromJSVal r
144+- JSONObject -> do
145+- props <- OI.listProps (OI.Object r)
146+- runMaybeT $ do
147+- propVals <- forM props $ \p -> do
148+- v <- MaybeT (fromJSVal =<< OI.getProp p (OI.Object r))
149+- return (JSS.textFromJSString p, v)
150+- return (AE.Object (H.fromList propVals))
151+- {-# INLINE fromJSVal #-}
152++-- instance FromJSVal AE.Value where
153++-- fromJSVal r = case jsonTypeOf r of
154++-- JSONNull -> return (Just AE.Null)
155++-- JSONInteger -> liftM (AE.Number . flip scientific 0 . (toInteger :: Int -> Integer))
156++-- <$> fromJSVal r
157++-- JSONFloat -> liftM (AE.Number . (fromFloatDigits :: Double -> Scientific))
158++-- <$> fromJSVal r
159++-- JSONBool -> liftM AE.Bool <$> fromJSVal r
160++-- JSONString -> liftM AE.String <$> fromJSVal r
161++-- JSONArray -> liftM (AE.Array . V.fromList) <$> fromJSVal r
162++-- JSONObject -> do
163++-- props <- OI.listProps (OI.Object r)
164++-- runMaybeT $ do
165++-- propVals <- forM props $ \p -> do
166++-- v <- MaybeT (fromJSVal =<< OI.getProp p (OI.Object r))
167++-- return (JSS.textFromJSString p, v)
168++-- return (AE.Object (H.fromList propVals))
169++-- {-# INLINE fromJSVal #-}
170+ instance (FromJSVal a, FromJSVal b) => FromJSVal (a,b) where
171+ fromJSVal r = runMaybeT $ (,) <$> jf r 0 <*> jf r 1
172+ {-# INLINE fromJSVal #-}
173+@@ -204,15 +204,15 @@ jf r n = MaybeT $ do
174+ instance ToJSVal JSVal where
175+ toJSVal = toJSVal_pure
176+ {-# INLINE toJSVal #-}
177+-instance ToJSVal AE.Value where
178+- toJSVal = toJSVal_aeson
179+- {-# INLINE toJSVal #-}
180++-- instance ToJSVal AE.Value where
181++-- toJSVal = toJSVal_aeson
182++-- {-# INLINE toJSVal #-}
183+ instance ToJSVal JSString where
184+ toJSVal = toJSVal_pure
185+ {-# INLINE toJSVal #-}
186+-instance ToJSVal Text where
187+- toJSVal = toJSVal_pure
188+- {-# INLINE toJSVal #-}
189++-- instance ToJSVal Text where
190++-- toJSVal = toJSVal_pure
191++-- {-# INLINE toJSVal #-}
192+ instance ToJSVal Char where
193+ toJSVal = return . pToJSVal
194+ {-# INLINE toJSVal #-}
195+@@ -285,21 +285,21 @@ foreign import javascript unsafe "[$1,$2,$3,$4,$5]" arr5 :: JSVal -> J
196+ foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6]" arr6 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> IO JSVal
197+ foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7]" arr7 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> IO JSVal
198+
199+-toJSVal_aeson :: AE.ToJSON a => a -> IO JSVal
200+-toJSVal_aeson x = cv (AE.toJSON x)
201+- where
202+- cv = convertValue
203++-- toJSVal_aeson :: AE.ToJSON a => a -> IO JSVal
204++-- toJSVal_aeson x = cv (AE.toJSON x)
205++-- where
206++-- cv = convertValue
207+
208+- convertValue :: AE.Value -> IO JSVal
209+- convertValue AE.Null = return jsNull
210+- convertValue (AE.String t) = return (pToJSVal t)
211+- convertValue (AE.Array a) = (\(AI.SomeJSArray x) -> x) <$>
212+- (AI.fromListIO =<< mapM convertValue (V.toList a))
213+- convertValue (AE.Number n) = toJSVal (realToFrac n :: Double)
214+- convertValue (AE.Bool b) = return (toJSBool b)
215+- convertValue (AE.Object o) = do
216+- obj@(OI.Object obj') <- OI.create
217+- mapM_ (\(k,v) -> convertValue v >>= \v' -> OI.setProp (JSS.textToJSString k) v' obj) (H.toList o)
218+- return obj'
219++-- convertValue :: AE.Value -> IO JSVal
220++-- convertValue AE.Null = return jsNull
221++-- convertValue (AE.String t) = return (pToJSVal t)
222++-- convertValue (AE.Array a) = (\(AI.SomeJSArray x) -> x) <$>
223++-- (AI.fromListIO =<< mapM convertValue (V.toList a))
224++-- convertValue (AE.Number n) = toJSVal (realToFrac n :: Double)
225++-- convertValue (AE.Bool b) = return (toJSBool b)
226++-- convertValue (AE.Object o) = do
227++-- obj@(OI.Object obj') <- OI.create
228++-- mapM_ (\(k,v) -> convertValue v >>= \v' -> OI.setProp (JSS.textToJSString k) v' obj) (H.toList o)
229++-- return obj'
230+
231+
232+diff --git a/GHCJS/Marshal/Pure.hs b/GHCJS/Marshal/Pure.hs
233+index 902fa20..268489d 100644
234+--- a/GHCJS/Marshal/Pure.hs
235++++ b/GHCJS/Marshal/Pure.hs
236+@@ -28,11 +28,11 @@ import Data.Data
237+ import Data.Int (Int8, Int16, Int32)
238+ import Data.JSString.Internal.Type
239+ import Data.Maybe
240+-import Data.Text (Text)
241++-- import Data.Text (Text)
242+ import Data.Typeable
243+ import Data.Word (Word8, Word16, Word32, Word)
244+ import Data.JSString
245+-import Data.JSString.Text
246++-- import Data.JSString.Text
247+ import Data.Bits ((.&.))
248+ import Unsafe.Coerce (unsafeCoerce)
249+ import GHC.Int
250+@@ -65,8 +65,8 @@ instance PFromJSVal JSString where pFromJSVal = JSString
251+ {-# INLINE pFromJSVal #-}
252+ instance PFromJSVal [Char] where pFromJSVal = Prim.fromJSString
253+ {-# INLINE pFromJSVal #-}
254+-instance PFromJSVal Text where pFromJSVal = textFromJSVal
255+- {-# INLINE pFromJSVal #-}
256++-- instance PFromJSVal Text where pFromJSVal = textFromJSVal
257++-- {-# INLINE pFromJSVal #-}
258+ instance PFromJSVal Char where pFromJSVal x = C# (jsvalToChar x)
259+ {-# INLINE pFromJSVal #-}
260+ instance PFromJSVal Bool where pFromJSVal = isTruthy
261+@@ -103,8 +103,8 @@ instance PToJSVal JSString where pToJSVal = jsval
262+ {-# INLINE pToJSVal #-}
263+ instance PToJSVal [Char] where pToJSVal = Prim.toJSString
264+ {-# INLINE pToJSVal #-}
265+-instance PToJSVal Text where pToJSVal = jsval . textToJSString
266+- {-# INLINE pToJSVal #-}
267++-- instance PToJSVal Text where pToJSVal = jsval . textToJSString
268++-- {-# INLINE pToJSVal #-}
269+ instance PToJSVal Char where pToJSVal (C# c) = charToJSVal c
270+ {-# INLINE pToJSVal #-}
271+ instance PToJSVal Bool where pToJSVal True = jsTrue
272+diff --git a/JavaScript/JSON/Types/Instances.hs b/JavaScript/JSON/Types/Instances.hs
273+index 2b288ec..6d7074c 100644
274+--- a/JavaScript/JSON/Types/Instances.hs
275++++ b/JavaScript/JSON/Types/Instances.hs
276+@@ -57,7 +57,7 @@ import Control.Applicative ((<$>), (<*>), (<|>), pure, empty)
277+
278+ import Data.JSString (JSString)
279+ import qualified Data.JSString as JSS
280+-import qualified Data.JSString.Text as JSS
281++-- import qualified Data.JSString.Text as JSS
282+
283+ import JavaScript.Array (JSArray)
284+ import qualified JavaScript.Array as JSA
285+@@ -335,21 +335,21 @@ instance FromJSON JSString where
286+ parseJSON = withJSString "JSString" pure
287+ {-# INLINE parseJSON #-}
288+
289+-instance ToJSON Text where
290+- toJSON = stringValue . JSS.textToJSString
291+- {-# INLINE toJSON #-}
292++-- instance ToJSON Text where
293++-- toJSON = stringValue . JSS.textToJSString
294++-- {-# INLINE toJSON #-}
295+
296+-instance FromJSON Text where
297+- parseJSON = withJSString "Text" ( pure . JSS.textFromJSString )
298+- {-# INLINE parseJSON #-}
299++-- instance FromJSON Text where
300++-- parseJSON = withJSString "Text" ( pure . JSS.textFromJSString )
301++-- {-# INLINE parseJSON #-}
302+
303+-instance ToJSON LT.Text where
304+- toJSON = stringValue . JSS.textToJSString . LT.toStrict
305+- {-# INLINE toJSON #-}
306++-- instance ToJSON LT.Text where
307++-- toJSON = stringValue . JSS.textToJSString . LT.toStrict
308++-- {-# INLINE toJSON #-}
309+
310+-instance FromJSON LT.Text where
311+- parseJSON = withJSString "Lazy Text" $ pure . LT.fromStrict . JSS.textFromJSString
312+- {-# INLINE parseJSON #-}
313++-- instance FromJSON LT.Text where
314++-- parseJSON = withJSString "Lazy Text" $ pure . LT.fromStrict . JSS.textFromJSString
315++-- {-# INLINE parseJSON #-}
316+
317+ instance (ToJSON a) => ToJSON [a] where
318+ toJSON = arrayValue . arrayValueList . map toJSON
319+diff --git a/JavaScript/Web/Canvas.hs b/JavaScript/Web/Canvas.hs
320+index 0a7684c..74490c2 100644
321+--- a/JavaScript/Web/Canvas.hs
322++++ b/JavaScript/Web/Canvas.hs
323+@@ -69,7 +69,7 @@ import Control.Monad
324+
325+ import Data.Data
326+ import Data.Maybe (fromJust)
327+-import Data.Text (Text)
328++-- import Data.Text (Text)
329+ import Data.Typeable
330+
331+ import GHCJS.Foreign
332+diff --git a/ghcjs-base.cabal b/ghcjs-base.cabal
333+index 4a64694..acf8806 100644
334+--- a/ghcjs-base.cabal
335++++ b/ghcjs-base.cabal
336+@@ -55,7 +55,7 @@ library
337+ Data.JSString.RealFloat
338+ Data.JSString.RegExp
339+ Data.JSString.Internal
340+- Data.JSString.Text
341++ -- Data.JSString.Text
342+ Data.JSString.Internal.Fusion
343+ Data.JSString.Internal.Fusion.Types
344+ Data.JSString.Internal.Fusion.Common
345+@@ -78,12 +78,12 @@ library
346+ JavaScript.Array.Internal
347+ JavaScript.Array.ST
348+ JavaScript.Cast
349+- JavaScript.JSON
350+- JavaScript.JSON.Types
351+- JavaScript.JSON.Types.Class
352+- JavaScript.JSON.Types.Generic
353+- JavaScript.JSON.Types.Instances
354+- JavaScript.JSON.Types.Internal
355++ -- JavaScript.JSON
356++ -- JavaScript.JSON.Types
357++ -- JavaScript.JSON.Types.Class
358++ -- JavaScript.JSON.Types.Generic
359++ -- JavaScript.JSON.Types.Instances
360++ -- JavaScript.JSON.Types.Internal
361+ JavaScript.Number
362+ JavaScript.Object
363+ JavaScript.Object.Internal
364+@@ -115,11 +115,11 @@ library
365+ JavaScript.Web.Storage
366+ JavaScript.Web.Storage.Internal
367+ JavaScript.Web.StorageEvent
368+- JavaScript.Web.XMLHttpRequest
369++ -- JavaScript.Web.XMLHttpRequest
370+ JavaScript.Web.WebSocket
371+ JavaScript.Web.Worker
372+- other-modules: GHCJS.Internal.Types
373+ Data.JSString.Internal.Type
374++ other-modules: GHCJS.Internal.Types
375+ JavaScript.TypedArray.Internal.Types
376+ JavaScript.TypedArray.ArrayBuffer.Internal
377+ JavaScript.TypedArray.DataView.Internal
378+@@ -144,15 +144,15 @@ library
379+ integer-gmp,
380+ binary >= 0.8 && < 0.11,
381+ bytestring >= 0.10 && < 0.11,
382+- text >= 1.1 && < 1.3,
383+- aeson >= 0.8 && < 1.6,
384+- scientific >= 0.3 && < 0.4,
385++ -- text >= 1.1 && < 1.3,
386++ -- aeson >= 0.8 && < 1.6,
387++ -- scientific >= 0.3 && < 0.4,
388+ vector >= 0.10 && < 0.13,
389+ containers >= 0.5 && < 0.7,
390+ time >= 1.5 && < 1.10,
391+- hashable >= 1.2 && < 1.4,
392+- unordered-containers >= 0.2 && < 0.3,
393+- attoparsec >= 0.11 && < 0.15,
394++ -- hashable >= 1.2 && < 1.4,
395++ -- unordered-containers >= 0.2 && < 0.3,
396++ -- attoparsec >= 0.11 && < 0.15,
397+ transformers >= 0.3 && < 0.6,
398+ primitive >= 0.5 && < 0.8,
399+ deepseq >= 1.3 && < 1.5,
400+@@ -161,37 +161,37 @@ library
401+ if !impl(ghcjs) && !os(ghcjs)
402+ buildable: False
403+
404+-test-suite tests
405+- type: exitcode-stdio-1.0
406+- hs-source-dirs: test
407+- main-is: Tests.hs
408+- other-modules: Tests.Marshal
409+- Tests.Properties
410+- Tests.Properties.Numeric
411+- Tests.SlowFunctions
412+- Tests.QuickCheckUtils
413+- Tests.Regressions
414+- Tests.Utils
415+- ghc-options:
416+- -Wall -rtsopts
417+- build-depends:
418+- HUnit >= 1.2,
419+- QuickCheck >= 2.7,
420+- array,
421+- text,
422+- base,
423+- bytestring,
424+- deepseq,
425+- directory,
426+- ghc-prim,
427+- ghcjs-prim,
428+- ghcjs-base,
429+- primitive,
430+- quickcheck-unicode,
431+- random,
432+- test-framework >= 0.4,
433+- test-framework-hunit >= 0.2,
434+- test-framework-quickcheck2 >= 0.2
435+- default-language: Haskell2010
436+- if !impl(ghcjs) && !os(ghcjs)
437+- buildable: False
438++-- test-suite tests
439++-- type: exitcode-stdio-1.0
440++-- hs-source-dirs: test
441++-- main-is: Tests.hs
442++-- other-modules: Tests.Marshal
443++-- Tests.Properties
444++-- Tests.Properties.Numeric
445++-- Tests.SlowFunctions
446++-- Tests.QuickCheckUtils
447++-- Tests.Regressions
448++-- Tests.Utils
449++-- ghc-options:
450++-- -Wall -rtsopts
451++-- build-depends:
452++-- HUnit >= 1.2,
453++-- QuickCheck >= 2.7,
454++-- array,
455++-- text,
456++-- base,
457++-- bytestring,
458++-- deepseq,
459++-- directory,
460++-- ghc-prim,
461++-- ghcjs-prim,
462++-- ghcjs-base,
463++-- primitive,
464++-- quickcheck-unicode,
465++-- random,
466++-- test-framework >= 0.4,
467++-- test-framework-hunit >= 0.2,
468++-- test-framework-quickcheck2 >= 0.2
469++-- default-language: Haskell2010
470++-- if !impl(ghcjs) && !os(ghcjs)
471++-- buildable: False
compiler/ghcjs/ghcjs810-patched-boot-packages/hashable.patchnew file+99
@@ -0,0 +1,99 @@
1+diff --git a/hashable.cabal b/hashable.cabal
2+index 4197060..8c339b1 100755
3+--- a/hashable.cabal
4++++ b/hashable.cabal
5+@@ -88,6 +88,8 @@ library
6+ build-depends: ghc-bignum ==1.0.* || ==1.2.*
7+
8+ else
9++ if impl(ghcjs)
10++ build-depends: ghcjs-base
11+ if flag(integer-gmp)
12+ build-depends: integer-gmp >=0.4 && <1.1
13+
14+diff --git a/src/Data/Hashable/Class.hs b/src/Data/Hashable/Class.hs
15+index c7dd8c5..0e3bbe7 100755
16+--- a/src/Data/Hashable/Class.hs
17++++ b/src/Data/Hashable/Class.hs
18+@@ -5,6 +5,10 @@
19+
20+ {-# LANGUAGE Trustworthy #-}
21+
22++#ifdef __GHCJS__
23++{-# LANGUAGE JavaScriptFFI, UnboxedTuples, GHCForeignImportPrim #-}
24++#endif
25++
26+ #if __GLASGOW_HASKELL__ >= 801
27+ {-# LANGUAGE PolyKinds #-} -- For TypeRep instances
28+ #endif
29+@@ -72,7 +76,9 @@ import Data.Int (Int8, Int16, Int32, Int64)
30+ import Data.List (foldl')
31+ import Data.Ratio (Ratio, denominator, numerator)
32+ import qualified Data.Text as T
33++#ifndef __GHCJS__
34+ import qualified Data.Text.Array as TA
35++#endif
36+ import qualified Data.Text.Internal as T
37+ import qualified Data.Text.Lazy as TL
38+ import Data.Version (Version(..))
39+@@ -152,7 +158,11 @@ import GHC.Exts (Int (..), sizeofByteArray#)
40+ # define MIN_VERSION_integer_gmp_1_0_0
41+ # endif
42+
43++#ifndef __GHCJS__
44+ import GHC.Exts (Int(..))
45++#else
46++import GHC.Exts (Int(..), Int#)
47++#endif
48+ import GHC.Integer.GMP.Internals (Integer(..))
49+ # if defined(MIN_VERSION_integer_gmp_1_0_0)
50+ import GHC.Exts (sizeofByteArray#)
51+@@ -195,6 +205,10 @@ import Data.Kind (Type)
52+ import Data.Hashable.Imports
53+ import Data.Hashable.LowLevel
54+
55++#ifdef __GHCJS__
56++import Data.JSString (JSString)
57++#endif
58++
59+ #include "MachDeps.h"
60+
61+ infixl 0 `hashWithSalt`
62+@@ -676,17 +690,18 @@ instance Hashable BSI.ShortByteString where
63+ #endif
64+
65+ instance Hashable T.Text where
66++#ifndef __GHCJS__
67+ hashWithSalt salt (T.Text arr off len) =
68+ hashByteArrayWithSalt (TA.aBA arr) (off `shiftL` 1) (len `shiftL` 1)
69+ (hashWithSalt salt len)
70++#else
71++ hashWithSalt salt (T.Text txt) =
72++ let (# ba, len #) = js_textFromJSString txt
73++ in hashByteArrayWithSalt ba (0 `shiftL` 1) (I# len `shiftL` 1) salt
74++#endif
75+
76+ instance Hashable TL.Text where
77+- hashWithSalt salt = finalise . TL.foldlChunks step (SP salt 0)
78+- where
79+- finalise (SP s l) = hashWithSalt s l
80+- step (SP s l) (T.Text arr off len) = SP
81+- (hashByteArrayWithSalt (TA.aBA arr) (off `shiftL` 1) (len `shiftL` 1) s)
82+- (l + len)
83++ hashWithSalt = TL.foldlChunks hashWithSalt
84+
85+ -- | Compute the hash of a ThreadId.
86+ hashThreadId :: ThreadId -> Int
87+@@ -880,6 +895,12 @@ instance Hashable1 Option where liftHashWithSalt h salt (Option a) = liftHashWit
88+ #endif
89+ #endif
90+
91++#ifdef __GHCJS__
92++foreign import javascript unsafe
93++ "h$textFromString"
94++ js_textFromJSString :: JSString -> (# ByteArray#, Int# #)
95++#endif
96++
97+ -- instances for @Data.Functor.{Product,Sum,Compose}@, present
98+ -- in base-4.9 and onward.
99+ #if MIN_VERSION_base(4,9,0)
compiler/ghcjs/ghcjs810-src.jsonnew file+6
@@ -0,0 +1,6 @@
1+{
2+ "url": "https://github.com/ghcjs/ghcjs",
3+ "rev": "bb403ec3a1506831aae2d608b7b21c1937e4fb20",
4+ "sha256": "0bs3hijwn0p4wvphwg78mwbz8qyi10wqgfh8yfaszaj1766892ba",
5+ "fetchSubmodules": true
6+}
compiler/ghcjs/ghcjs88-src.jsonnew file+6
@@ -0,0 +1,6 @@
1+{
2+ "url": "https://github.com/ghcjs/ghcjs",
3+ "rev": "1af48a877fdf1f647a3b81e828a1e61adb0baceb",
4+ "sha256": "sha256-B4LFpd1nl96SO6/gsTjkizMGSglMkrujmwgXVjahC68=",
5+ "fetchSubmodules": true
6+}
compiler/ghcjs/patches/810/boot-optimization-flags.patchnew file+14
@@ -0,0 +1,14 @@
1+diff --git a/src-bin/Boot.hs b/src-bin/Boot.hs
2+index 2e35a26..5db2f9b 100755
3+--- a/src-bin/Boot.hs
4++++ b/src-bin/Boot.hs
5+@@ -721,6 +721,9 @@ cabalConfigureFlags = do
6+ , "--prefix", T.pack (locs ^. blGhcjsTopDir)
7+ , "--configure-option", "--host=js-unknown-ghcjs"
8+ , "--ghcjs-options=-fwrite-ide-info"
9++ , "--ghcjs-options=-O2"
10++ , "--ghcjs-options=-fexpose-all-unfoldings"
11++ , "--ghcjs-options=-fspecialise-aggressively"
12+ , "--enable-debug-info"
13+ , "--disable-library-stripping"
14+ , "--disable-executable-stripping"
compiler/ghcjs/patches/810/fast-weak.patchnew file+87
@@ -0,0 +1,87 @@
1+diff --git a/lib/boot/shims/src/gc.js.pp b/lib/boot/shims/src/gc.js.pp
2+index 76321b2..a2cf416 100644
3+--- a/lib/boot/shims/src/gc.js.pp
4++++ b/lib/boot/shims/src/gc.js.pp
5+@@ -444,6 +444,50 @@ function h$follow(obj, sp) {
6+ } else if(typeof c.len === 'number' && c.buf instanceof ArrayBuffer) {
7+ TRACE_GC("marking ByteArray");
8+ MARK_OBJ(c);
9++ } else if(c instanceof h$FastWeak) {
10++ MARK_OBJ(c);
11++ if(c.ticket !== null && !IS_MARKED(c.ticket)) {
12++ c.ticket = null; // If the ticket isn't reachable, this will let it get cleaned up by the JS gc; if it is reachable, it'll fill this back in
13++ }
14++ } else if(c instanceof h$FastWeakTicket) {
15++ MARK_OBJ(c);
16++ if(!IS_MARKED(c.val)) {
17++ ADDW(c.val);
18++ }
19++ if(IS_MARKED(c.weak)) {
20++ // In this case, the weak side has been marked first, which means it's been cleared; restore it
21++ c.weak.ticket = c;
22++ }
23++ } else if(c instanceof h$FastWeakBag) {
24++ MARK_OBJ(c);
25++ var j = 0; // j should always be equal to the number of not-yet-necessarily-dead tickets that have been traversed; this should always be less than or equal to i
26++ for(i = 0; i < c.tickets.length; i++) {
27++ // Any nulls left in the array prior to checking on the tickets must be tickets that died in the last GC, so we ignore them
28++ if(c.tickets[i] !== null) {
29++ if(j !== i) {
30++ c.tickets[i].pos = j;
31++ }
32++ if(!IS_MARKED(c.tickets[i])) {
33++ // If the ticket isn't reachable, this will let it get cleaned up by the JS gc; if it is reachable, it'll fill this back in
34++ c.tickets[j] = null;
35++ } else if(j !== i) {
36++ // We need to move the item
37++ c.tickets[j] = c.tickets[i];
38++ } // If it's marked and not moving, don't do anything
39++ j++;
40++ }
41++ }
42++ c.tickets.length = j; // Shrink the array if any nulls have been dropped
43++ } else if(c instanceof h$FastWeakBagTicket) {
44++ MARK_OBJ(c);
45++ if(!IS_MARKED(c.val)) {
46++ ADDW(c.val);
47++ }
48++ if(IS_MARKED(c.bag)) {
49++ // In this case, the weak side has been marked first, which means it's been cleared; restore it
50++ c.bag.tickets[c.pos] = c;
51++ }
52++
53+ } else if(c instanceof h$Weak) {
54+ MARK_OBJ(c);
55+ } else if(c instanceof h$MVar) {
56+diff --git a/lib/boot/shims/src/weak.js.pp b/lib/boot/shims/src/weak.js.pp
57+index 8df313b..d537027 100644
58+--- a/lib/boot/shims/src/weak.js.pp
59++++ b/lib/boot/shims/src/weak.js.pp
60+@@ -87,3 +87,27 @@ function h$finalizeWeak(w) {
61+ RETURN_UBX_TUP2(r, 1);
62+ }
63+ }
64++
65++function h$FastWeak(ticket) {
66++ this.ticket = ticket;
67++ this.m = 0;
68++}
69++
70++function h$FastWeakTicket(val) {
71++ this.val = val;
72++ this.weak = new h$FastWeak(this);
73++ this.m = 0;
74++}
75++
76++function h$FastWeakBag() {
77++ this.tickets = [];
78++ this.m = 0;
79++}
80++
81++function h$FastWeakBagTicket(bag, val) {
82++ this.val = val;
83++ this.bag = bag;
84++ this.pos = bag.tickets.length;
85++ bag.tickets.push(this);
86++ this.m = 0;
87++};
compiler/windows/include/synchapi.hnew file+1
@@ -0,0 +1 @@
1+#include <windows.h>
compiler/windows/include/windows.hnew file+18
@@ -0,0 +1,18 @@
1+// Just enoough windows.h stuff to make rts headers usable when building GHC cross compiler.
2+// See compiler/ghc/default.nix for where this is used.
3+#ifndef _WINDOWS_
4+#define _WINDOWS_
5+
6+#define __stdcall
7+
8+typedef unsigned long DWORD;
9+typedef void * PVOID;
10+
11+typedef struct _RTL_CONDITION_VARIABLE { PVOID Ptr; } RTL_CONDITION_VARIABLE;
12+typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE;
13+
14+typedef struct _RTL_SRWLOCK { PVOID Ptr; } RTL_SRWLOCK;
15+typedef RTL_SRWLOCK SRWLOCK;
16+
17+#endif
18+
config.nixnew file+8
@@ -0,0 +1,8 @@
1+{
2+ # allow building for windows
3+ allowUnsupportedSystem = true;
4+ # we want the 64bit wine version
5+ wine.build = "wine64";
6+ wine.release = "stable";
7+}
8+
default.nix+29−4
@@ -1,4 +1,29 @@
1−hackage: let haskell = {
1+{...}@args:
2− compat = import ./compat hackage;
2+
3− mkPkgSet = pkgs: pkg-def: import ./package-set.nix { inherit pkg-def pkgs hackage haskell; };
3+let
4−}; in haskell
4+ nixpkgsSrc =
5+ builtins.fetchTarball {
6+ url = "https://github.com/NixOS/nixpkgs/archive/110a2c9ebbf5d4a94486854f18a37a938cfacbbb.tar.gz";
7+ sha256 = "sha256-leWXLchbAbqOlLT6tju631G40SzQWPqaAXQG3zH1Imw=";
8+ };
9+ pkgs = args.pkgs or (import nixpkgsSrc {});
10+ flake-compat =
11+ pkgs.fetchzip {
12+ url = "https://github.com/edolstra/flake-compat/archive/5523c47f13259b981c49b26e28499724a5125fd8.tar.gz";
13+ sha256 = "sha256-7IySNHriQjzOZ88DDk6VDPf1GoUaOrOeUdukY62o52o=";
14+ };
15+ self = import flake-compat {
16+ # We bypass flake-compat's rootSrc cleaning by evading its detection of this as a git
17+ # repo.
18+ # This is done for 3 reasons:
19+ # * To workaround https://github.com/edolstra/flake-compat/issues/25
20+ # * Make `updateMaterilized` scripts work (if filtering is done by `flake-compat`
21+ # the `updateMaterilized` scripts will try to update the copy in the store).
22+ # * Allow more granular filtering done by the tests (the use of `cleanGit` and `cleanSourceWith`
23+ # in `test/default.nix`). If `flake-compat` copies the whole git repo, any change to the
24+ # repo causes a change of input for all tests.
25+ src = { outPath = ./.; };
26+ inherit pkgs;
27+ };
28+in self.defaultNix // (self.defaultNix.internal.compat
29+({ system = args.pkgs.system or builtins.currentSystem; } // args))
dimension.nixnew file+114
@@ -0,0 +1,114 @@
1+# Borrowed from https://github.com/cachix/ghcide-nix/pull/4/files#diff-70bfff902f4dec33e545cac10ee5844d
2+# Tweaked to use builtins.mapAttrs instead of needing the one from nixpkgs lib
3+{
4+ /*
5+ dimension: name -> attrs -> function -> attrs
6+ where
7+ function: keyText -> value -> attrsOf package
8+
9+ WARNING: Attribute names must not contain periods (".").
10+ See https://github.com/NixOS/nix/issues/3088
11+
12+ NOTE: The dimension name will be picked up by agent and web ui soon.
13+
14+ Specifies a dimension of the build matrix. For example
15+
16+ dimension "Example" {
17+ withP = { p = true; }
18+ withoutP = { p = false; }
19+ } (key: # either "withP" or "withoutP"
20+ { p }: # either p = true or p = false
21+ myProject p
22+ )
23+
24+ evaluates roughly to
25+
26+ {
27+ withP = myProject true;
28+ withoutP = myProject false;
29+ }
30+
31+ Use nested calls for multiple dimensions.
32+
33+ Example:
34+
35+ dimension "System" {
36+ "x86_64-linux" = {};
37+ # ...
38+ }: (system: {}:
39+
40+ dimension "Nixpkgs release" (
41+ {
42+ "nixpkgs-19_03".nixpkgs = someSource
43+ } // optionalAttrs (system != "...") {
44+ "nixpkgs-unstable".nixpkgs = someOtherSource
45+ }
46+ ) (_key: { nixpkgs }:
47+
48+ myProject system nixpkgs
49+
50+ )
51+ )
52+
53+ evaluates roughly to
54+
55+ {
56+ x86_64-linux.nixpkgs-19_03 = myProject "x86_64-linux" someSource;
57+ x86_64-linux.nixpkgs-unstable = myProject "x86_64-linux" someOtherSource;
58+ ...
59+ }
60+
61+ If you need to make references across attributes, you can do so by binding
62+ the result. Wherever you write
63+
64+ dimension "My dimension" {} (key: value: f1 key value)
65+
66+ You can also write
67+
68+ let
69+ myDimension = dimension "My dimension" {} (key: value: f2 key value myDimension)
70+ in
71+ myDimension
72+
73+ This example builds a single test runner to reuse across releases:
74+
75+ let
76+ overlay =
77+ testRunnerPkgs: self: super: {
78+ # ...
79+ };
80+ myProject =
81+ { nixpkgs,
82+ pkgs ? import nixpkgs { overlays = [ overlay ]; },
83+ testRunnerPkgs ? pkgs
84+ }: pkgs;
85+ in
86+
87+ let
88+ latest = "nixpkgs-19_03";
89+ releases =
90+ dimension "Nixpkgs release"
91+ {
92+ nixpkgs-18_09.nixpkgs = someSource
93+ nixpkgs-19_03.nixpkgs = someOtherSource
94+ }
95+ (_key: { nixpkgs }:
96+
97+ myProject {
98+ inherit nixpkgs;
99+ testRunnerPkgs = releases."${latest}";
100+ }
101+
102+ );
103+ in releases;
104+
105+ */
106+ dimension = name: attrs: f:
107+ builtins.mapAttrs
108+ (k: v:
109+ let o = f k v;
110+ in o // { recurseForDerivations = o.recurseForDerivations or true; }
111+ )
112+ attrs
113+ // { meta.dimension.name = name; };
114+}
docs/architecture.mdnew file+68
@@ -0,0 +1,68 @@
1+# Architecture
2+
3+There are multiple components that play a part in the haskell.nix
4+infrastructure. These are `nix-tools`, `haskell.nix`, `hackage.nix`,
5+and `stackage.nix`.
6+
7+```no-highlight
8+ .-------------. .-------------.
9+.- nix-tools ------. | haskell.nix | .- | hackage.nix |
10+| .--------------. | .----------------. '-------------' | '-------------'
11+| | stack-to-nix |---> | stack-pkgs.nix |-. | | |
12+| '--------------' | '----------------' | v | v
13+| .-------------. | .----------. '--> .----------. <-' .--------------.
14+| | plan-to-nix |----> | plan.nix |------.---> | pkgs.nix | <--- | stackage.nix |
15+| '-------------' | '----------' | '----------' '--------------'
16+| .--------------. | .--------------. | |
17+| | cabal-to-nix |---> | $package.nix |--' v
18+| '--------------' | '--------------' .-------------.
19+'------------------' | default.nix |
20+ '-------------'
21+ |
22+ v
23+ .-------------.
24+ | release.nix |
25+ '-------------'
26+```
27+haskell.nix diagram
28+
29+## [nix-tools](https://github.com/input-output-hk/nix-tools)
30+
31+nix-tools is a Haskell package that provides the following tools:
32+
33+- `cabal-to-nix`: a `.cabal` to `.nix` transformer that retains
34+ conditional expressions.
35+
36+- `stack-to-nix`: a `stack.yaml` to `.nix` transformer that will read
37+ in a `stack.yaml` expression an generate a `pkgs.nix` file suited for
38+ use with `haskell.nix`.
39+
40+- `plan-to-nix`: a `plan.json` to `.nix` transformer that will read in
41+ a `plan.json` file and generate a `pkgs.nix` file suited for use
42+ with `haskell.nix`.
43+
44+as well as a few other tools used to generate `hackage.nix` and `stackage.nix`.
45+
46+## [haskell.nix][]
47+
48+[Haskell.nix][] is the runtime system for this Haskell infrastructure.
49+It contains the component builder, as well as the system package and
50+license mapping. Without haskell.nix the expressions generated by
51+either of the `nix-tools` tools make little sense on their own.
52+
53+## [hackage.nix][]
54+
55+[hackage.nix][] provides all cabal expressions from hackage as nix
56+expressions. It is periodically updated to keep in sync with the set
57+of packages available on hackage.
58+
59+## [stackage.nix][]
60+
61+[stackage.nix][] is similar to hackage.nix but provides all stackage
62+snapshots (lts, and nightly) as nix expressions. It naturally depends
63+on hackage.nix to resolve package names, versions and revisions to the
64+respective packages from hackage.nix.
65+
66+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
67+[hackage.nix]: https://github.com/input-output-hk/hackage.nix
68+[stackage.nix]: https://github.com/input-output-hk/stackage.nix
docs/changelog.mdnew file+1
@@ -0,0 +1 @@
1+../changelog.md
docs/dev/adding-new-ghc.mdnew file+34
@@ -0,0 +1,34 @@
1+# Adding a new GHC version to haskell.nix
2+
3+## Update `overlays/bootstrap.nix`
4+
5+Each ghc version is defined in this file. Duplicate one of the existing
6+ghc version definitions and replace the version numbers. Make sure
7+you update the `spec.sha256` or the other versions source will be used.
8+Check the LLVM version that should be used in the
9+[ghc wiki](https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/backends/llvm/installing).
10+
11+## Update the list of cached GHC versions in `ci.nix`
12+
13+## Update [supported ghc versions](../reference/supported-ghc-versions.md) document
14+
15+## Add the materialized files
16+
17+In the haskell.nix repo run:
18+
19+```
20+mkdir materialized/ghc884
21+nix-build scripts/check-compiler-materialization --argstr compiler-nix-name ghc884
22+```
23+
24+The `nix-build` command will fail with something like:
25+
26+```
27+Materialized nix used for dummy-data-x86_64-unknown-linux-musl-ghc-8.10.1 incorrect. To fix run: /nix/store/wnwpyrhv4nxgyljz3f20gdpspjxvm7h4-updateMaterialized
28+```
29+
30+Run the `updateMaterialized` script and repeat the `nix-build` until it no longer fails.
31+If the failure is not a problem with materialization and no `updateMaterialized` script
32+is provided then you may need to fix the failure another way or (if it only relates to
33+one of the cross compilers) modify `scripts/check-compiler-materialization/default.nix`
34+so that it skips that compiler.
docs/dev/coverage.mdnew file+180
@@ -0,0 +1,180 @@
1+# Developer Coverage Overview
2+
3+## Building
4+
5+The implementation of coverage starts with the "doCoverage" flag on
6+the builder in `comp-builder.nix`. The doCoverage flag enables and
7+disables the Cabal coverage flag and copies any generated coverage
8+data to "$out/share/hpc".
9+
10+### Mix and tix files
11+
12+The coverage information for any derivation consists of "mix" and
13+"tix" files.
14+
15+Mix files record static information about a source file and are
16+generated at build time. They primarily contain a path to the source
17+file and information about expressions and regions of the source file,
18+which are later referenced by tix files.
19+
20+Tix files contain dynamic information about a test run, recording when
21+a portion of a source file is touched by a test. These are generated
22+when the test is run.
23+
24+### Multiple local packages
25+
26+In the context of multiple local packages, there are a few types of
27+coverage we might be interested in:
28+ - How well does the tests for this package cover the package library?
29+ - How well does the tests for this package cover the libraries of
30+ other packages in this project?
31+ - Both of the above.
32+
33+To facilitate expressing any of these classifications of coverage, the
34+`lib/cover.nix` function provides the `mixLibraries` argument. If
35+you're just interested in how the tests cover the package library, you
36+provide that library as an argument to `mixLibraries`. If you're
37+interested in how the tests also cover other local packages in the
38+project, you can also provide those libraries as arguments to
39+mixLibraries.
40+
41+The `projectCoverageReport` and `coverageReport` attributes that are
42+provided by default on projects and packages respectively provide
43+coverage information for *all* local packages in the project. This is
44+to mimic the behaviour of Stack, which seems to be the expectation of
45+most people. Of course, you can use the `projectCoverageReport` and
46+`coverageReport` functions to construct your own custom coverage
47+reports (as detailed in the [coverage tutorial](../tutorials/coverage.md#custom)).
48+
49+## Coverage reports
50+
51+### Package reports
52+
53+The coverage information generated will look something like this:
54+
55+```bash
56+/nix/store/...-my-project-0.1.0.0-coverage-report/
57+└── share
58+ └── hpc
59+ └── vanilla
60+ ├── html
61+ │   └── my-library-0.1.0.0
62+ │   ├── my-library-0.1.0.0-48EVZBwW9Kj29VTaRMhBDf
63+ │ │ ├── My.Lib.Config.hs.html
64+ │ │ ├── My.Lib.Types.hs.html
65+ │ │ └── My.Lib.Util.hs.html
66+ │   ├── hpc_index_alt.html
67+ │   ├── hpc_index_exp.html
68+ │   ├── hpc_index_fun.html
69+ │   └── hpc_index.html
70+ ├── mix
71+ │   └── my-library-0.1.0.0
72+ │   └── my-library-0.1.0.0-48EVZBwW9Kj29VTaRMhBDf
73+ │      ├── My.Lib.Config.mix
74+ │      ├── My.Lib.Types.mix
75+ │      └── My.Lib.Util.mix
76+ └── tix
77+ └── my-library-0.1.0.0
78+ ├── my-library-0.1.0.0.tix
79+ ├── my-test-1
80+ │   └── my-test-1.tix
81+ └── unit-test
82+ └── unit-test.tix
83+```
84+
85+- The mix files are copied verbatim from the library built with
86+ coverage.
87+- The tix files for each test are copied from the check run verbatim
88+ and are output to ".../tix/<libraryname>/<testname>/<testname>.tix".
89+- The tix files for each library are generated by summing the tix
90+ files for each test, but excluding any test modules. This tix file
91+ is output to ".../tix/<libraryname>/<libraryname>.tix".
92+ - Test modules are determined by inspecting the plan for the project
93+ (i.e. for the project "my-project" and test-suite "my-test-1", the
94+ test modules are read from:
95+ `my-project.checks.my-test-1.config.modules`)
96+- The hpc HTML reports for each library are generated from their
97+ respective tix files (i.e. the
98+ `share/hpc/vanilla/html/my-library-0.1.0.0` report is generated from
99+ the
100+ `share/hpc/vanilla/tix/my-library-0.1.0.0/my-library-0.1.0.0.tix`
101+ file)
102+
103+### Project-wide reports
104+
105+The coverage information for an entire project will look something
106+like this:
107+
108+```bash
109+/nix/store/...-coverage-report
110+└── share
111+ └── hpc
112+ └── vanilla
113+ ├── html
114+ │   ├── index.html
115+ │   ├── all
116+ │   │   ├── my-library-0.1.0.0-ERSaOroBZhe9awsoBkhmcV
117+ │ │   │ ├── My.Lib.Config.hs.html
118+ │ │   │ ├── My.Lib.Types.hs.html
119+ │ │   │ └── My.Lib.Util.hs.html
120+ │ │ ├── other-library-0.1.0.0-48EVZBwW9Kj29VTaRMhBDf
121+ │ │ │   ├── Other.Lib.A.hs.html
122+ │ │ │   └── Other.Lib.B.hs.html
123+ │   │   ├── hpc_index_alt.html
124+ │   │   ├── hpc_index_exp.html
125+ │   │   ├── hpc_index_fun.html
126+ │   │   └── hpc_index.html
127+ │   ├── my-library-0.1.0.0
128+ │   │   ├── my-library-0.1.0.0-ERSaOroBZhe9awsoBkhmcV
129+ │ │   │ ├── My.Lib.Config.hs.html
130+ │ │   │ ├── My.Lib.Types.hs.html
131+ │ │   │ └── My.Lib.Util.hs.html
132+ │   │   ├── hpc_index_alt.html
133+ │   │   ├── hpc_index_exp.html
134+ │   │   ├── hpc_index_fun.html
135+ │   │   └── hpc_index.html
136+ │ └── other-libray-0.1.0.0
137+ │ ├── other-library-0.1.0.0-48EVZBwW9Kj29VTaRMhBDf
138+ │ │   ├── Other.Lib.A.hs.html
139+ │ │   └── Other.Lib.B.hs.html
140+ │ ├── hpc_index_alt.html
141+ │ ├── hpc_index_exp.html
142+ │ ├── hpc_index_fun.html
143+ │ └── hpc_index.html
144+ ├── mix
145+ │   ├── my-library-0.1.0.0-ERSaOroBZhe9awsoBkhmcV
146+ │   │   ├── My.Lib.Config.mix
147+ │   │   ├── My.Lib.Types.mix
148+ │   │   └── My.Lib.Util.mix
149+ │   └── other-library-0.1.0.0-48EVZBwW9Kj29VTaRMhBDf
150+ │   ├── Other.Lib.A.mix
151+ │   └── Other.Lib.B.mix
152+ └── tix
153+ ├── all
154+ │   └── all.tix
155+ ├── my-library-0.1.0.0
156+ │ ├── my-library-0.1.0.0.tix
157+ │ ├── my-test-1
158+ │ │   └── my-test-1.tix
159+ │ └── unit-test
160+ │ └── unit-test.tix
161+ └── another-library-0.1.0.0
162+ ├── another-library-0.1.0.0.tix
163+ ├── my-test-2
164+ │   └── my-test-2.tix
165+ └── unit-test
166+ └── unit-test.tix
167+```
168+
169+All of the coverage information is copied verbatim from the coverage
170+reports for each of the constituent packages. A few additions are
171+made:
172+ - `tix/all/all.tix` is generated from the union of all the library
173+ tix files.
174+ - We use this file when generating coverage reports for
175+ "coveralls.io".
176+ - An index page (`html/index.html`) is generated which links to the
177+ HTML coverage reports of the constituent packages.
178+ - A synthetic HTML report is generated from the `tix/all/all.tix`
179+ file. This shows the union of all the coverage information
180+ generated by each constituent coverage report.
docs/dev/dev-architecture.mdnew file+90
@@ -0,0 +1,90 @@
1+# Developer Architecture Overview
2+
3+This shall give a sufficiently good overview over the haskell.nix
4+ideas, such that a new developer can navigate around without too
5+much trouble.
6+
7+## Packages
8+
9+`haskell.nix` is centered around packages (haskell package
10+descriptions as nix-expressions). These are generated by
11+`cabal-to-nix` from the `nix-tools` package. `stack-to-nix` and
12+`plan-to-nix` will delegate the transformation of cabal packages to
13+nix expressions to the same code that `cabal-to-nix` uses.
14+
15+These packages will look similar to the following:
16+
17+```nix
18+{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
19+{
20+ flags = {};
21+ package = { ... };
22+ components = {
23+ "library" = { depends = [ ... ]; };
24+ exes = { "..." = { depends = [ ... ]; }; ... };
25+ sublibs = { "..." = { depends = [ ... ]; }; ... };
26+ tests = { "..." = { depends = [ ... ]; }; ... };
27+ benchmarks = { "..." = { depends = [ ... ]; }; ... };
28+ };
29+};
30+```
31+
32+The exact specification can be found in `modules/package.nix`.
33+
34+## Plans
35+
36+Packages (unless specified directly in the `packages` attribute of the
37+module) usually come from a plan. A plan is either a Stackage snapshot
38+(nightly or LTS) or a build plan as produced by `cabal`.
39+
40+Plan files usually look like the following:
41+```nix
42+hackage:
43+{
44+ packages = {
45+ "$pkg".revision = hackage.$pkg.$version.revisions.default;
46+ "$pkg".flags = { flag1 = true; flag2 = false; ... };
47+ ...
48+ };
49+ compiler = {
50+ version = "8.4.4";
51+ nix-name = "ghc844";
52+ packages = {
53+ "binary" = "0.8.5.1";
54+ ...
55+ };
56+ };
57+}
58+```
59+
60+This provides enough information about the compiler, what packages the
61+compiler ships with and the packages we want to use in our plan.
62+
63+This revision and flag information will be inlined into a list of
64+packages in `config.packages` in `modules/plan.nix`. Thus
65+`config.packages` will only contains packages as described in the
66+previous section.
67+
68+## Package Sets (of derivations)
69+
70+We finally tie this all together in `package-set.nix` where we use
71+`modules/component-driver.nix` to produce the derivations for each
72+packages component to produce the final `config.hsPkgs` value.
73+
74+There is also a `modules/compat-driver.nix` that should produce the
75+same packageset to be used with the stock haskell infrastructure in
76+nixpkgs (*This has undergone substantially less testing*).
77+
78+### Component builder
79+
80+To prevent depending on multiple instances of the same libraries, the
81+component builder will try to build every package from scratch and
82+rely as little as possible on packages that are shipped with the GHC
83+distribution. The exceptions are packages that are known to not be
84+reinstallable. See `config.nonReinstallablePkgs`.
85+
86+The component builder can be found in `modules/component-driver.nix`
87+and `builder/default.nix`. The component-driver will ensure that we do
88+not try to rebuild non-reinstallable packages, and call the
89+`builder/default.nix` on each package in `config.packages` to produce
90+`config.hsPkgs`.
docs/dev/hix.mdnew file+27
@@ -0,0 +1,27 @@
1+# Making changes to Hix
2+
3+When making changes to the way Hix works it is often useful to be able to
4+test the changes locally before uploading them to github.
5+
6+## Hix Command Wrappers
7+
8+Install the hix command wrappers after making changes to a local clone of haskell.nix:
9+
10+```
11+nix-env -iA hix -f /path/to/local/haskell.nix
12+hix-shell
13+```
14+
15+Or override the version of haskell.nix used by the commands with the `HIX_ROOT` environment variable:
16+
17+```
18+HIX_ROOT=/path/to/local/haskell.nix hix-shell
19+```
20+
21+## Flakes
22+
23+For flakes use `--override-input` to point to the modified haskell.nix:
24+
25+```
26+nix develop --override-input haskellNix /path/to/local/haskell.nix
27+```
docs/dev/installing-nix-tools.mdnew file+28
@@ -0,0 +1,28 @@
1+## Installing `nix-tools`
2+
3+To build the latest `nix-tools` and store the result at `./nt`, run:
4+
5+```bash
6+nix build -f https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz pkgs.haskell-nix.nix-tools.ghc884 --out-link nt
7+```
8+
9+If you would like to then install `nix-tools` into your profile, run:
10+
11+```bash
12+nix-env -i ./nt
13+```
14+
15+## Optional: Installing via [Haskell.nix][] source
16+
17+The [Haskell.nix][] and `nix-tools` source will be useful if you would
18+like to contribute improvements, or read the source code to fully
19+understand something that the documentation doesn't cover.
20+
21+```bash
22+git clone https://github.com/input-output-hk/nix-tools
23+git clone https://github.com/input-output-hk/haskell.nix
24+cd haskell.nix
25+nix build -f . pkgs.haskell-nix.nix-tools.ghc884 --arg sourcesOverride '{ nix-tools = ../nix-tools; }' --out-link nt
26+```
27+
28+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/dev/maintainer-scripts.mdnew file+18
@@ -0,0 +1,18 @@
1+# Updating Hackage and Stackage Nix expressions
2+
3+The [`hackage.nix`](https://github.com/input-output-hk/hackage.nix)
4+and [`stackage.nix`](https://github.com/input-output-hk/stackage.nix)
5+repos and corresponding files `hackage-src.json` and
6+`stackage-src.json` will be regularly and automatically updated using
7+scripts in this repo.
8+
9+To run the updater scripts manually, use:
10+
11+ nix-build build.nix -A maintainer-scripts.update-hackage -o update-hackage.sh
12+ ./update-hackage.sh
13+
14+ nix-build build.nix -A maintainer-scripts.update-stackage -o update-stackage.sh
15+ ./update-stackage.sh
16+
17+The scripts will clone the repo, generate the latest data, then
18+attempt to push back to the repo and update the source JSON file.
docs/dev/manually-generating-nix-expressions.mdnew file+179
@@ -0,0 +1,179 @@
1+# Manually generating Nix expressions
2+
3+We believe that imports from derivations (IFDs) provide tremendous
4+value in nix and the aversion towards them stems mostly from
5+poor tooling and ci support for them. We do not believe
6+that poor tooling or ci support should cripple nix capability
7+of abstraction. Hence haskell.nix makes excessive use of
8+IFDs.
9+
10+We do note however that there are users who prefer to
11+have IFD-free expressions. For this group of users we
12+detail how to expand the IFD dependent high level functions
13+into their IFD free building blocks.
14+
15+The general structure will be the same, independent of the use of
16+Stack or Cabal.
17+
18+Let us assume for now that we have already generated a `pkgs.nix`
19+expression (see the links bellow). The following file then produces a package set:
20+
21+```nix
22+# default.nix
23+let
24+ # Import the Haskell.nix library,
25+ pkgs = import <nixpkgs> (import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {}).nixpkgsArgs;
26+
27+ # Import the file you will create in the stack-to-nix or cabal-to-nix step.
28+ my-pkgs = import ./pkgs.nix;
29+
30+ # Stack projects use this:
31+ pkgSet = pkgs.haskell-nix.mkStackPkgSet {
32+ stack-pkgs = my-pkgs;
33+ pkg-def-extras = [
34+ # these extras will provide additional packages
35+ # ontop of the package set. E.g. extra-deps
36+ # for stack packages. or local packages for
37+ # cabal.projects
38+ ];
39+ modules = [
40+ # specific package overrides would go here
41+ # example:
42+ # packages.cbors.package.ghcOptions = "-Werror";
43+ # packages.cbors.patches = [ ./one.patch ];
44+ # packages.cbors.flags.optimize-gmp = false;
45+ # It may be better to set flags in stack.yaml instead
46+ # (`stack-to-nix` will include them as defaults).
47+ ];
48+ };
49+
50+ # Cabal projects use this:
51+ pkgSet = pkgs.haskell-nix.mkCabalProjectPkgSet {
52+ plan-pkgs = my-pkgs;
53+ pkg-def-extras = [];
54+ modules = [
55+ # specific package overrides would go here
56+ # example:
57+ # packages.cbors.package.ghcOptions = "-Werror";
58+ # packages.cbors.patches = [ ./one.patch ];
59+ # packages.cbors.flags.optimize-gmp = false;
60+ # It may be better to set flags in `cabal.project` instead
61+ # (`plan-to-nix` will include them as defaults).
62+ ];
63+ };
64+
65+in pkgSet.config.hsPkgs // { _config = pkgSet.config; }
66+```
67+
68+With this setup you can then start building the components of
69+interest:
70+
71+```bash
72+nix build -f default.nix $pkg.components.library
73+```
74+
75+to build the library for `$pkg` or
76+
77+```bash
78+nix build -f default.nix $pkg.components.exes.$exe
79+```
80+
81+to build a specific executable. The same holds for test suites and benchmarks.
82+
83+## Using Stack
84+
85+With [nix-tools installed](./installing-nix-tools.md), we can simply run the
86+following command on a stack project:
87+
88+```bash
89+stack-to-nix --output . --stack-yaml stack.yaml
90+```
91+
92+This will produce a `pkgs.nix` file that looks like the following:
93+```nix
94+{
95+ resolver = "lts-12.17";
96+ extras = hackage:
97+ {
98+ packages = {
99+ "o-clock" = hackage.o-clock."0.1.1".revisions.default;
100+ ...
101+ } // {
102+ my-package = ./my-package.nix;
103+ ...
104+ };
105+ };
106+}
107+```
108+
109+This file contains the stackage resolver, as well as set of extra
110+packages. The extras specifies which `extra-deps` (here:
111+`o-clock-0.1.1`) we wanted to add over the stackage snapshot, and what
112+local packages we want (here: `my-package`).
113+
114+## Using Cabal
115+
116+### Generating `plan.json`
117+
118+To get a plan, you need Cabal and GHC. See the [How to install a
119+compiler section of the Nixpkgs Manual][compiler] for information
120+about how to choose a specific compiler version.
121+
122+[compiler]: https://nixos.org/nixpkgs/manual/#how-to-install-a-compiler
123+
124+!!! note "Cabal version"
125+ The minimum Cabal version is 2.4. This version is available
126+ in the NixOS 19.03 release.
127+
128+For this example, we will run a `nix-shell` with the default GHC
129+version for Nixpkgs.
130+
131+```bash
132+nix-shell -p haskellPackages.cabal-install haskellPackages.ghc \
133+ --run "cabal new-configure"
134+```
135+
136+If all goes well, you should now have the file
137+`dist-newstyle/cache/plan.json`.
138+
139+!!! tip "Specifying the GHC version"
140+ To use a specific compiler version, replace `haskellPackages.ghc`
141+ with something like `haskell-nix.compiler.ghc865`. The given compiler
142+ must exist in your Nixpkgs version, of course. See also the
143+ [Nixpkgs Manual][compiler].
144+
145+### Using `plan-to-nix`
146+
147+With [nix-tools installed](./installing-nix-tools.md), we can then run the
148+following command on a Cabal project and its build plan. Omit the
149+`--cabal-project` option if you don't have a project file.
150+
151+```bash
152+# convert the plan.json file into a pkgs.nix file
153+plan-to-nix --output . \
154+ --plan-json dist-newstyle/cache/plan.json
155+ --cabal-project cabal.project
156+```
157+
158+This will produce a `pkgs.nix` file that looks like the following:
159+
160+```nix
161+{
162+ pkgs = hackage:
163+ {
164+ packages = {
165+ "o-clock" = hackage.o-clock."0.1.1".revisions.default;
166+ ...
167+ };
168+ compiler = { ... };
169+ };
170+
171+ extras = hackage:
172+ { packages = { my-package = ./.plan.nix/my-package.nix; }; };
173+}
174+```
175+
176+It has converted Cabal's build plan into a Nix expression that selects
177+dependencies from `hackage.nix`. All local packages in the project are
178+generated with `cabal-to-nix` and added to the package set
179+description.
docs/dev/nix-tools-pin.mdnew file+16
@@ -0,0 +1,16 @@
1+## How to update [`nix-tools`](https://github.com/input-output-hk/nix-tools)
2+
3+1. Use niv to update the sources.json:
4+
5+ ```
6+ niv update nix-tools
7+ ```
8+
9+
10+2. If `nix-tools.cabal` or `plan-to-nix` have changed, check the
11+ materialized files for each of the compiler nix name in
12+ `ls -d materialized/ghc*/nix-tools` with:
13+
14+ ```
15+ nix-build scripts/check-compiler-materialization --argstr compiler-nix-name ghc884
16+ ```
docs/dev/nixpkgs-pin.mdnew file+17
@@ -0,0 +1,17 @@
1+# Haskell.nix Nixpkgs Pin
2+
3+Haskell.nix contains several Nixpkgs pins imanaged by `niv` in
4+`nix/sources.json`.
5+
6+These are used in testing various versions of nixpkgs.
7+
8+To use haskell.nix the `config` and `overlays` need to be applied to
9+Nixpkgs. Users should probably pin a suitable version of nixpkgs, although things might not work for them if their Nixpkgs version is
10+too different.
11+
12+We aim to keep this pin somewhere on a channel of the **Nixpkgs latest
13+stable release**. That is currently 20.09.
14+
15+We also execute tests on MacOS (darwin). The darwin channel is usually
16+behind the NixOS channel. So we follow the `nixpkgs-20.09-darwin`
17+channel.
docs/dev/removing-with-package-wrapper.mdnew file+66
@@ -0,0 +1,66 @@
1+# `ghcWithPackages` wrapper removal
2+
3+The current [Nixpkgs Haskell infrastructure][nixpkgs-haskell] and `haskell.nix` both
4+provide a `ghcWithPackages` derivation which contains shell script
5+wrappers that wrap `ghc` and `ghc-pkg`.
6+
7+In the Nixpkgs Haskell infrastructure, the wrapper scripts are used
8+for building Haskell packages. However, in `haskell.nix`, the wrappers
9+are only used for development environments.
10+
11+The wrapper scripts provide a `ghc` command that "knows" about the
12+package set and has all Haskell package dependencies available to it.
13+
14+We would like to remove the wrapper scripts, but it's currently not
15+possible to configure all build tools using environment variables
16+alone.
17+
18+## Plain `ghc`
19+
20+When using `ghc` or `ghci` by itself, the `GHC_ENVIRONMENT` variable
21+can point to a configuration file containing an exact package
22+set. This works quite well.
23+
24+## `ghc-pkg`
25+
26+The package tool `ghc-pkg` does not recognize `GHC_ENVIRONMENT`, but
27+does recognize a `GHC_PACKAGE_PATH` pointing to a `package.conf.d`.
28+
29+This works well. However, the `cabal` command will refuse to start if
30+`GHC_PACKAGE_PATH` is set.
31+
32+## `Setup.hs`
33+
34+When invoking `Setup.hs configure`, the package database is provided
35+with the `--package-db` argument and exact dependencies in the package
36+set can be provided as `--dependency` arguments.
37+
38+The `haskell.nix` component builder uses `Setup.hs` with these
39+command-line options to build Haskell packages.
40+
41+## `cabal new-build`
42+
43+Cabal-install will observe the `CABAL_CONFIG` environment variable,
44+which points to a cabal config file. This config file can provide a
45+`package-db` value, but it can't specify exact versions of packages.
46+
47+Cabal is designed to solve dependencies, not simply take the package
48+set which is given to it.
49+
50+Therefore, `cabal` does not use `GHC_ENVIRONMENT`, but instead creates
51+its own environment file. It will not accept `--dependency` arguments.
52+
53+As far as I know, the best way to force `cabal` to take a pre-computed
54+package set is to use a `new-freeze` file. However there is no
55+environment variable (or config file entry) which can specify a path
56+to a freeze file.
57+
58+Specifying a `package-db` path in the cabal config file is not enough
59+for it to successfully resolve dependencies.
60+
61+As mentioned before, `cabal` does not work when `GHC_PACKAGE_PATH` is
62+set. The best way to work around this is to wrap `ghc` and `ghc-pkg`
63+in shell scripts.
64+
65+
66+[nixpkgs-haskell]: https://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure
docs/dev/tests.mdnew file+1
@@ -0,0 +1 @@
1+../../test/README.md
docs/index.mdnew file+15
@@ -0,0 +1,15 @@
1+# haskell.nix
2+
3+`haskell.nix` is an alternative Haskell infrastructure for Nix[^1].
4+
5+## Features
6+
7+- Drop-in support for Cabal projects
8+- Drop-in support for Stack projects
9+- Build any package of specific version in Stackage or Hackage
10+- Overridable configuration
11+- Cross compile Haskell packages
12+
13+[^1]: See [Nixpkgs current Users' Guide to Haskell Infrastructure](https://haskell4nix.readthedocs.io/) for comparison.
14+
15+
docs/iohk-nix.mdnew file+113
@@ -0,0 +1,113 @@
1+# IOHK's nix tooling
2+
3+## [iohk-nix](https://github.com/input-output-hk/iohk-nix)
4+
5+iohk-nix is IOHK's shared nix library. It provides some templates to
6+make working with haskell.nix trivial but is non-essential to use
7+haskell.nix infrastructure.
8+
9+lib.nix
10+```nix
11+let
12+ # iohk-nix can be overridden for debugging purposes by setting
13+ # NIX_PATH=iohk_nix=/path/to/iohk-nix
14+ iohkNix = import (
15+ let try = builtins.tryEval <iohk_nix>;
16+ in if try.success
17+ then builtins.trace "using host <iohk_nix>" try.value
18+ else
19+ let
20+ spec = builtins.fromJSON (builtins.readFile ./iohk-nix.json);
21+ in builtins.fetchTarball {
22+ url = "${spec.url}/archive/${spec.rev}.tar.gz";
23+ inherit (spec) sha256;
24+ }) {};
25+
26+ pkgs = iohkNix.pkgs;
27+ lib = pkgs.lib;
28+in lib // { inherit iohkNix pkgs; inherit (iohkNix) nix-tools; }
29+```
30+
31+iohk-nix.json
32+```json
33+{
34+ "url": "https://github.com/input-output-hk/iohk-nix",
35+ "rev": "c92f0119ef5814b0ed1f445c2fdcf8894e326294",
36+ "sha256": "05r90x6x3yp1nb66rkc4n0i8q15c634rrdsr2zvb118s3sdcmmrm",
37+ "fetchSubmodules": false
38+}
39+```
40+
41+nix/pkgs.nix
42+```
43+{ pkgs ? import <nixpkgs> {}
44+, iohk-extras ? {}
45+, iohk-module ? {}
46+, haskell
47+, hackage
48+, stackage
49+, ...
50+}:
51+let
52+ # our packages
53+ stack-pkgs = import ./.stack-pkgs.nix;
54+
55+ # Build the packageset with module support.
56+ # We can essentially override anything in the modules
57+ # section.
58+ #
59+ # packages.cbors.patches = [ ./one.patch ];
60+ # packages.cbors.flags.optimize-gmp = false;
61+ #
62+ compiler = (stack-pkgs.extras hackage).compiler.nix-name;
63+ pkgSet = haskell.mkNewPkgSet {
64+ inherit pkgs;
65+ pkg-def = stackage.${stack-pkgs.resolver};
66+ # These extras allow extension or restriction of the set of
67+ # packages we are interested in. By using the stack-pkgs.extras
68+ # we restrict our package set to the ones provided in stack.yaml.
69+ pkg-def-extras = [
70+ stack-pkgs.extras
71+ iohk-extras.${compiler}
72+ ];
73+ # package customizations
74+ modules = [
75+ # This module will ensure that we get the necessary
76+ # patches ontop of GHC packages that for which the
77+ # ones that GHC ships are not identical to the ones
78+ # we find on hackage. These patches will make sure
79+ # they are identical by augmenting the packages on
80+ # hackage to match those that ship with ghc.
81+ haskell.ghcHackagePatches.${compiler}
82+
83+ # the iohk-module will supply us with the necessary
84+ # cross compilation plumbing to make Template Haskell
85+ # work when cross compiling. For now we need to
86+ # list the packages that require template haskell
87+ # explicity here.
88+ iohk-module
89+ ];
90+ };
91+in
92+ pkgSet.config.hsPkgs // { _config = pkgSet.config; }
93+```
94+
95+
96+default.nix
97+```
98+let
99+ localLib = import ./lib.nix;
100+in
101+# This file needs to export a function that takes
102+# the arguments it is passed and forwards them to
103+# the default-nix template from iohk-nix. This is
104+# important so that the release.nix file can properly
105+# parameterize this file when targetting different
106+# hosts.
107+{ ... }@args:
108+# We will instantiate the defaul-nix template with the
109+# nix/pkgs.nix file...
110+localLib.nix-tools.default-nix ./nix/pkgs.nix args
111+# ... and add a few custom packages as well.
112+// { }
113+```
docs/motivation.mdnew file+80
@@ -0,0 +1,80 @@
1+# Motivation
2+
3+Why do we need another Haskell infrastructure for Nix?
4+
5+Doesn't nixpkgs
6+provide a sufficiently good Haskell infrastructure already?
7+
8+Problems with
9+the nixpkgs haskell infrastructure are covered in the following sections:
10+
11+## Cross compilation
12+
13+`nixpkgs` has quite good support for cross compilation, however the
14+Haskell infrastructure suffers from the fact that it heavily relies on
15+the `cabal2nix` tool. `cabal2nix` (as well as tools that depend on it
16+like `stack2nix`) flattens the `.cabal` file at conversion time to a
17+given os/arch/flags configuration. Thus to make cross compilation
18+work with `cabal2nix` you will have to generate a separate `nix`
19+expression for each configuration. This becomes a major maintenance
20+burden over time. Therefore the tooling that translates cabal files
21+into nix-expressions for use with Haskell.nix retains the full
22+conditional tree from the cabal file and exposes it to `nix`. In
23+addition it will also expose the `build-type` value, which allows us
24+to cache the `Setup.hs` for build-type simple and not have to rebuild
25+it every time.
26+
27+## Package sets
28+
29+We often rely on either package sets as provided by stackage or
30+computed by cabal. `nixpkgs` provides its own curated package set
31+which might or might not work for the projects we work on.
32+`stack2nix` tries to solve this issue, here we go one step further and
33+provide the infrastructure to allow any form of package set.
34+
35+## Per component level control
36+
37+The Haskell builder in `nixpkgs` provides control over executables and
38+libraries, to build a specific executable only however is rather
39+tricky to do. This also leads to the cyclic dependencies issue.
40+
41+## Cyclic dependencies
42+
43+The Haskell builder in `nixpkgs` exposes packages at the
44+package level. If packages mutually depend on each other through tests
45+and libraries, this leads to cyclic dependencies that nix can't resolve. By
46+exposing the components to nix as separate derivations this will only
47+occur if you have mutually dependent components.
48+
49+## Build times
50+
51+The Haskell builder in nixpkgs builds a package sequentially, first the
52+library then the executables and finally the tests. It then executes
53+the tests before the package is considered done. The upshot of this
54+is that packages are only considered done if the test-suites
55+passed. The downside is that if you have to compile multiple packages
56+the likelihood of them failing is low, you have unnecessarily
57+serialized your build. In a more aggressive setting libraries could
58+start building as early as their dependent libraries are built. Of
59+course they will have to be invalidated later should the test-suites
60+of their dependencies fail, but this way we can make use of parallel
61+building. In an ideal scenario this will reduce build times close to
62+the optimum.
63+
64+## More logic in nix
65+
66+The `cabal2nix` tool has a resolver that resolves system dependencies
67+and licenses to values in `nixpkgs`. This logic ends up being a simple
68+dictionary lookup and therefore can be a simple nix expression. This also
69+offloads some of the work the cabal to nix translation tool needs to
70+do into nix, and as such if changes are necessary (or needed to be
71+performed ad hoc) there is no need to rebuild the conversion tool and
72+subsequently mark every derived expression as out of date.
73+
74+## Decoupling
75+
76+Finally, by treating Haskell.nix and nixpkgs as separate entities we
77+can decouple the Haskell packages and infrastructure from the nixpkgs
78+package set, and rely on it to provide us with system packages while
79+staying up to date with Haskell packages from hackage while retaining
80+a stable (or known to be good) nixpkgs revision.
docs/reference/commands.mdnew file+84
@@ -0,0 +1,84 @@
1+# Command line tools
2+
3+To install the command line tools refer to the [Installing nix-tools](https://input-output-hk.github.io/haskell.nix/dev/manually-generating-nix-expressions/) section.
4+
5+## stack-to-nix
6+
7+```
8+stack-to-nix - a stack to nix converter
9+
10+Usage: stack-to-nix (-o|--output DIR) [--stack-yaml FILE]
11+ [--ignore-package-yaml] [--cache FILE]
12+ Generate a Nix expression for a Haskell package using Stack
13+
14+Available options:
15+ -o,--output DIR Generate output in DIR
16+ --stack-yaml FILE Override project stack.yaml (default: "stack.yaml")
17+ --ignore-package-yaml disable hpack run and use only cabal disregarding
18+ package.yaml existence
19+ --cache FILE Dependency cache
20+ file (default: ".stack-to-nix.cache")
21+ -h,--help Show this help text
22+```
23+
24+Use this for stack projects. If a `default.nix` does not exist in the
25+output directory, it will create a basic one with a
26+[`mkStackPkgSet`](../manually-generating-nix-expressions#Using-Stack) function.
27+
28+!!! note
29+ If you find that there are missing files which should have been
30+ generated, remove `.stack-to-nix.cache`
31+ (The open issue is [#57][cache-issue]).
32+
33+[cache-issue]: https://github.com/input-output-hk/haskell.nix/issues/57
34+
35+## plan-to-nix
36+
37+```
38+plan-to-nix - a stack to nix converter
39+
40+Usage: plan-to-nix (-o|--output DIR) [--plan-json FILE] [--cabal-project FILE]
41+ [--cache FILE]
42+ Generate a Nix expression for a Haskell package using Cabal
43+
44+Available options:
45+ -o,--output DIR Generate output in DIR
46+ --plan-json FILE Override plan.json
47+ location (default: "dist-newstyle/cache/plan.json")
48+ --cabal-project FILE Override path to
49+ cabal.project (default: "cabal.project")
50+ --cache FILE Dependency cache file (default: ".nix-tools.cache")
51+ -h,--help Show this help text
52+```
53+
54+Use this for Cabal new-build projects (even if you don't have a
55+`cabal.project`). Before running, you need to create a plan. For more
56+information, see [Cabal Projects](../manually-generating-nix-expressions#Using-Cabal) in the user
57+guide.
58+
59+It will create a template `default.nix` in the output directory,
60+unless that file already exists.
61+
62+Inside the output directory, there will be another directory
63+`.plan.nix`, which contains Nix expressions for all local packages,
64+generated by `cabal-to-nix`. The output file `pkgs.nix` refers to
65+these files.
66+
67+!!! note
68+ If you find that there are missing files which should have been
69+ generated, remove `.nix-tools.cache`
70+ (The open issue is [#57][cache-issue]).
71+
72+## cabal-to-nix
73+
74+```
75+Usage: cabal-to-nix FILE.cabal
76+```
77+
78+This writes (to stdout) a [Haskell.nix][] Nix expression for the given
79+cabal package.
80+
81+Normally, you do not need to run `cabal-to-nix` yourself. It is called
82+by `stack-to-nix` and `plan-to-nix`.
83+
84+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/reference/library.mdnew file+476
@@ -0,0 +1,476 @@
1+[Haskell.nix][] contains a library of functions for creating buildable
2+package sets from their Nix expression descriptions. The library is
3+what you get when importing [Haskell.nix][]. It might be helpful to
4+load the library in the [Nix REPL](../tutorials/development.md#using-nix-repl) to
5+test things.
6+
7+ * [Data structures](#data-structures) — the kinds of data that you will encounter working with [Haskell.nix][].
8+ * [Top-level attributes](#top-level-attributes) — Functions and derivations defined in the Haskell.nix attrset.
9+ * [Package-set functions](#package-set-functions) — Helper functions defined on the `hsPkgs` package set.
10+
11+# Data structures
12+
13+## Package Set
14+
15+The result of `mkPkgSet`. This is an application of the NixOS module
16+system.
17+
18+```
19+{
20+ options = { ... };
21+ config = {
22+ hsPkgs = { ... };
23+ packages = { ... };
24+ compiler = {
25+ version = "X.Y.Z";
26+ nix-name = "ghcXYZ";
27+ packages = { ... };
28+ };
29+ };
30+}
31+```
32+
33+| Attribute | Type | Description |
34+|----------------|------|-----------------------------------------------------|
35+| `options` | Module options | The combination of all options set through the `modules` argument passed to `mkPkgsSet`. |
36+| `config` | | The result of evaluating and applying the `options` with [Haskell.nix][] |
37+| `.hsPkgs` | Attrset of [Haskell Packages](#haskell-package) | Buildable packages, created from `packages` |
38+| `.packages` | Attrset of [Haskell Package descriptions](#haskell-package-descriptions) | Configuration for each package in `hsPkgs` |
39+| `.compiler` | Attrset | |
40+
41+
42+
43+## Haskell Package description
44+
45+The _Haskell package descriptions_ are values of the
46+`pkgSet.config.packages` attrset. These are not derivations, but just
47+the configuration for building an individual package. The
48+configuration options are described under `packages.<name>` in [Module
49+options](./modules.md).
50+
51+## Component description
52+
53+The _component descriptions_ are values of the
54+`pkgSet.config.packages.<package>.components` attrset. These are not
55+derivations, but just the configuration for building an individual
56+component. The configuration options are described under
57+`packages.<name>.components.*` in [Module options](./modules.md).
58+
59+
60+## Haskell Package
61+
62+In [Haskell.nix][], a _Haskell package_ is a derivation which has a
63+`components` attribute. This derivation is actually just for the
64+package `Setup.hs` script, and isn't very interesting. To actually use
65+the package, look within the components structure.
66+
67+```
68+components = {
69+ library = COMPONENT;
70+ exes = { NAME = COMPONENT; };
71+ tests = { NAME = COMPONENT; };
72+ benchmarks = { NAME = COMPONENT; };
73+}
74+```
75+
76+## Component
77+
78+In [Haskell.nix][], a _component_ is a derivation corresponding to a
79+[Cabal component](https://www.haskell.org/cabal/users-guide/developing-packages.html)
80+of a package.
81+
82+## Identifier
83+
84+A package identifier is an attrset pair of `name` and `version`.
85+
86+## Extras
87+
88+Extras allow adding more packages to the package set. These will be
89+functions taking a single parameter `hackage`. They should return an
90+attrset of package descriptions.
91+
92+## Modules
93+
94+Modules are the primary method of configuring building of the package
95+set. They are either:
96+
97+1. an attrset containing [option declarations](./modules.md), or
98+2. a function that returns an attrset containing option declarations.
99+
100+If using the function form of a module, the following named parameters
101+will be passed to it:
102+
103+| Argument | Type | Description |
104+|------------------|------|---------------------|
105+| `haskellLib` | attrset | The [haskellLib](#haskelllib) utility functions. |
106+| `pkgs` | | The Nixpkgs collection. |
107+| `pkgconfPkgs` | | A mapping of cabal build-depends names to Nixpkgs packages. (TODO: more information about this) |
108+| `buildModules` | | |
109+| `config` | | |
110+| `options` | | |
111+
112+
113+# Top-level attributes
114+
115+## project'
116+
117+Function that accepts attribute set with a `src` attribute and looks for `stack.yaml` file relative to it.
118+
119+If file exists, it calls [stackProject](#stackproject') function. Otherwise it will call [cabalProject](#cabalproject') function.
120+
121+**Example**:
122+
123+```nix
124+pkgs.haskell-nix.project' {
125+ # 'cleanGit' cleans a source directory based on the files known by git
126+ src = pkgs.haskell-nix.haskellLib.cleanGit {
127+ name = "haskell-nix-project";
128+ src = ./.;
129+ };
130+}
131+```
132+
133+## stackProject'
134+
135+A function calling [callStackToNix](#callstacktonix) with all arguments.
136+
137+Then feeding its result into [mkStackPkgSet](#mkstackpkgset) passing also
138+`pkg-def-extras` and `modules` arguments.
139+
140+**Return value**:
141+
142+| Attribute | Type | Description |
143+|-------------------|--------------------------------------------------|----------------------------------------------------------------------------|
144+| `hsPkgs` | Attrset of [Haskell Packages](#haskell-package) | Buildable packages, created from `packages` |
145+| `stack-nix` | | `projectNix` attribute of [`callStackToNix`](#callstacktonix) return value |
146+| `shellFor` | Function | [`shellFor`](#shellfor) |
147+| `ghcWithHoogle` | Function | [`ghcWithHoogle`](#ghcwithhoogle) |
148+| `ghcWithPackages` | Function | [`ghcWithPackages`](#ghcwithpackages) |
149+
150+
151+## cabalProject'
152+
153+A function calling [callCabalProjectToNix](#callcabalprojecttonix) with all arguments.
154+
155+Then feeding its result into [mkCabalProjectPkgSet](#mkcabalprojectpkgset) passing also
156+`pkg-def-extras`, `extra-hackages` and `modules` arguments.
157+
158+**Return value**:
159+
160+| Attribute | Type | Description |
161+|-------------------|--------------------------------------------------|-----------------------------------------------------------------------------|
162+| `hsPkgs` | Attrset of [Haskell Packages](#haskell-package) | Buildable packages, created from `packages` |
163+| `plan-nix` | | `projectNix` attribute of [`callCabalProjectToNix`](#callcabalprojecttonix) return value |
164+| `index-state` | | `index-state` attribute of [`callCabalProjectToNix`](#callcabalprojecttonix) return value |
165+| `shellFor` | Function | [`shellFor`](#shellfor) |
166+| `ghcWithHoogle` | Function | [`ghcWithHoogle`](#ghcwithhoogle) |
167+| `ghcWithPackages` | Function | [`ghcWithPackages`](#ghcwithpackages) |
168+| `projectCross` | Attrset | Like `pkgs.pkgsCross.<system>` from nixpkgs `p.projectCross.<system>` returns the project results for cross compilation (where system is a member of nixpkgs lib.systems.examples). So `p.projectCross.ghcjs.hsPkgs` is the same as `hsPkgs` but compiled with ghcjs |
169+| `appendModule` | Function | Re-eval the project with an extra module (or module list). |
170+| `extend` and `appendOverlays` | Function | Modify a project, or add attributes, through overlays: `p.extend(final: prev: { })`. The overlays are carried-over `projectCross` and `appendModule` invocations. |
171+
172+## project, cabalProject and stackProject
173+
174+These versions of the function are the same as project', cabalProject'
175+and stackProject', but `hsPkgs` attributes are also included in the
176+return value directly. That way a package can be referenced as
177+`(project {...}).foo` instead of `(project' {...}).hsPkgs.foo`.
178+
179+## mkStackPkgSet
180+
181+Creates a [package set](#package-set) based on the `pkgs.nix` output
182+of `stack-to-nix`.
183+
184+```nix
185+mkStackPkgSet =
186+ { stack-pkgs, pkg-def-extras ? [], modules ? []}: ...
187+```
188+
189+| Argument | Type | Description |
190+|------------------|------|---------------------|
191+| `stack-pkgs` | | `import ./pkgs.nix` — The imported file generated by `stack‑to‑nix`. |
192+| `pkg‑def‑extras` | List of [Extras](#extras) | For overriding the package set. |
193+| `modules` | List of [Modules](#modules) | For overriding the package set. |
194+
195+**Return value**: a [`pkgSet`](#package-set)
196+
197+## mkCabalProjectPkgSet
198+
199+Creates a [package set](#package-set) based on the `pkgs.nix` output
200+of `plan-to-nix`.
201+
202+```nix
203+mkCabalProjectPkgSet =
204+ { plan-pkgs, pkg-def-extras ? [], modules ? []}: ...
205+```
206+
207+| Argument | Type | Description |
208+|------------------|------|---------------------|
209+| `plan-pkgs` | | `import ./pkgs.nix` — The imported file generated by `plan‑to‑nix`. |
210+| `pkg‑def‑extras` | List of [Extras](#extras) | For overriding the package set. |
211+| `modules` | List of [Modules](#modules) | For overriding the package set. |
212+
213+**Return value**: a [`pkgSet`](#package-set)
214+
215+## mkPkgSet
216+
217+This is the base function used by both `mkStackPkgSet` and
218+`mkCabalProjectPkgSet`.
219+
220+**Return value**: a [`pkgSet`](#package-set)
221+
222+## snapshots
223+
224+This is an attrset of `hsPkgs` packages from Stackage.
225+
226+## haskellPackages
227+
228+A `hsPkgs` package set, which is one of the recent LTS Haskell
229+releases from [`snapshots`](#snapshots).
230+
231+The chosen LTS is updated occasionally in [Haskell.nix][], though a
232+manual process.
233+
234+## nix-tools
235+
236+A derivation containing the `nix-tools` [command-line tools](commands.md).
237+
238+## callStackToNix
239+
240+Runs `stack-to-nix` and produces the output needed for
241+`importAndFilterProject`.
242+
243+**Example**:
244+
245+```nix
246+ pkgSet = mkStackPkgSet {
247+ stack-pkgs = (importAndFilterProject (callStackToNix {
248+ src = ./.;
249+ })).pkgs;
250+ pkg-def-extras = [];
251+ modules = [];
252+ };
253+```
254+
255+
256+## callCabalProjectToNix
257+
258+Runs `cabal new-configure` and `plan-to-nix` and produces the output
259+needed for `importAndFilterProject`.
260+
261+**Example**:
262+
263+```nix
264+ pkgSet = mkCabalProjectPkgSet {
265+ plan-pkgs = (importAndFilterProject (callCabalProjectToNix {
266+ index-state = "2019-04-30T00:00:00Z";
267+ src = ./.;
268+ })).pkgs;
269+```
270+
271+| Argument | Type | Description |
272+|----------------------|------|---------------------|
273+| `name` | String | Optional name for better error messages. |
274+| `src` | Path | Location of the cabal project files. |
275+| `compiler-nix-name` | String | The name of the ghc compiler to use eg. "ghc884" |
276+| `index-state` | Timestamp | Optional hackage index-state, eg. "2019-10-10T00:00:00Z". |
277+| `index-sha256` | Sha256 | Optional hash of the truncated hackage index-state. |
278+| `plan-sha256` | Sha256 | Optional hash of the plan-to-nix output (makes the plan-to-nix step a fixed output derivation). |
279+| `cabalProject` | String | Optional cabal project file contents (defaults to readFile "${src}/cabal.project"). |
280+| `cabalProjectLocal` | String | Optional cabal project file contents (defaults to readFile "${src}/cabal.project.local"). |
281+| `cabalProjectFreeze` | String | Optional cabal project file contents (defaults to readFile "${src}/cabal.project.freeze"). |
282+| `ghc` | | Deprecated. Use `compiler-nix-name` instead. Optional ghc to use |
283+| `nix-tools` | | Optional nix-tools to use |
284+| `hpack` | | Optional hpack to use |
285+| `cabal-install` | | Optional cabal-install to use |
286+| `configureArgs` | String | Optional extra arguments to pass to `cabal new-configure` (--enable-tests is included by default, include `--disable-tests` to override that). |
287+
288+## importAndFilterProject
289+
290+Imports from a derivation created by `callStackToNix`
291+or `callCabalProjectToNix`.
292+
293+The result is an attrset with the following values:
294+
295+| Attribute | Type | Description |
296+|----------------|------|-----------------------------------------------------|
297+| `pkgs` | attrset | that can be passed to `mkStackPkgSet` (as `stack-pkgs`) or `mkCabalProjectPkgSet` (as `plan-pkgs`). |
298+| `nix` | | this can be built and cached so that the amount built in the evaluation phase is not too great (helps to avoid timeouts on Hydra). |
299+
300+## hackage
301+## stackage
302+
303+## fetchExternal
304+
305+## cleanSourceHaskell
306+
307+```
308+cleanSourceHaskell = { src, name ? null }: ...
309+```
310+
311+Filters a source tree removing common filenames that are not Haskell
312+build sources.
313+
314+This can avoid unecessary rebuilds when these files change.
315+
316+It's recommended to provide `name` so that the source derivation
317+remains constant regardless of how it was fetched.
318+
319+Example:
320+
321+```
322+src = pkgs.haskell-nix.cleanSourceHaskell {
323+ src = ./.;
324+ name = "myproject-src";
325+};
326+```
327+
328+## haskellSourceFilter
329+
330+```
331+haskellSourceFilter = name: type: ...
332+```
333+
334+This is a source filter function which cleans common build products
335+and files not needed to do a Haskell build from a source directory.
336+
337+It should be used with `pkgs.lib.cleanSourceWith`. Alternatively,
338+use the convenience function [`cleanSourceHaskell`](#cleansourcehaskell).
339+
340+
341+## haskellLib
342+
343+Assorted functions for operating on [Haskell.nix][] data. This is
344+distinct from `pkgs.haskell.lib` in the current Nixpkgs Haskell
345+Infrastructure.
346+
347+### collectComponents, collectComponents'
348+
349+Extracts a selection of components from a Haskell [package set](#package-set).
350+
351+This can be used to filter out all test suites or benchmarks of
352+your project, so that they can be built in Hydra (see check if you
353+want to run the tests as well as build them).
354+
355+`collectComponents'` is an alias of `collectComponents` without
356+predicate for filtering.
357+
358+```
359+collectComponents =
360+ group: packageSel: haskellPackages: ...
361+collectComponents' = group: collectComponents (_: true)
362+```
363+
364+
365+| Argument | Type | Description |
366+|-------------------|--------|---------------------|
367+| `group` | String | A [sub-component type](#subComponentTypes). |
368+| `packageSel` | A function `Package -> Bool` | A predicate to filter packages with. |
369+| `haskellPackages` | [Package set](#package-set) | All packages in the build. |
370+
371+**Return value**: a recursive attrset mapping package names → component names → components.
372+
373+**Example**:
374+
375+```nix
376+tests = collectComponents "tests" (package: package.identifier.name == "mypackage") hsPkgs;
377+```
378+
379+Will result in moving derivations from `hsPkgs.mypackage.components.tests.unit-tests`
380+to `tests.mypackage.unit-tests`.
381+
382+### collectChecks, collectChecks'
383+
384+These are just like `collectComponents` and `collectComponents'`, except that they collect
385+the `checks` attributes of packages (which aren't components, and so can't be collected
386+by the other functions.
387+
388+#### check
389+
390+This function turns a derivation that builds a test into one to run it.
391+
392+| Argument | Type | Description |
393+|-------------------|--------|---------------------|
394+| `drv` | Derivation | One of `$pkg.components.tests.$test`. |
395+
396+For convenience `$pkg.components.tests` are mapped with this function
397+to `$pkg.checks`.
398+
399+This function is intended for use with `tests` but it should also work
400+for `exes` and `benchmarks` if you just want to run them to make sure
401+they execute.
402+
403+#### subComponentTypes
404+
405+Sub-component types identify [components](#component) and are one of:
406+
407+ - `sublibs`
408+ - `foreignlibs`
409+ - `exes`
410+ - `tests`
411+ - `benchmarks`
412+
413+# Project functions
414+
415+These functions are included in the `project` return values.
416+In the past they also existed within `project.hsPkgs`,
417+but have now been removed from there.
418+
419+## shellFor
420+
421+Create a `nix-shell` [development
422+environment](../tutorials/development.md) for developing one or more
423+packages with `ghci` or `cabal v2-build` (but not Stack).
424+
425+```
426+shellFor =
427+ { packages, withHoogle ? true, exactDeps ? false, ...}: ...
428+```
429+
430+
431+| Argument | Type | Description |
432+|----------------|------|---------------------|
433+| `packages` | Function | Package selection function. It takes a list of [Haskell packages](#haskell-package) and returns a subset of these packages. |
434+| `components` | Function | Similar to `packages`, by default all the components of the selected packages are selected. |
435+| `additional` | Function | Similar to `packages`, but the selected packages are built and included in `ghc-pkg list` (not just their dependencies). |
436+| `withHoogle` | Boolean | Whether to build a Hoogle documentation index and provide the `hoogle` command. |
437+| `exactDeps` | Boolean | Prevents the Cabal solver from choosing any package dependency other than what are in the package set. |
438+| `tools` | Function | AttrSet of tools to make available e.g. `{ cabal = "3.2.0.0"; }` or `{ cabal = { version = "3.2.0.0"; }; }`. If an AttrSet is provided for a tool, the additional arguments will be passed to the function creating the derivation for that tool. So you can provide an `index-state` or a `materialized` argument like that `{ cabal = { version = "3.2.0.0"; index-state = "2020-10-30T00:00:00Z"; materialized = ./cabal.materialized; }; }` for example. You can specify and materialize the version of hoogle used to construct the hoogle index by including something like `{ hoogle = { version = "5.0.17.15"; index-state = "2020-05-31T00:00:00Z"; materialized = ./hoogle.materialized; }`. Uses a default version of hoogle if omitted. |
439+| `inputsFrom` | List | List of other shells to include in this one. The `buildInputs` and `nativeBuildInputs` of each will be included using [mkShell](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-mkShell).
440+| `crossPlatforms` | Function | Platform selection function for cross compilation targets to support eg. `ps: with ps; [ghcjs mingwW64]` (see nixpkgs lib.systems.examples for list of platform names). |
441+| `{ ... }` | Attrset | All the other arguments are passed to [`mkDerivation`](https://nixos.org/nixpkgs/manual/#sec-using-stdenv). |
442+
443+**Return value**: a derivation
444+
445+!!! warning
446+
447+ `exactDeps = true` will set the `CABAL_CONFIG` environment variable
448+ to disable remote package servers. This is a
449+ [known limitation](../dev/removing-with-package-wrapper.md)
450+ which we would like to solve. Use `exactDeps = false` if this is a
451+ problem.
452+
453+
454+## ghcWithPackages
455+
456+Creates a `nix-shell` [development
457+environment](../tutorials/development.md) including the given
458+packages selected from this package set.
459+
460+**Parameter**: a package selection function.
461+
462+**Return value**: a derivation
463+
464+**Example**:
465+
466+```
467+haskell.haskellPackages.ghcWithPackages (ps: with ps; [ lens conduit ])
468+```
469+
470+## ghcWithHoogle
471+
472+The same as `ghcWithPackages`, except, a `hoogle` command with a
473+Hoogle documentation index of the packages will be included in the
474+shell.
475+
476+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/reference/supported-ghc-versions.mdnew file+49
@@ -0,0 +1,49 @@
1+# Supported GHC Versions
2+
3+The following GHC versions are defined in `haskell.nix` (there is a derivation
4+for each, though not all are cached or tested by CI):
5+- 8.4.4
6+- 8.6.{1,2,3,4,5}
7+- 8.8.{1,2,3,4}
8+- 8.10.{1,2,3,4,5}
9+- 9.0.1
10+- 9.2.1
11+- 9.2.2
12+
13+The following table shows the Nixpkgs/GHC versions which are built/cached, and
14+which of those are further tested. If you use a combination of Nixpkgs version
15+and GHC version which is in this table, you should hit our cache, saving
16+considering time by not building GHC and a few additional tools.
17+
18+Note that if you try to use `haskell.nix` as an overlay over Nixpkgs from a
19+standard Nixpkgs channel you will likely get a cache miss. To hit our cache you
20+really should use an instance of Nixpkgs provided by `haskell.nix` itself.
21+
22+| Nixpkgs version | Nixpkgs pinning | GHC version | `compiler-nix-name` | Tested in CI? |
23+|------------------|--------------------|-------------|-----------------------|---------------|
24+| 21.11 | `nixpkgs-2111` | 8.6.5 | `ghc865` | No |
25+| 21.11 | `nixpkgs-2111` | 8.10.7 | `ghc8107` | Yes |
26+| unstable | `nixpkgs-unstable` | 8.6.5 | `ghc865` | No |
27+| unstable | `nixpkgs-unstable` | 8.8.4 | `ghc884` | No |
28+| unstable | `nixpkgs-unstable` | 8.10.7 | `ghc8107` | Yes |
29+| unstable | `nixpkgs-unstable` | 9.0.2 | `ghc902` | Yes |
30+| unstable | `nixpkgs-unstable` | 9.2.4 | `ghc924` | Yes |
31+
32+See [ci.nix](https://github.com/input-output-hk/haskell.nix/blob/master/ci.nix)
33+for the source of truth about what is built and tested (in the off chance this
34+document is out-of-sync with your checkout).
35+
36+See the [getting started guide](../tutorials/getting-started.md) for
37+instructions on how to set up Nix to take advantage of our cache when building.
38+This guide also covers where to use the Nixpkgs pinning and `compiler-nix-name`
39+settings from the table above. For further information, see the [instructions
40+for how to pin Nixpkgs](../dev/nixpkgs-pin.md).
41+
42+See
43+[overlays/bootstrap.nix](https://github.com/input-output-hk/haskell.nix/blob/master/overlays/bootstrap.nix)
44+for a full list of all the valid `compiler-nix-name`s beyond what's
45+cached/tested in CI. You're free to use these, but be ready for longer build
46+times.
47+
48+Lastly, see [instructions on adding new GHC versions](../dev/adding-new-ghc.md)
49+in the event that what's in `haskell.nix` doesn't suit your needs.
docs/troubleshooting.mdnew file+90
@@ -0,0 +1,90 @@
1+# Troubleshooting
2+
3+## Issues with building and garbage-collection
4+
5+### Why am I building GHC?
6+
7+It's easier to list the reverse: when will you *not* build GHC?
8+
9+- You have configured the [binary cache](tutorials/getting-started.md) correctly.
10+- You are using one of the GHC versions which [we support](reference/supported-ghc-versions.md).
11+- You are using one of the nixpkgs versions used by our CI (you can access the sources for these [through haskell.nix](tutorials/getting-started.md).
12+
13+If you think you are doing all of these and you still find you're building GHC, drop us a line.
14+
15+### Why am I building lots of Haskell packages?
16+
17+We don't generally cache much of Hackage (there's a lot of it!), except for the parts which are used by our tests.
18+So this is expected, unfortunately.
19+
20+### How do I prevent the evaluation-time dependencies of my project from being garbage-collected?
21+
22+The `haskell-nix.roots "ghc884"` should include all the evaluation-time dependencies
23+and the main build time dependencies of a project using ghc 8.8.4.
24+So you can add that to the relevant GC root.
25+In practice, if you're using a CI system like Hydra/Hercules, this means adding it to a job in `release.nix`/`ci.nix`.
26+
27+## General troubleshooting when using `cabalProject`/`stackProject`/`project`
28+
29+### Does the cabal/stack build work?
30+
31+In `haskell.nix`, we strive to take the build configuration from the cabal/stack configuration files.
32+So if you have a problem with your cabal/stack configuration, it is likely that you will have a problem with the `haskell.nix` build too.
33+
34+So the first thing to do is make sure that the build works with `cabal` or `stack` as normal.
35+If it *does* work, then the `haskell.nix` one should as well.
36+If, on the other hand, there is a failure, the `cabal` or `stack` build is usually easier to debug (or at least it is no longer a `haskell.nix` problem).
37+
38+### Is the `haskell.nix` configuration completely in line with the cabal/stack configuration?
39+
40+The `haskell.nix` configuration can come apart from the cabal/stack configuration in a number of ways:
41+
42+#### Compiler version
43+
44+(Cabal users only. For stack users this comes from the snapshot, so stack and `haskell.nix` will agree.)
45+
46+The compiler version used by `haskell.nix` is selected by the `compiler-nix-name` argument; or if you do not specify it, by some default version (we recommend specifying it!).
47+Cabal does not provide an easy way to pin a *version* of the compiler (`with-compiler` lets you pick a particular executable, which is nearly but not quite what we want).
48+Hence, the two can come apart.
49+
50+Make sure you are using the same compiler for the cabal build as for the `haskell.nix` build.
51+
52+#### Hackage index state
53+
54+(Cabal users only. For stack users, package versions come from the snapshot, so stack and `haskell.nix` will agree.)
55+
56+Cabal has the concept of the Hackage "index state".
57+This is a timestamp, and it tells Cabal to behave "as if" it was seeing Hackage at that point in time.
58+Pinning it is generally good for reproducibility regardless of whether you use `haskell.nix` (you can do so in `cabal.project`).
59+
60+If you do not set an `index-state` in `cabal.project`, then Cabal will use the latest one based on when you last called `cabal update`, and `haskell.nix` will use the latest one it knows about from `hackage.nix`.
61+These may not be the same!
62+So if you use `haskell.nix` we strongly recommend pinning the `index-state`.
63+
64+#### Nix-only configuration options
65+
66+You can set configuration options in your Nix code that are not present in the cabal/stack configuration.
67+For example, you might enable profiling.
68+
69+Where possible, try to do the configuration in your cabal/stack configuration, e.g. setting `profiling: true` in `cabal.project`.
70+This will ensure that the two builds agree.
71+
72+If you want or need to set some of them in Nix, try bringing the two into sync temporarily for troubleshooting.
73+
74+## Other specific issues
75+
76+### Why does the build complain about some files being missing?
77+
78+Sometimes your build works fine outside `haskell.nix`, but inside the `haskell.nix` build, cabal complains that some file is missing.
79+What is going on?
80+
81+The answer is that `haskell.nix` *thoroughly* cleans the source *by following what is mentioned as required in the cabal file*.
82+So we only include Haskell sources if they appear in a `hs-source-dirs` somewhere; and we only include non-Haskell files if they are included in `extra-source-files` or similar.
83+
84+This is good practice anyway: if you do not include such files in `extra-source-files` then they will not be included in `cabal sdist`, which will cause problems if you ever upload your package to Hackage.
85+But `haskell.nix` is very picky about it.
86+
87+### Why does my executable depend on GHC/GCC?
88+
89+You may want to set the `dontStrip` option to `false` (see https://github.com/input-output-hk/haskell.nix/issues/829).
90+This is not set by default because it can occasionally cause breakage.
docs/tutorials/building-package-from-stackage-hackage.mdnew file+43
@@ -0,0 +1,43 @@
1+
2+# Build a specific package from Hackage or Stackage
3+
4+## From a [Stackage][] snapshot
5+
6+To build a package, say [lens][], from a Stackage snapshot, say
7+[lts-13.28][], you could run:
8+```bash
9+nix build '(with import <nixpkgs> (import (builtins.fetchTarball "https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz") {}).nixpkgsArgs; haskell-nix.snapshots."lts-13.28").lens.components.library'
10+```
11+This would build the (public) library component of the [lens][] package as
12+fixed by the [lts-13.28][] stackage snapshot. Nightly snapshots like
13+`nightly-2020-06-21` are also available.
14+
15+## A specific version from Hackage
16+
17+To build any package from hackage, say [lens][], at any version, say 4.17.1,
18+you could run:
19+```bash
20+nix build '(with import <nixpkgs> (import (builtins.fetchTarball "https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz") {}).nixpkgsArgs; (haskell-nix.hackage-package { name = "lens"; version = "4.17.1"; compiler-nix-name = "ghc8102"; })).components.library'
21+```
22+This would build the (public) library component of the [lens-4.17.1][] package
23+from hackage.
24+
25+### Pinning hackage index
26+
27+The dependencies would be resolved against the most recent
28+[hackage-index-state][] which comes with your [haskell.nix][] checkout via the
29+[hackage.nix][] pin. A specific one can be specified as well:
30+```bash
31+nix build '(with import <nixpkgs> (import (builtins.fetchTarball "https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz") {}).nixpkgsArgs; (haskell-nix.hackage-package { name = "lens"; version = "4.17.1"; compiler-nix-name = "ghc8102"; index-state = "2019-07-14T00:00:00Z"; })).components.library'
32+```
33+This would use the hackage index as of `2019-07-14T00:00:00Z` to produce a
34+build plan for the [lens-4.17.1][] package.
35+
36+[Stackage]: https://stackage.org
37+[Hackage]: https://hackage.haskell.org
38+[hackage.nix]: https://github.com/input-output-hk/hackage.nix
39+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
40+[lts-13.28]: https://www.stackage.org/lts-13.28
41+[lens]: https://hackage.haskell.org/package/lens
42+[lens-4.17.1]: https://hackage.haskell.org/package/lens-4.17.1
43+[hackage-index-state]: https://github.com/input-output-hk/hackage.nix/blob/master/index-state-hashes.nix
docs/tutorials/ca-derivations.mdnew file+65
@@ -0,0 +1,65 @@
1+# Content addressed derivations
2+## Introduction
3+
4+Floating content addressed derivations (from now *CA derivations*) is an experimental feature which substantially change how the hashes in the store paths are calculated.
5+Indeed, normally derivations are input addressed i.e. the outputs store paths depends only on the derivation inputs, instead with CA derivations they depend on the content of the outputs.
6+
7+This has two main advantages:
8+
9+- The so-called "early cutoff", namely the ability of Nix to stop a build if the build outputs would be something already built.
10+For example suppose you add a comment in an Haskell source, at this point Nix will rebuild the component depending on this source but since the output will be the same (adding a comment is an "output-invariant" change for `ghc`) every other component that depends on that will not be rebuilt.
11+- Users of the same Nix store does not need to trust each other when using substituters.
12+
13+You can find more information in the [ca-derivations page on the wiki](https://nixos.wiki/wiki/Ca-derivations) (and in the other resources linked there).
14+
15+## Usage
16+### Enable CA derivations in your system
17+First of all your Nix installation must support the `ca-derivations` experimental feature, this can done by adding the following in your `nix.conf`:
18+
19+```
20+experimental-features = ca-derivations
21+```
22+
23+Or if you use NixOS:
24+```
25+nix.extraOptions = ''
26+ experimental-features = ca-derivations
27+'';
28+```
29+
30+## Enable CA derivations in your project
31+At this point you can pass a new module to `project'` that tells `haskell.nix` to build every component in the project as CA derivation.
32+
33+```
34+haskell-nix.project' {
35+ # ...
36+
37+ modules = [{
38+ contentAddressed = true;
39+ # packages.project-name.components.exes.executable.contentAddressed = true;
40+ }];
41+};
42+```
43+
44+Optionally you can also specify which components you don't want to be content addressed.
45+
46+## Known problems
47+### Limitation of the current CA derivations implementation
48+
49+As explained in the [RFC 62](https://github.com/tweag/rfcs/blob/cas-rfc/rfcs/0062-content-addressed-paths.md)
50+
51+> The current implementation has a naive approach that just forbids fetching a path if the local system has a different realisation for the same drv output. This approach is simple and correct, but it's possible that it might not be good-enough in practice as it can result in a totally useless binary cache in some pathological cases.
52+
53+For example, suppose that your machine builds a derivation `A` producing an output `A.out` in your store and that after that a CI machine builds the same derivation `A` but producing a different output `A.out'` and populating a cache with this output.
54+At this point, if you need to build a derivation `B` that depends on `A`, since you already have the realisation `A.out` in your local store and you can't get `B.out` from the cache and you will end up building `B` even if one of its realisation is in the cache.
55+
56+This means that, in some cases, enabling CA derivations would lead to more rebuilds than not having it.
57+
58+### Hydra
59+Hydra currently doesn't support CA derivations, efforts are being made in this direction.
60+
61+
62+### GHC is not deterministic
63+Currently `ghc` is determinstic only disabling the parallel building i.e. passing `-j1`. [Here](https://gitlab.haskell.org/ghc/ghc/-/issues/12935) the upstream issue.
64+
65+Having a deterministic `ghc` would be a dream since it will automatically fix all the pathological cases about substituters discussed above and would allow `haskell.nix` to parallel build even when using CA derivations.
docs/tutorials/clean-git.mdnew file+90
@@ -0,0 +1,90 @@
1+# cleanGit
2+
3+To filter out just the files in your git index use
4+`haskell-nix.haskellLib.cleanGit { src = ./.; }` where `./.` is the
5+root of your git repo (or a git work tree).
6+
7+First it filters just the files needed to run `git index`, then
8+it uses the results of that to filter your directory. It does not
9+need to parse the `.gitignore` files at all, but we do need to
10+`git add` our files before they will be included.
11+[cleanGit source](https://github.com/input-output-hk/haskell.nix/blob/master/lib/clean-git.nix).
12+
13+In addition haskell.nix (including `cleanGit`) uses a version
14+of [`cleanSourceWith`](https://github.com/input-output-hk/haskell.nix/blob/master/lib/clean-source-with.nix)
15+with a `subdir` argument to filter out just the package it is
16+building. Then it uses the info from the `cabal` file to filter
17+just the source dirs for the component it is building. That way
18+if we modify a test in a package nix will not rebuild the library
19+in that package (or anything that depends on that package's library).
20+
21+There is a downside to this though. If we have a test that depends
22+on something outside the scope of what is described in its entry in
23+the in the `.cabal` file it will not see it. For instance perhaps
24+it needs to run `hlint` or `doctest` on the library source. There
25+are ways to fix this with a module:
26+
27+Use `extraSrcFiles` to add dirs the test needs (this will not result
28+in a change to the `.cabal` file the test will still be built the same).
29+```
30+components.tests.test.extraSrcFiles = [ "subdir-needed-by-test" ];
31+```
32+Or alternatively, override the source with a suitable filter function.
33+```
34+components.tests.test.src = haskell-nix.haskellLib.cleanSourceWith {
35+ inherit src;
36+ subdir = "path-to-package";
37+ filter = ...
38+};
39+```
40+
41+## Multiple Git Repositories with cleanGits
42+
43+Some times it is handy to temporarily use a relative path between git
44+repos. If the repos are individually cleaned this is not possible
45+(since the cleaned version of one repo will never include the files
46+of the other).
47+
48+There are 3 options:
49+
50+* We could `symlinkJoin` the cleaned directories together, but the
51+ result could not be cleaned and any change would to either
52+ repo would result in a rebuild of everything.
53+
54+* We could add one repo to the other as a submodule,
55+ but adding and then removing a submodule is a pain and it does not
56+ work well if you have more than one repo that needs to share the
57+ submodule.
58+
59+* We could add a `source-repository-package` but then we would have
60+ to commit each change before testing.
61+
62+`cleanGits` allows us to specify a root directory and any number of
63+sub directories containing git repos.
64+
65+For example if `repoA` and `repoB` are two git repos with
66+cabal packages and want to use the `repoB` package when building
67+`repoA`. First we can add `../repoB` to `repoA/cabal.project`:
68+
69+```
70+packages:
71+ ./.
72+ ../repoB
73+```
74+
75+Then in `repoA/default.nix` we can use:
76+
77+```
78+haskell-nix.project {
79+ src = haskell-nix.haskellLib.cleanSourceWith {
80+ src = haskell-nix.haskellLib.cleanGits {
81+ name = "root";
82+ src = ../.; # Parent dir that contains repoA and repoB
83+ gitDirs = [ "repoA" "repoB" ];
84+ };
85+ subDir = "repoA"; # Where to look for the `cabal.project`
86+ includeSiblings = true; # Tells it not to exclude `repoB` dir
87+ };
88+}
89+```
90+
docs/tutorials/coverage.mdnew file+123
@@ -0,0 +1,123 @@
1+# Coverage
2+
3+haskell.nix can generate coverage information for your package or
4+project using Cabal's inbuilt hpc support.
5+
6+## Prerequisites
7+
8+To get a sensible coverage report, you need to enable coverage on each
9+of the packages of your project:
10+
11+```nix
12+pkgs.haskell-nix.project {
13+ src = pkgs.haskell-nix.haskellLib.cleanGit {
14+ name = "haskell-nix-project";
15+ src = ./.;
16+ };
17+ compiler-nix-name = "ghc884";
18+
19+ modules = [{
20+ packages.$pkg.components.library.doCoverage = true;
21+ }];
22+}
23+```
24+
25+If you would like to make coverage optional, add an argument to your nix expression:
26+
27+```nix
28+{ withCoverage ? false }:
29+
30+pkgs.haskell-nix.project {
31+ src = pkgs.haskell-nix.haskellLib.cleanGit {
32+ name = "haskell-nix-project";
33+ src = ./.;
34+ };
35+ compiler-nix-name = "ghc884";
36+
37+ modules = pkgs.lib.optional withCoverage [{
38+ packages.$pkg.components.library.doCoverage = true;
39+ }];
40+}
41+```
42+
43+## Per-package
44+
45+```bash
46+nix-build default.nix -A "projectWithCoverage.$pkg.coverageReport"
47+```
48+
49+This will generate a coverage report for the package you requested.
50+All tests that are enabled (configured with `doCheck == true`) are
51+included in the coverage report.
52+
53+See the [developer coverage docs](../dev/coverage.md#package-reports) for more information.
54+
55+## Project-wide
56+
57+```bash
58+nix-build default.nix -A "projectWithCoverage.projectCoverageReport"
59+```
60+
61+This will generate a coverage report for all the local packages in
62+your project.
63+
64+See the [developer coverage docs](../dev/coverage.md#project-wide-reports) for more information.
65+
66+## Custom
67+
68+By default, the behaviour of the `coverageReport` attribute is to
69+generate a coverage report that describes how that package affects the
70+coverage of all local packages (including itself) in the project.
71+
72+The default behaviour of `projectCoverageReport` is to sum the
73+default coverage reports (produced by the above process) of all local
74+packages in the project.
75+
76+You can modify this behaviour by using the `coverageReport` and
77+`projectCoverageReport` functions found in the haskell.nix library:
78+
79+```nix
80+let
81+ inherit (pkgs.haskell-nix) haskellLib;
82+
83+ project = haskellLib.project {
84+ src = pkgs.haskell-nix.haskellLib.cleanGit {
85+ name = "haskell-nix-project";
86+ src = ./.;
87+ };
88+ compiler-nix-name = "ghc884";
89+
90+ modules = [{
91+ packages.$pkgA.components.library.doCoverage = true;
92+ packages.$pkgB.components.library.doCoverage = true;
93+ }];
94+ };
95+
96+ # Generate a coverage report for $pkgA that only includes the
97+ # unit-test check and only shows coverage information for $pkgA, not
98+ # $pkgB.
99+ custom$pkgACoverageReport = haskellLib.coverageReport rec {
100+ name = "$pkgA-unit-tests-only"
101+ inherit (project.$pkgA.components) library;
102+ checks = [project.$pkgA.components.checks.unit-test];
103+ # Note that this is the default value of the "mixLibraries"
104+ # argument and so this line isn't really necessary.
105+ mixLibraries = [project.$pkgA.components.library];
106+ };
107+
108+ custom$pkgBCoverageReport = haskellLib.coverageReport rec {
109+ name = "$pkgB-unit-tests-only"
110+ inherit (project.$pkgB.components) library;
111+ checks = [project.$pkgB.components.checks.unit-test];
112+ mixLibraries = [project.$pkgB.components.library];
113+ };
114+
115+ # Generate a project coverage report that only includes the unit
116+ # tests of the project, and only shows how each unit test effects
117+ # the coverage of it's package, and not other packages in the
118+ # project.
119+ allUnitTestsProjectReport = haskellLib.projectCoverageReport [custom$pkgACoverageReport custom$pkgBCoverageReport];
120+in {
121+ inherit project custom$pkgACoverageReport custom$pkgBCoverageReport allUnitTestsProjectCoverageReport;
122+}
123+```
docs/tutorials/cross-compilation.mdnew file+184
@@ -0,0 +1,184 @@
1+Cross compilation of Haskell projects involves building a version of
2+GHC that outputs code for the target platform, and providing builds of
3+all library dependencies for that platform.
4+
5+First, understand how to cross-compile a normal package from
6+Nixpkgs. Matthew Bauer's [Beginners' guide to cross compilation in
7+Nixpkgs][bauer] is a useful resource.
8+
9+[bauer]: https://matthewbauer.us/blog/beginners-guide-to-cross.html
10+
11+
12+Using an example from the guide, this builds GNU Hello for a Raspberry
13+Pi:
14+
15+ nix build -f '<nixpkgs>' pkgsCross.raspberryPi.hello
16+
17+We will use the same principle in [Haskell.nix][] — replacing the normal
18+package set `pkgs` with a cross-compiling package set
19+`pkgsCross.raspberryPi`.
20+
21+### Raspberry Pi example
22+
23+This is an example of using [Haskell.nix][] to build the [Bench][]
24+command-line utility, which is a Haskell program.
25+
26+```nix
27+{ pkgs ? import <nixpkgs> {} }:
28+let
29+ haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz);
30+ native = haskellNix { inherit pkgs; };
31+in
32+ native.haskellPackages.bench.components.exes.bench
33+```
34+
35+Now switch the package set as in the previous example:
36+
37+```nix
38+{ pkgs ? import <nixpkgs> {} }:
39+let
40+ haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz);
41+ raspberryPi = haskellNix { pkgs = pkgs.pkgsCross.raspberryPi; };
42+in
43+ raspberryPi.haskellPackages.bench.components.exes.bench
44+```
45+
46+You should be prepared for a long wait because it first needs to build
47+GHC, before building all the Haskell dependencies of [Bench][]. If all
48+of these dependencies compiled successfully, I would be very surprised!
49+
50+!!! hint
51+ The above example won't build, but you can try and see, if you like.
52+ It will fail on [clock-0.7.2](http://hackage.haskell.org/package/clock-0.7.2),
53+ which needs a patch to build.
54+
55+To fix the build problems, you must add extra configuration to the
56+package set. Your project will have a [`mkStackPkgSet`](../reference/library.md#mkstackpkgset) or
57+[`mkCabalProjectPkgSet`](../reference/library.md#mkcabalprojectpkgset). It is there where you must add
58+[module options](../reference/modules.md) for setting compiler flags, adding patches, and so on.
59+
60+!!! note
61+ Note that `haskell.nix` will automatically use `qemu` to emulate the target
62+ when necessary to run Template Haskell splices.
63+
64+### Static executables with Musl libc
65+
66+Another application of cross-compiling is to produce fully static
67+binaries for Linux. For information about how to do that with the
68+[Nixpkgs Haskell infrastructure][nixpkgs] (not [Haskell.nix][]), see
69+[nh2/static‑haskell‑nix][nh2]. Vaibhav Sagar's linked
70+[blog post][vaibhav] is also very informative.
71+
72+
73+```nix
74+{ pkgs ? import <nixpkgs> {} }:
75+let
76+ haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz);
77+ musl64 = haskellNix { pkgs = pkgs.pkgsCross.musl64; };
78+in
79+ musl64.haskellPackages.bench.components.exes.bench
80+```
81+
82+This example will build [Bench][] linked against Musl libc. However
83+the executable will still be dynamically linked. To get fully static
84+executables you must add package overrides to:
85+
86+1. Disable dynamic linking
87+2. Provide static versions of system libraries. (For more details, see
88+ [Vaibhav's article][vaibhav]).
89+
90+```nix
91+{
92+ packages.bench.components.exes.bench.configureFlags =
93+ lib.optionals stdenv.hostPlatform.isMusl [
94+ "--disable-executable-dynamic"
95+ "--disable-shared"
96+ "--ghc-option=-optl=-pthread"
97+ "--ghc-option=-optl=-static"
98+ "--ghc-option=-optl=-L${gmp6.override { withStatic = true; }}/lib"
99+ "--ghc-option=-optl=-L${zlib.static}/lib"
100+ ];
101+}
102+```
103+
104+!!! note "Licensing"
105+ Note that if copyleft licensing your program is a problem for you,
106+ then you need to statically link with `integer-simple` rather than
107+ `integer-gmp`. However, at present, [Haskell.nix][] does not provide
108+ an option for this.
109+
110+
111+### How to cross-compile your project
112+
113+Set up your project Haskell package set.
114+
115+```nix
116+# default.nix
117+{ pkgs ? import <nixpkgs> {}
118+let
119+ # Import the Haskell.nix library,
120+ haskell = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {
121+ inherit pkgs;
122+ };
123+
124+ # Instantiate a package set using the generated file.
125+ pkgSet = haskell.mkCabalProjectPkgSet {
126+ plan-pkgs = import ./pkgs.nix;
127+ pkg-def-extras = [];
128+ modules = [
129+ {
130+ # You will need to put build fixes here.
131+ }
132+ ];
133+ };
134+in
135+ pkgSet.config.hsPkgs
136+```
137+
138+Apply that package set to the Nixpkgs cross package sets that you are
139+interested in.
140+
141+We are going to expand the `pkgs.pkgsCross` shortcut to be more
142+explicit.
143+
144+```nix
145+let
146+ pkgs = import <nixpkgs> {}
147+in {
148+ shortcut = pkgs.pkgsCross.SYSTEM;
149+ actual = import <nixpkgs> { crossSystem = pkgs.lib.systems.examples.SYSTEM; };
150+}
151+```
152+
153+In the above example, for any `SYSTEM`, `shortcut` and `actual` are
154+the same package set.
155+
156+```nix
157+# release.nix
158+let
159+ myProject = import ./default.nix;
160+
161+ pkgsNative = import <nixpkgs> {};
162+ pkgsRaspberryPi = import <nixpkgs> {
163+ crossSystem = pkgsNative.lib.systems.examples.raspberryPi;
164+ };
165+
166+ native = myProject { pkgs = pkgsNative; };
167+ crossRaspberryPi = myProject { pkgs = pkgsRaspberryPi; };
168+
169+in {
170+ my-project-native = native.my-project.components.exes.my-project;
171+ my-project-raspberry-pi = crossRaspberryPi.my-project.components.exes.my-project;
172+}
173+```
174+
175+Try to build it, and apply fixes to the `modules` list, until there
176+are no errors left.
177+
178+
179+
180+[nh2]: https://github.com/nh2/static-haskell-nix
181+[vaibhav]: https://vaibhavsagar.com/blog/2018/01/03/static-haskell-nix/
182+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
183+[bench]: https://hackage.haskell.org/package/bench
184+[nixpkgs]: https://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure
docs/tutorials/development.mdnew file+211
@@ -0,0 +1,211 @@
1+Haskell.nix also provides reproducible development environments for
2+your Haskell projects. These environments can contain not only GHC and
3+your Haskell package dependencies, but also the required system
4+libraries and build tools.
5+
6+Inside the development shell, you can run commands such as `ghc`,
7+`ghci`, or `cabal new‑build` (`cabal build` on Cabal 3.0),
8+and they will have all dependencies available.
9+
10+Every dependency will be cached in your Nix store. If you have set up
11+Hydra CI, then your team can share pre-built dependencies.
12+
13+These examples assume that you have created your package set as
14+described in [Creating Nix builds for your projects](getting-started.md) and
15+it exists in a file called `default.nix`.
16+
17+!!! note
18+
19+ Old-style `cabal build` and `stack` builds are not (yet)
20+ supported. For example, `stack` will (by design) download and
21+ rebuild all dependencies, even though they are available in the
22+ shell. However, if you have a Stack project, you can generate the
23+ package set with Haskell.nix, then use `cabal new‑build` to work
24+ on it. Starting Cabal 3.0 `cabal build` will work out of the box, as
25+ new style builds are the default.
26+
27+## How to get a development shell
28+
29+If you have a Cabal or Stack project with one or more packages
30+(i.e. multiple `.cabal` files, not a single package with multiple
31+components), then you will need a development environment that
32+contains the _dependencies_ of your packages, but not the packages
33+themselves. This is what the [`shellFor`][shellFor] function does.
34+
35+```nix
36+# shell.nix
37+let
38+ project = import ./default.nix;
39+in
40+ project.shellFor {
41+ # ALL of these arguments are optional.
42+
43+ # List of packages from the project you want to work on in
44+ # the shell (default is all the projects local packages).
45+ packages = ps: with ps; [
46+ pkga
47+ pkgb
48+ ];
49+
50+ # Builds a Hoogle documentation index of all dependencies,
51+ # and provides a "hoogle" command to search the index.
52+ withHoogle = true;
53+
54+ # Some common tools can be added with the `tools` argument
55+ tools = {
56+ cabal = "3.2.0.0";
57+ hlint = "latest"; # Selects the latest version in the hackage.nix snapshot
58+ haskell-language-server = "latest";
59+ };
60+ # See overlays/tools.nix for more details
61+
62+ # Some you may need to get some other way.
63+ buildInputs = [ (import <nixpkgs> {}).git ];
64+
65+ # Sellect cross compilers to include.
66+ crossPlatforms = ps: with ps; [
67+ ghcjs # Adds support for `js-unknown-ghcjs-cabal build` in the shell
68+ # mingwW64 # Adds support for `x86_64-W64-mingw32-cabal build` in the shell
69+ ];
70+
71+ # Prevents cabal from choosing alternate plans, so that
72+ # *all* dependencies are provided by Nix.
73+ exactDeps = true;
74+ }
75+```
76+
77+See also: [Haskell.nix Library Reference: `shellFor`][shellFor]
78+
79+[shellFor]: ../reference/library.md#shellfor
80+
81+## How to get a local Hoogle index
82+
83+If you need a local Hoogle for all the dependencies of your project create this file
84+
85+```nix
86+# shell-hoogle.nix
87+let
88+ project = import ./default.nix {};
89+in
90+ project.shellFor {
91+ packages = ps: [ps.my-package];
92+ withHoogle = true;
93+ }
94+```
95+
96+and run `nix-shell shell-hoogle.nix --run "hoogle server --local"`.
97+This will open a local Hoogle server at `http://127.0.0.1:8080`.
98+
99+
100+## How to get an ad-hoc development shell including certain packages
101+
102+This creates a development environment with the given packages
103+registered in the package database. The `ghcWithPackages` function
104+operates on a Haskell.nix package set, and accepts an argument that
105+selects packages from the larger package set.
106+
107+```nix
108+# shell.nix
109+let
110+ haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {};
111+ nixpkgs = import haskellNix.sources.nixpkgs haskellNix.nixpkgsArgs;
112+ haskell = nixpkgs.haskell-nix;
113+in
114+ haskell.haskellPackages.ghcWithPackages (ps: with ps;
115+ [ lens conduit conduit-extra ])
116+```
117+
118+If you need a Hoogle documentation index, use `ghcWithHoogle` in place
119+of `ghcWithPackages`.
120+
121+## How to get packages from a certain Stackage snapshot
122+
123+Haskell.nix knows about every released Stackage snapshot. You can use
124+it to build packages from a given snapshot, without setting up a full
125+project.
126+
127+```nix
128+let
129+ haskellNix = import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {};
130+ nixpkgs = import haskellNix.sources.nixpkgs haskellNix.nixpkgsArgs;
131+ haskell = nixpkgs.haskell-nix;
132+in
133+ haskell.snapshots."lts-13.18".alex.components.exes.alex
134+```
135+
136+There are Haskell.nix package sets for every Stackage snaphot under
137+`haskell.snapshots`.
138+
139+The alias `haskell.haskellPackages` corresponds to the package set for
140+a recent LTS Haskell version.
141+
142+You can use `ghcWithPackages` on any of these package sets to quickly
143+get a shell with some packages.
144+
145+!!! warning
146+ The build will not work if your Nixpkgs does not contain the version
147+ of GHC specified in the snapshot. Nixpkgs only carries the
148+ latest version of each recent release series, so many snapshots
149+ can't be built.
150+
151+
152+## Emacs IDE support
153+
154+Once you have a development shell, then you can begin configuring
155+Emacs to use it. The way I do it is:
156+
157+1. Run [lorri watch](https://github.com/target/lorri) to continuously
158+ build the shell environment and maintain GC roots.
159+
160+2. Use [emacs‑direnv](https://github.com/wbolster/emacs-direnv) to
161+ push the development environment into Emacs.
162+
163+3. Use [Dante](https://github.com/jyp/dante) for highlighting errors
164+ and auto-completion. You must customize Dante to prevent it from
165+ automatically using `nix‑shell` or `stack`. Trim `dante‑methods` to
166+ just `new‑build` and `bare‑ghci`.
167+
168+ You can also use [`.dir‑locals.el`](https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html)
169+ for this. If your project has multiple targets, set `dante‑target`
170+ per-directory.
171+
172+4. For [`haskell‑mode`](https://github.com/haskell/haskell-mode)
173+ interactive Haskell, set `haskell‑process‑type` to
174+ `cabal‑new‑repl`.
175+
176+## Using `nix repl`
177+
178+It's sometimes useful to load [Haskell.nix][] in the REPL to explore
179+attrsets and try examples.
180+
181+```
182+# example.nix
183+{ nixpkgs ? <nixpkgs> }:
184+rec {
185+ haskell = import nixpkgs (import (builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz) {}).nixpkgsArgs;
186+ pkgNames = haskell.pkgs.lib.attrNames haskell.haskell-nix.snapshots."lts-13.18";
187+}
188+```
189+
190+Load the example file:
191+
192+```
193+$ nix repl '<nixpkgs>' example.nix
194+Welcome to Nix version 2.3pre6631_e58a7144. Type :? for help.
195+
196+Loading '<nixpkgs>'...
197+Added 10403 variables.
198+
199+Loading 'example.nix'...
200+Added 2 variables.
201+
202+nix-repl> lib.take 5 pkgNames
203+[ "ALUT" "ANum" "Allure" "Boolean" "BoundedChan" ]
204+
205+nix-repl>
206+```
207+
208+Now that you have `nix-tools` and are able to import [Haskell.nix][],
209+you can continue to the next chapter.
210+
211+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/tutorials/getting-started-flakes.mdnew file+142
@@ -0,0 +1,142 @@
1+# Getting started with flakes
2+
3+This version of the getting started guide is for users who
4+are using [Nix Flakes](https://nixos.wiki/wiki/Flakes).
5+The non flakes version of the guide is [here](getting-started.md).
6+
7+`haskell.nix` can automatically translate your
8+[Cabal](https://cabal.readthedocs.io/en/latest/cabal-project.html)
9+or [Stack](https://docs.haskellstack.org/en/stable/README/#quick-start-guide)
10+project and its dependencies into Nix code.
11+
12+Assuming you have [Nix](https://nixos.org/download.html) installed, you can
13+start setting up your project.
14+
15+## Setting up the binary cache
16+
17+IMPORTANT: you *must* do this or you *will* build several copies of GHC!
18+
19+You can configure Nix to use our binary cache, which is pushed to by CI, so should contain the artifacts that you need.
20+
21+You need to add the following sections to `/etc/nix/nix.conf` or, if you are a trusted user, `~/.config/nix/nix.conf` (if you don't know what a "trusted user" is, you probably want to do the former).
22+
23+```
24+trusted-public-keys = [...] hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= [...]
25+substituters = [...] https://cache.iog.io [...]
26+```
27+
28+If you're running NixOS, you need to add/update the following in your `/etc/nixos/configuration.nix` files instead.
29+
30+```
31+# Binary Cache for Haskell.nix
32+nix.settings.trusted-public-keys = [
33+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
34+];
35+nix.settings.substituters = [
36+ "https://cache.iog.io"
37+];
38+```
39+
40+NixOS-21.11 and older use slightly different settings.
41+
42+```
43+# Binary Cache for Haskell.nix
44+nix.binaryCachePublicKeys = [
45+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
46+];
47+nix.binaryCaches = [
48+ "https://cache.iog.io"
49+];
50+```
51+
52+This can be tricky to get setup properly. If you're still having trouble getting cache hits, consult the corresponding [troubleshooting section](../troubleshooting.md#why-am-i-building-ghc).
53+
54+## Scaffolding
55+
56+The following work with `stack.yaml` and `cabal.project` based
57+projects.
58+
59+Add `flake.nix`:
60+
61+```nix
62+{
63+ description = "A very basic flake";
64+ inputs.haskellNix.url = "github:input-output-hk/haskell.nix";
65+ inputs.nixpkgs.follows = "haskellNix/nixpkgs-unstable";
66+ inputs.flake-utils.url = "github:numtide/flake-utils";
67+ outputs = { self, nixpkgs, flake-utils, haskellNix }:
68+ flake-utils.lib.eachSystem [ "x86_64-linux" "x86_64-darwin" ] (system:
69+ let
70+ overlays = [ haskellNix.overlay
71+ (final: prev: {
72+ # This overlay adds our project to pkgs
73+ helloProject =
74+ final.haskell-nix.project' {
75+ src = ./.;
76+ compiler-nix-name = "ghc8104";
77+ # This is used by `nix develop .` to open a shell for use with
78+ # `cabal`, `hlint` and `haskell-language-server`
79+ shell.tools = {
80+ cabal = {};
81+ hlint = {};
82+ haskell-language-server = {};
83+ };
84+ # Non-Haskell shell tools go here
85+ shell.buildInputs = with pkgs; [
86+ nixpkgs-fmt
87+ ];
88+ # This adds `js-unknown-ghcjs-cabal` to the shell.
89+ # shell.crossPlatforms = p: [p.ghcjs];
90+ };
91+ })
92+ ];
93+ pkgs = import nixpkgs { inherit system overlays; inherit (haskellNix) config; };
94+ flake = pkgs.helloProject.flake {
95+ # This adds support for `nix build .#js-unknown-ghcjs-cabal:hello:exe:hello`
96+ # crossPlatforms = p: [p.ghcjs];
97+ };
98+ in flake // {
99+ # Built by `nix build .`
100+ defaultPackage = flake.packages."hello:exe:hello";
101+ });
102+}
103+```
104+
105+!!! note "git dependencies"
106+ If you have git dependencies in your project, you'll need
107+ to [calculate sha256 hashes for them](./source-repository-hashes.md).
108+
109+### Working with a project
110+
111+Top-level attributes are Haskell packages (incl. dependencies) part of your project.
112+
113+To build the library component of a package in the project run:
114+
115+```shell
116+nix build .#your-package-name:lib:your-package-name
117+```
118+
119+There are also other components such as `exe`, `test` and `benchmark`.
120+To build an executable:
121+
122+```shell
123+nix build .#your-package-name:exe:your-exe-name
124+```
125+
126+To use the `devShell` provided by the flake run:
127+
128+```shell
129+nix develop .
130+cabal repl your-package-name:lib:your-package-name
131+cabal build your-package-name
132+```
133+
134+To open a shell for use with `stack` see [the following issue](https://github.com/input-output-hk/haskell.nix/issues/689#issuecomment-643832619).
135+
136+## Going forward
137+
138+Read through [project](../reference/library.md#project) function reference to see how the API works.
139+
140+There are a number of things to explore further in the tutorials section.
141+
142+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/tutorials/getting-started-hix.mdnew file+227
@@ -0,0 +1,227 @@
1+# Getting started with Hix
2+
3+The `hix` tools are wrappers for the various `nix` tools that
4+use `haskell.nix` without the need to add any `.nix` files.
5+
6+This is useful for:
7+
8+* A quick way to try out haskell.nix for new users.
9+
10+* Using haskell.nix to work on projects that do not have
11+ `.nix` files.
12+
13+* Testing to see if `haskell.nix` can build a project.
14+
15+* Making `flake` and `non flake` configurations to check `haskell.nix`
16+ treats them the same.
17+
18+## Installing Nix
19+
20+To use Hix you will need to install [Nix](https://nixos.org/download.html).
21+
22+## Setting up the binary cache
23+
24+IMPORTANT: you *must* do this or you *will* build several copies of GHC!
25+
26+You can configure Nix to use our binary cache, which is pushed to by CI, so should contain the artifacts that you need.
27+
28+You need to add the following sections to `/etc/nix/nix.conf` or, if you are a trusted user, `~/.config/nix/nix.conf` (if you don't know what a "trusted user" is, you probably want to do the former).
29+
30+```
31+trusted-public-keys = [...] hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= [...]
32+substituters = [...] https://cache.iog.io [...]
33+```
34+
35+If you're running NixOS, you need to add/update the following in your `/etc/nixos/configuration.nix` files instead.
36+
37+```
38+# Binary Cache for Haskell.nix
39+nix.settings.trusted-public-keys = [
40+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
41+];
42+nix.settings.substituters = [
43+ "https://cache.iog.io"
44+];
45+```
46+
47+NixOS-21.11 and older use slightly different settings.
48+
49+```
50+# Binary Cache for Haskell.nix
51+nix.binaryCachePublicKeys = [
52+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
53+];
54+nix.binaryCaches = [
55+ "https://cache.iog.io"
56+];
57+```
58+
59+This can be tricky to get setup properly. If you're still having trouble getting cache hits, consult the corresponding [troubleshooting section](../troubleshooting.md#why-am-i-building-ghc).
60+
61+## Installing Hix
62+
63+```
64+nix-env -iA hix -f https://github.com/input-output-hk/haskell.nix/tarball/master
65+```
66+
67+## Updating Hix (also updates hackage)
68+
69+```
70+hix update
71+```
72+
73+This is also necessary to make the latest nightly snapshot of hackage
74+avaiable to nix.
75+
76+## Building with Hix
77+
78+To run `cabal build` in a nix-shell with all the dependencies required:
79+
80+```
81+cabal unpack hello
82+cd hello-1.0.0.2
83+hix-shell --run 'cabal build'
84+```
85+
86+Build with nix:
87+
88+```
89+hix-build -A hsPkgs.hello.components.exes.hello
90+```
91+
92+Cross compile to JavaScript:
93+
94+```
95+hix-build -A projectCross.ghcjs.hsPkgs.hello.components.exes.hello
96+```
97+
98+## Configuring Hix
99+
100+The configuration arguments for `Hix` can be (from highest precedence to lowest):
101+
102+* Passed on the command line with `--arg` (or `--argstr` for string args).
103+
104+* Placed in `nix/hix.nix` file in the project dir.
105+
106+* Placed in `~/.config/hix/hix.conf`
107+
108+For example to build with GHC 8.10.7:
109+
110+```
111+hix-shell --argstr compiler-nix-name ghc8107 --run 'cabal build'
112+```
113+
114+or add a `nix/hix.nix` or `~/.config/hix/hix.conf` file:
115+
116+```nix
117+{ compiler-nix-name = "ghc8107"; }
118+```
119+
120+Here are just a few of the other configuration arguments you could use
121+in the files or on the command line (they are all optional):
122+
123+```nix
124+{ name = "hello"; # for better error messages and derivation names
125+ nixpkgsPin = "nixpkgs-unstable"; # or nixpkgs-2111 or nixpkgs-2105
126+ nixpkgs = <nixpkgs>; # use this instead of nixpkgsPin
127+ subDir = "some/sub/dir"; # sub dir containing the haskell project
128+ projectFileName = "stack.yaml"; # use this project file
129+ tools.haskell-language-server = "latest";
130+ tools.hlint = "latest"; # Include the latest hls and hlint in the shell
131+ index-state = "2021-02-22T00:00:00Z"; # It is normally best to put this in `cabal.project` (not here)
132+
133+# PLUS MANY MORE! Almost any argument you can pass to the project functions
134+# or to `shellFor` can be used in as a Hix configuration argument.
135+
136+}
137+```
138+
139+## Adding Nix Support with Niv
140+
141+If you have a `nix/hix.nix` file with suitable configuration that
142+you want to make available to users with Nix (without having to
143+install Hix).
144+
145+[Niv](https://github.com/nmattia/niv) is a command line tool for keeping track of Nix project dependencies.
146+
147+After installing niv you can initialize niv and pin the latest haskell.nix
148+commit by running the following in the root directory of the project:
149+
150+```
151+niv init
152+niv add input-output-hk/haskell.nix -n haskellNix
153+```
154+
155+Add `default.nix`:
156+
157+```nix
158+(import (import nix/sources.nix).haskellNix {}).hix.project { src = ./.; }
159+```
160+
161+If you want to also pin `nixpkgs` with Niv use:
162+
163+```nix
164+let
165+ sources = import nix/sources.nix;
166+in
167+ (import sources.haskellNix {}).hix.project {
168+ inherit (sources) nixpkgs;
169+ src = ./.;
170+ }
171+```
172+
173+Add `shell.nix`:
174+
175+```nix
176+(import ./.).shell
177+```
178+
179+When you want to update to the latest version of haskell.nix use:
180+
181+```
182+niv update haskellNix
183+```
184+
185+## Adding Nix Flake Support
186+
187+To add flake support that uses the `nix/hix.nix` configuration in your
188+follow the [Getting started with flakes](getting-started.md) guide, but
189+use `haskell-nix.hix.project` instead of `haskell-nix.project'`
190+
191+The `nixpkgs` used will need to be selected as a flake input (any selection
192+made in `nix/hix.nix` will be ignored).
193+
194+Example `flake.nix` file:
195+
196+```nix
197+{
198+ description = "A very basic flake";
199+ inputs.haskellNix.url = "github:input-output-hk/haskell.nix";
200+ inputs.nixpkgs.follows = "haskellNix/nixpkgs-unstable";
201+ inputs.flake-utils.url = "github:numtide/flake-utils";
202+ outputs = { self, nixpkgs, flake-utils, haskellNix }:
203+ flake-utils.lib.eachSystem [ "x86_64-linux" "x86_64-darwin" ] (system:
204+ let
205+ overlays = [ haskellNix.overlay
206+ (final: prev: {
207+ # This overlay adds our project to pkgs
208+ helloProject =
209+ final.haskell-nix.hix.project {
210+ src = ./.;
211+ # Other project options can be put in `nix/hix.nix`
212+ };
213+ })
214+ ];
215+ pkgs = import nixpkgs { inherit system overlays; inherit (haskellNix) config; };
216+ flake = pkgs.helloProject.flake {
217+ # This adds support for `nix build .#js-unknown-ghcjs:hello:exe:hello`
218+ crossPlatforms = p: [p.ghcjs];
219+ };
220+ in flake // {
221+ # Built by `nix build .`
222+ defaultPackage = flake.packages."hello:exe:hello";
223+ });
224+}
225+```
226+
227+
docs/tutorials/getting-started.mdnew file+203
@@ -0,0 +1,203 @@
1+# Getting started
2+
3+`haskell.nix` can automatically translate your
4+[Cabal](https://cabal.readthedocs.io/en/latest/cabal-project.html)
5+or [Stack](https://docs.haskellstack.org/en/stable/README/#quick-start-guide)
6+project and its dependencies into Nix code.
7+
8+Assuming you have [Nix](https://nixos.org/download.html) installed, you can
9+start setting up your project.
10+
11+## Setting up the binary cache
12+
13+IMPORTANT: you *must* do this or you *will* build several copies of GHC!
14+
15+You can configure Nix to use our binary cache, which is pushed to by CI, so should contain the artifacts that you need.
16+
17+You need to add the following sections to `/etc/nix/nix.conf` or, if you are a trusted user, `~/.config/nix/nix.conf` (if you don't know what a "trusted user" is, you probably want to do the former).
18+
19+```
20+trusted-public-keys = [...] hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= [...]
21+substituters = [...] https://cache.iog.io [...]
22+```
23+
24+If you're running NixOS, you need to add/update the following in your `/etc/nixos/configuration.nix` files instead.
25+
26+```
27+# Binary Cache for Haskell.nix
28+nix.settings.trusted-public-keys = [
29+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
30+];
31+nix.settings.substituters = [
32+ "https://cache.iog.io"
33+];
34+```
35+
36+NixOS-21.11 and older use slightly different settings.
37+
38+```
39+# Binary Cache for Haskell.nix
40+nix.binaryCachePublicKeys = [
41+ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
42+];
43+nix.binaryCaches = [
44+ "https://cache.iog.io"
45+];
46+```
47+
48+This can be tricky to get setup properly. If you're still having trouble getting cache hits, consult the corresponding [troubleshooting section](../troubleshooting.md#why-am-i-building-ghc).
49+
50+## Niv
51+
52+[Niv](https://github.com/nmattia/niv) is a command line tool for keeping track of Nix project dependencies.
53+
54+This guide assumes that the `sources.haskellNix` will be set to point
55+a pinned copy of the haskell.nix github repo. One easy way to do this
56+is to use Niv. If you prefer not to use Niv another option is described
57+in the in the "Using haskell.nix without niv" section of this document.
58+
59+If you want to use Nix Flakes to pin your dependencies then you should
60+consider following the [Getting started with flakes](./getting-started-flakes.md)
61+document instead of this one.
62+
63+After installing niv you can initialize niv and pin the latest haskell.nix
64+commit by running the following in the root directory of the project:
65+
66+```
67+niv init
68+niv add input-output-hk/haskell.nix -n haskellNix
69+```
70+
71+Then when you want to update to the latest version of haskellNix use:
72+
73+```
74+niv update haskellNix
75+```
76+
77+## Scaffolding
78+
79+The following work with `stack.yaml` and `cabal.project` based
80+projects.
81+
82+Add `default.nix`:
83+
84+```nix
85+let
86+ # Read in the Niv sources
87+ sources = import ./nix/sources.nix {};
88+ # If ./nix/sources.nix file is not found run:
89+ # niv init
90+ # niv add input-output-hk/haskell.nix -n haskellNix
91+
92+ # Fetch the haskell.nix commit we have pinned with Niv
93+ haskellNix = import sources.haskellNix {};
94+ # If haskellNix is not found run:
95+ # niv add input-output-hk/haskell.nix -n haskellNix
96+
97+ # Import nixpkgs and pass the haskell.nix provided nixpkgsArgs
98+ pkgs = import
99+ # haskell.nix provides access to the nixpkgs pins which are used by our CI,
100+ # hence you will be more likely to get cache hits when using these.
101+ # But you can also just use your own, e.g. '<nixpkgs>'.
102+ haskellNix.sources.nixpkgs-unstable
103+ # These arguments passed to nixpkgs, include some patches and also
104+ # the haskell.nix functionality itself as an overlay.
105+ haskellNix.nixpkgsArgs;
106+in pkgs.haskell-nix.project {
107+ # 'cleanGit' cleans a source directory based on the files known by git
108+ src = pkgs.haskell-nix.haskellLib.cleanGit {
109+ name = "haskell-nix-project";
110+ src = ./.;
111+ };
112+ # Specify the GHC version to use.
113+ compiler-nix-name = "ghc8102"; # Not required for `stack.yaml` based projects.
114+}
115+```
116+
117+!!! note "git dependencies"
118+ If you have git dependencies in your project, you'll need
119+ to [calculate sha256 hashes for them](./source-repository-hashes.md).
120+
121+### Working with a project
122+
123+Top-level attributes are Haskell packages (incl. dependencies) part of your project.
124+
125+To build the library component of a package in the project run:
126+
127+```shell
128+nix-build -A your-package-name.components.library
129+```
130+
131+There are also other components such as `exes`, `tests`, `benchmarks` and `all`.
132+To build an executable:
133+
134+```shell
135+nix-build -A your-package-name.components.exes.your-exe-name
136+```
137+
138+To cross compile use the `projectCross` attribute:
139+
140+```
141+nix-build -A projectCross.ghcjs.hsPkgs.your-package-name.components.exes.your-exe-name
142+nix-build -A projectCross.mingwW64.hsPkgs.your-package-name.components.exes.your-exe-name
143+```
144+
145+To open a shell for use with `cabal`, `hlint` and `haskell-language-server` add `shell.nix`:
146+
147+```nix
148+(import ./default.nix).shellFor {
149+ tools = {
150+ cabal = "3.2.0.0";
151+ hlint = "latest";
152+ haskell-language-server = "latest";
153+ };
154+}
155+```
156+
157+Then run:
158+
159+```shell
160+nix-shell
161+cabal new-repl your-package-name:library:your-package-name
162+cabal new-build your-package-name
163+```
164+
165+To open a shell for use with `stack` see [the following issue](https://github.com/input-output-hk/haskell.nix/issues/689#issuecomment-643832619).
166+
167+## Using haskell.nix without Niv
168+
169+If you would prefer not to use niv you can replace
170+`sources = import ./nix/sources.nix {};` in the examples with:
171+
172+```nix
173+let sources = {
174+ haskellNix = builtins.fetchTarball "https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz";
175+ };
176+```
177+
178+The `fetchTarball` call above will always get the latest version, and is
179+similar to an auto-updating Nix channel.
180+
181+However, in your own project, you may wish to pin [haskell.nix][] (as
182+you would pin Nixpkgs). This will make your builds reproducible, more
183+predictable, and faster (because the fixed version is cached).
184+
185+Straightforward way of doing this is to change the branch name to a revision.
186+
187+```nix
188+let sources = {
189+ haskellNix = builtins.fetchTarball "https://github.com/input-output-hk/haskell.nix/archive/f1a94a4c82a2ab999a67c3b84269da78d89f0075.tar.gz";
190+ };
191+```
192+
193+There are other possible schemes for pinning. See
194+[Bumping Hackage and Stackage snapshots](./hackage-stackage.md) and
195+[Nix tutorial on reproducibility using pinning](https://nix.dev/tutorials/towards-reproducibility-pinning-nixpkgs.html).
196+
197+## Going forward
198+
199+Read through [project](../reference/library.md#project) function reference to see how the API works.
200+
201+There are a number of things to explore further in the tutorials section.
202+
203+[haskell.nix]: https://github.com/input-output-hk/haskell.nix
docs/tutorials/hackage-stackage.mdnew file+36
@@ -0,0 +1,36 @@
1+# Bumping Hackage and Stackage snapshots
2+
3+`haskell.nix` relies on some generated data providing information about packages in Hackage and Stackage snapshots.
4+These are kept in [`hackage.nix`](https://github.com/input-output-hk/hackage.nix) and [`stackage.nix`](https://github.com/input-output-hk/stackage.nix) respectively.
5+If your project depends on a Hackage package, then the `hackage.nix` revision used must be new enough to contain that, and likewise for Stackage snaphots and `stackage.nix`.
6+
7+## Updating and pinning `hackage.nix` and `stackage.nix`
8+
9+`haskell.nix` pins particular revisions of these repositories internally, both for our own usage in testing, and so that users have a sensible default when getting started.
10+These revisions are updated nightly, so you can get newer revisions of `hackage.nix` and `stackage.nix` by updating your revision of `haskell.nix` itself.
11+
12+However, this exposes you to changes in `haskell.nix` which you may not want, such as changes that force compiler rebuilds, or the occasional bug.
13+Instead, you can pin `hackage.nix` and `stackage.nix` independently. For example:
14+
15+```nix
16+let
17+ # You can use a tool like `niv` to manage this boilerplate
18+ hackageSrc = builtins.fetchTarball https://github.com/input-output-hk/hackage.nix/archive/master.tar.gz;
19+ stackageSrc = builtins.fetchTarball https://github.com/input-output-hk/stackage.nix/archive/master.tar.gz;
20+ haskellSrc = builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz;
21+
22+ haskellNix = import haskellSrc {
23+ # This allows you to override the pins used by `haskell.nix` internally
24+ sourcesOverride = {
25+ hackage = hackageSrc;
26+ stackage = stackageSrc;
27+ };
28+ };
29+in ...
30+```
31+
32+This way you can change the revisions of `hackage.nix` and `stackage.nix`
33+without changing `haskell.nix`.
34+
35+However, bear in mind that Stackage refers to Hackage, so your Stackage pin
36+should never be newer than your Hackage pin.
docs/tutorials/materialization.mdnew file+258
@@ -0,0 +1,258 @@
1+# Materialization
2+
3+## What is materialization?
4+
5+Capturing and storing the Nix files for a project so that they do
6+not need to be built (or checked). This allows us to cache the input
7+of an IFD (import from derivation).
8+
9+## Why use materialization?
10+
11+Using functions like `project`, `cabalProject`, `stackProject`
12+and `hackage-package` results in a lot of dependencies (all the
13+dependencies of nix-tools for instance).
14+
15+* They can be slow to calculate (even if no work needs to be done it
16+ is not unusual for it to take 5 seconds per project).
17+
18+* They can be slow to build (or download) on machines that do not
19+ yet have them in the Nix store.
20+
21+* Hydra does not show progress because it does not provide feedback until it
22+ has a list of jobs and the list of jobs cannot depend on the Nix expressions
23+ being present (although this is often blamed on IFD it would be the same if
24+ it wrote out JSON files and read them in)
25+
26+## When is it OK to materialize?
27+
28+* The Nix expressions are unlikely to change frequently (and when it does you
29+ are happy to manually update it).
30+
31+* You are happy to script something to update the materialized Nix files
32+ automatically.
33+
34+* You are certain that the IFD you materialize is not `system`-dependent. If it
35+ was you'd obtain different Nix expressions depending on which `system` the
36+ IFD was evaluated.
37+
38+## How can we materialize the Nix files?
39+
40+Lets say we want to build `hlint`. We might start with an `hlint.nix`
41+file that looks like this:
42+
43+```nix
44+let inherit (import ./. {}) sources nixpkgsArgs;
45+ pkgs = import sources.nixpkgs nixpkgsArgs;
46+ hlint = pkgs.haskell-nix.hackage-package {
47+ compiler-nix-name = "ghc8102";
48+ name = "hlint";
49+ version = "2.2.11";
50+ };
51+in hlint
52+```
53+
54+Building this may result in a lot of output, but if you build
55+it again it should give just:
56+
57+```
58+$ nix-build hlint.nix -A components.exes.hlint
59+trace: No index state specified for hlint, using the latest index state that we know about (2021-01-04T00:00:00Z)!
60+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
61+```
62+
63+To materialize the Nix files we need to take care to pin down the inputs. Stack
64+projects have their inputs pinned through specifying the snapshot. For cabal
65+projects this means we must specify the `index-state` of hackage we want to
66+use:
67+
68+```nix
69+let inherit (import ./. {}) sources nixpkgsArgs;
70+ pkgs = import sources.nixpkgs nixpkgsArgs;
71+ hlint = pkgs.haskell-nix.hackage-package {
72+ compiler-nix-name = "ghc8102";
73+ name = "hlint";
74+ version = "2.2.11";
75+ index-state = "2021-01-04T00:00:00Z";
76+ };
77+in hlint
78+```
79+
80+Now if we build again we get a hint telling use how to calculate a suitable
81+sha256 hash to turn the derivation containing the Nix files into a fixed-output
82+derivation:
83+
84+```
85+$ nix-build hlint.nix -A components.exes.hlint
86+trace: To make project.plan-nix for hlint a fixed-output derivation but not materialized, set `plan-sha256` to the output of the 'calculateMaterializedSha' script in 'passthru'.
87+trace: To materialize project.plan-nix for hlint entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.
88+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
89+
90+$ nix-build hlint.nix -A project.plan-nix.passthru.calculateMaterializedSha | bash
91+trace: To make project.plan-nix for hlint a fixed-output derivation but not materialized, set `plan-sha256` to the output of the 'calculateMaterializedSha' script in 'passthru'.
92+trace: To materialize project.plan-nix for hlint entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.
93+04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7
94+```
95+
96+For a Stack project all occurences of `plan-nix` and `plan-sha256` are replaced
97+by `stack-nix` and `stack-sha256`, respectively. We can add the hash as
98+`plan-sha256`:
99+
100+```nix
101+let inherit (import ./. {}) sources nixpkgsArgs;
102+ pkgs = import sources.nixpkgs nixpkgsArgs;
103+ hlint = pkgs.haskell-nix.hackage-package {
104+ compiler-nix-name = "ghc8102";
105+ name = "hlint";
106+ version = "2.2.11";
107+ index-state = "2021-01-04T00:00:00Z";
108+ plan-sha256 = "04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7";
109+ };
110+in hlint
111+```
112+
113+Just adding the hash might help reuse of the cached Nix expressions, but Nix
114+will still calculate all the dependencies (which can add seconds to `nix-build`
115+and `nix-shell` commands when no other work is needed) and users who do not yet
116+have the dependencies in their store will have to wait while they are built or
117+downloaded.
118+
119+Running `nix-build` again gives us a hint on what we can do next:
120+
121+```
122+$ nix-build hlint.nix -A components.exes.hlint
123+trace: To materialize project.plan-nix for hlint entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.
124+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
125+```
126+
127+To capture the Nix expressions we can do something like:
128+
129+```nix
130+let inherit (import ./. {}) sources nixpkgsArgs;
131+ pkgs = import sources.nixpkgs nixpkgsArgs;
132+ hlint = pkgs.haskell-nix.hackage-package {
133+ compiler-nix-name = "ghc8102";
134+ name = "hlint";
135+ version = "2.2.11";
136+ index-state = "2021-01-04T00:00:00Z";
137+ plan-sha256 = "04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7";
138+ materialized = ./hlint.materialized;
139+ };
140+in hlint
141+```
142+
143+Now we can copy the Nix files needed and build with:
144+
145+```
146+$ nix-build hlint.nix 2>&1 | grep -om1 '/nix/store/.*-updateMaterialized' | bash
147+$ nix-build hlint.nix -A components.exes.hlint
148+building '/nix/store/wpxsgzl1z4jnhfqzmzg3xxv3ljpmzr5h-hlint-plan-to-nix-pkgs.drv'...
149+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
150+```
151+
152+## How can we check `sha256` and `materialized` are up to date?
153+
154+Let's pretend we had to go back to `hlint` version `2.2.10`.
155+We can tell haskell.nix to check the materialization either by:
156+
157+* Removing the materialization files with `rm -rf hlint.materialized`
158+
159+* Temporarily adding `checkMaterialization = true;`
160+
161+If we choose to add the `checkMaterialization` flag you would have:
162+
163+```nix
164+let inherit (import ./. {}) sources nixpkgsArgs;
165+ pkgs = import sources.nixpkgs nixpkgsArgs;
166+ hlint = pkgs.haskell-nix.hackage-package {
167+ compiler-nix-name = "ghc8102";
168+ name = "hlint";
169+ version = "2.2.10";
170+ index-state = "2021-01-04T00:00:00Z";
171+ plan-sha256 = "04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7";
172+ materialized = ./hlint.materialized;
173+ checkMaterialization = true;
174+ };
175+in hlint
176+```
177+
178+This will fail and report the details of what is wrong and how to fix it:
179+
180+```
181+$ nix-build hlint.nix -A components.exes.hlint
182+
183+...
184+
185+Calculated hash for hlint-plan-to-nix-pkgs was not 04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7. New hash is :
186+ plan-sha256 = "0jsgdmii0a6b35sd42cpbc83s4sp4fbx8slphzvamq8n9x49i5b6";
187+Materialized nix used for hlint-plan-to-nix-pkgs incorrect. To fix run: /nix/store/6wp0zzal40ls874f5ddpaac7qmii9y4z-updateMaterialized
188+builder for '/nix/store/61a0vginv76w4p9ycyd628pjanav06pl-hlint-plan-to-nix-pkgs.drv' failed with exit code 1
189+error: build of '/nix/store/61a0vginv76w4p9ycyd628pjanav06pl-hlint-plan-to-nix-pkgs.drv' failed
190+(use '--show-trace' to show detailed location information)
191+```
192+
193+Checking the materialization requires Nix to do all the work that
194+materialization avoids. So while it might be tempting to leave
195+`checkMaterialization = true` all the time, we would be better off just
196+removing `materialized` and `plan-sha256`.
197+
198+## How can we update the Nix files with a script?
199+
200+We can simply put the commands we used earlier in a script:
201+
202+```nix
203+#!/bin/sh
204+
205+# Output new plan-sha256
206+nix-build hlint.nix -A project.plan-nix.passthru.calculateMaterializedSha | bash
207+
208+# Update materialized Nix expressions
209+nix-build hlint.nix 2>&1 | grep -om1 '/nix/store/.*-updateMaterialized' | bash
210+```
211+
212+## Can we skip making a copy and use `materialized = /nix/store/...`?
213+
214+Yes and it gives us the same speed improvement, however:
215+
216+* It does not help at all in `restricted-eval` mode (Hydra).
217+
218+* Users will still wind up building or downloading the dependencies
219+ needed to build the Nix files (if they do not have them).
220+
221+For those reasons it might be best to make a copy instead
222+of using the `/nix/store/...` path directly.
223+
224+If you really want to use the `/nix/store/...` path directly
225+you should guard against the path not existing as passing in
226+a non-existing path is now an error:
227+
228+```nix
229+let inherit (import ./. {}) sources nixpkgsArgs;
230+ pkgs = import sources.nixpkgs nixpkgsArgs;
231+ hlintPlan = /nix/store/63k3f8bvsnag7v36vb3149208jyx61rk-hlint-plan-to-nix-pkgs;
232+ hlint = pkgs.haskell-nix.hackage-package {
233+ compiler-nix-name = "ghc8102";
234+ name = "hlint";
235+ version = "2.2.11";
236+ index-state = "2021-01-04T00:00:00Z";
237+ plan-sha256 = "04hdgqwpaswmyb0ili7fwi6czzihd6x0jlvivw52d1i7wv4gaqy7";
238+ materialized = if __pathExists hlintPlan then hlintPlan else null;
239+ };
240+in hlint
241+```
242+
243+Running when no building is needed is still slow in restricted evaluation mode.
244+
245+```
246+$ time nix-build --option restrict-eval true -I . --option allowed-uris "https://github.com/NixOS https://github.com/input-output-hk" hlint.nix -A components.exes.hlint --show-trace
247+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
248+
249+real 0m4.463s
250+user 0m4.440s
251+sys 0m0.461s
252+$ time nix-build hlint.nix -A components.exes.hlint
253+/nix/store/2ybrfmcp79gg75ad4pr1cbxjak70yg8b-hlint-exe-hlint-2.2.11
254+
255+real 0m2.206s
256+user 0m1.665s
257+sys 0m0.332s
258+```
docs/tutorials/pkg-map.mdnew file+68
@@ -0,0 +1,68 @@
1+# Mapping non-Haskell dependencies to Nixpkgs
2+
3+Cabal files may contain dependencies to external non-Haskell
4+dependencies via:
5+
6+* [`build-tool-depends`](https://cabal.readthedocs.io/en/latest/cabal-package.html#pkg-field-build-tool-depends)
7+* [`pkgconfig-depends`](https://cabal.readthedocs.io/en/latest/cabal-package.html#pkg-field-pkgconfig-depends)
8+* [`frameworks`](https://cabal.readthedocs.io/en/latest/cabal-package.html#pkg-field-frameworks)
9+* [`extra-libraries`](https://cabal.readthedocs.io/en/latest/cabal-package.html#pkg-field-extra-libraries)
10+
11+If there is a `pkgs` attribute in Nixpkgs that matches the name given
12+in the Cabal file, then it will be added as a dependency (see the
13+output of `cabal-to-nix`). Otherwise, there needs to be a mapping from
14+Cabal file names (decided by the package author) to Nix package
15+identifiers.
16+
17+### Nixpkgs overlay
18+
19+The user may solve it by themself by overriding Nixpkgs and adding a
20+package alias. For example:
21+
22+```nix
23+nixpkgs.overlays = [
24+ (self: super: {
25+ icuuc = self.icu;
26+ icui18n = self.icu;
27+ icudata = self.icu;
28+ })
29+];
30+```
31+
32+### Replace libraries of components
33+
34+If a component is missing a dependency it can be added via modules. For example:
35+
36+``` nix
37+project = pkgs.haskell-nix.project' {
38+ src = self;
39+ compiler-nix-name = "ghc8102";
40+ modules = [{
41+ # Replace `extra-libraries` dependencies
42+ packages.X11.components.library.libs = pkgs.lib.mkForce (with pkgs.xorg;
43+ [ libX11 libXrandr libXext libXScrnSaver libXinerama ]);
44+ }];
45+};
46+```
47+
48+### Mapping in Haskell.nix
49+
50+Alternatively, if the name is commonly used, an alias can be added to
51+the Haskell.nix sources, so that it's solved for all users.
52+
53+* [`lib/pkgconf-nixpkgs-map.nix`](https://github.com/input-output-hk/haskell.nix/blob/master/lib/pkgconf-nixpkgs-map.nix)
54+ — for `pkgconfig-depends`.
55+
56+ Each mapping entry is a list of packages.
57+
58+* [`lib/system-nixpkgs-map.nix`](https://github.com/input-output-hk/haskell.nix/blob/master/lib/system-nixpkgs-map.nix)
59+ — for `build-tool-depends`, `frameworks`, `extra-libraries`, etc.
60+
61+ Each name can be mapped to:
62+ 1. A single package from nixkpgs.
63+ 2. `null` — eliminates the dependency
64+ 3. A list of packages — sometimes needed for dependencies such as `X11`.
65+
66+!!! tip "Open a PR"
67+ Please go ahead and open a [pull request](https://github.com/input-output-hk/haskell.nix/pulls)
68+ to improve the package mappings.
docs/tutorials/source-repository-hashes.mdnew file+75
@@ -0,0 +1,75 @@
1+# Handling git repositories in projects
2+
3+Both `stack.yaml` and `cabal.project` files can contain references
4+to git repositories containing the version of a particular package
5+that we wish to use. This is mostly handled automatically by
6+`nix-tools` and `haskell.nix` however when we want to use a nix
7+system that is configured to use restricted mode (typically hydra)
8+it will need additional hashes for the referenced repositories.
9+
10+When using `project`, `cabalProject` or `stackProject` functions
11+you can include the hash needed in a comment.
12+
13+To calculate the hash use `nix-prefetch-git`:
14+
15+```
16+$ nix-prefetch-git https://github.com/input-output-hk/haskell.nix.git bc01ebc05a8105035c9449943046b46c8364b932
17+...
18+{
19+ "url": "https://github.com/input-output-hk/haskell.nix.git",
20+ "rev": "bc01ebc05a8105035c9449943046b46c8364b932",
21+ "date": "2019-05-30T13:13:18+08:00",
22+ "sha256": "003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z",
23+ "fetchSubmodules": false
24+}
25+```
26+
27+## Cabal.project
28+
29+Add a `--sha256` comment to the `cabal.project` file:
30+
31+```
32+source-repository-package
33+ type: git
34+ location: https://github.com/input-output-hk/haskell.nix.git
35+ tag: bc01ebc05a8105035c9449943046b46c8364b932
36+ subdir: test/cabal-simple
37+ --sha256: 003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z
38+```
39+
40+## Stack
41+
42+Add a `# nix-sha256` comment to the `stack.yaml` file:
43+
44+```
45+extra-deps:
46+- git: https://github.com/input-output-hk/haskell.nix.git
47+ commit: bc01ebc05a8105035c9449943046b46c8364b932
48+ subdirs:
49+ - test/cabal-simple
50+ # nix-sha256: 003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z
51+```
52+
53+## Avoiding modifying cabal.project and stack.yaml
54+
55+In some cases we cannot modify the `cabal.project` or `stack.yaml` file to add
56+sha256 comments. As an alternative we can pass in a `sha256map`. For instance,
57+pandoc includes a `cabal.project` file on hackage which includes a
58+`source-repository-package` stanza for `pandoc-citeproc`:
59+
60+```nix
61+{ haskell-nix, testSrc } :
62+let
63+ pandoc = haskell-nix.hackage-package {
64+ name = "pandoc";
65+ version = "2.9.2.1";
66+ index-state = "2020-04-15T00:00:00Z";
67+ # Function that returns a sha256 string by looking up the location
68+ # and tag in a nested attrset
69+ sha256map =
70+ { "https://github.com/jgm/pandoc-citeproc"."0.17"
71+ = "0dxx8cp2xndpw3jwiawch2dkrkp15mil7pyx7dvd810pwc22pm2q"; };
72+ };
73+in
74+ pandoc.components.exes.pandoc
75+```
flake.locknew file+396
@@ -0,0 +1,396 @@
1+{
2+ "nodes": {
3+ "HTTP": {
4+ "flake": false,
5+ "locked": {
6+ "lastModified": 1451647621,
7+ "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=",
8+ "owner": "phadej",
9+ "repo": "HTTP",
10+ "rev": "9bc0996d412fef1787449d841277ef663ad9a915",
11+ "type": "github"
12+ },
13+ "original": {
14+ "owner": "phadej",
15+ "repo": "HTTP",
16+ "type": "github"
17+ }
18+ },
19+ "cabal-32": {
20+ "flake": false,
21+ "locked": {
22+ "lastModified": 1603716527,
23+ "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=",
24+ "owner": "haskell",
25+ "repo": "cabal",
26+ "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee",
27+ "type": "github"
28+ },
29+ "original": {
30+ "owner": "haskell",
31+ "ref": "3.2",
32+ "repo": "cabal",
33+ "type": "github"
34+ }
35+ },
36+ "cabal-34": {
37+ "flake": false,
38+ "locked": {
39+ "lastModified": 1640353650,
40+ "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=",
41+ "owner": "haskell",
42+ "repo": "cabal",
43+ "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd",
44+ "type": "github"
45+ },
46+ "original": {
47+ "owner": "haskell",
48+ "ref": "3.4",
49+ "repo": "cabal",
50+ "type": "github"
51+ }
52+ },
53+ "cabal-36": {
54+ "flake": false,
55+ "locked": {
56+ "lastModified": 1641652457,
57+ "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=",
58+ "owner": "haskell",
59+ "repo": "cabal",
60+ "rev": "f27667f8ec360c475027dcaee0138c937477b070",
61+ "type": "github"
62+ },
63+ "original": {
64+ "owner": "haskell",
65+ "ref": "3.6",
66+ "repo": "cabal",
67+ "type": "github"
68+ }
69+ },
70+ "cardano-shell": {
71+ "flake": false,
72+ "locked": {
73+ "lastModified": 1608537748,
74+ "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=",
75+ "owner": "input-output-hk",
76+ "repo": "cardano-shell",
77+ "rev": "9392c75087cb9a3d453998f4230930dea3a95725",
78+ "type": "github"
79+ },
80+ "original": {
81+ "owner": "input-output-hk",
82+ "repo": "cardano-shell",
83+ "type": "github"
84+ }
85+ },
86+ "flake-utils": {
87+ "locked": {
88+ "lastModified": 1644229661,
89+ "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
90+ "owner": "numtide",
91+ "repo": "flake-utils",
92+ "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
93+ "type": "github"
94+ },
95+ "original": {
96+ "owner": "numtide",
97+ "repo": "flake-utils",
98+ "type": "github"
99+ }
100+ },
101+ "ghc-8.6.5-iohk": {
102+ "flake": false,
103+ "locked": {
104+ "lastModified": 1600920045,
105+ "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=",
106+ "owner": "input-output-hk",
107+ "repo": "ghc",
108+ "rev": "95713a6ecce4551240da7c96b6176f980af75cae",
109+ "type": "github"
110+ },
111+ "original": {
112+ "owner": "input-output-hk",
113+ "ref": "release/8.6.5-iohk",
114+ "repo": "ghc",
115+ "type": "github"
116+ }
117+ },
118+ "hackage": {
119+ "flake": false,
120+ "locked": {
121+ "lastModified": 1659402819,
122+ "narHash": "sha256-1ghmulyIk+obGnyFeouVHBQXxUHMBmgCIRazLfEoT34=",
123+ "owner": "input-output-hk",
124+ "repo": "hackage.nix",
125+ "rev": "2f6f97ca3db96f91eea674ef46f4a0785d1e9d9c",
126+ "type": "github"
127+ },
128+ "original": {
129+ "owner": "input-output-hk",
130+ "repo": "hackage.nix",
131+ "type": "github"
132+ }
133+ },
134+ "hpc-coveralls": {
135+ "flake": false,
136+ "locked": {
137+ "lastModified": 1607498076,
138+ "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=",
139+ "owner": "sevanspowell",
140+ "repo": "hpc-coveralls",
141+ "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430",
142+ "type": "github"
143+ },
144+ "original": {
145+ "owner": "sevanspowell",
146+ "repo": "hpc-coveralls",
147+ "type": "github"
148+ }
149+ },
150+ "hydra": {
151+ "inputs": {
152+ "nix": "nix",
153+ "nixpkgs": [
154+ "hydra",
155+ "nix",
156+ "nixpkgs"
157+ ]
158+ },
159+ "locked": {
160+ "lastModified": 1646878427,
161+ "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=",
162+ "owner": "NixOS",
163+ "repo": "hydra",
164+ "rev": "28b682b85b7efc5cf7974065792a1f22203a5927",
165+ "type": "github"
166+ },
167+ "original": {
168+ "id": "hydra",
169+ "type": "indirect"
170+ }
171+ },
172+ "lowdown-src": {
173+ "flake": false,
174+ "locked": {
175+ "lastModified": 1633514407,
176+ "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
177+ "owner": "kristapsdz",
178+ "repo": "lowdown",
179+ "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
180+ "type": "github"
181+ },
182+ "original": {
183+ "owner": "kristapsdz",
184+ "repo": "lowdown",
185+ "type": "github"
186+ }
187+ },
188+ "nix": {
189+ "inputs": {
190+ "lowdown-src": "lowdown-src",
191+ "nixpkgs": "nixpkgs",
192+ "nixpkgs-regression": "nixpkgs-regression"
193+ },
194+ "locked": {
195+ "lastModified": 1643066034,
196+ "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=",
197+ "owner": "NixOS",
198+ "repo": "nix",
199+ "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62",
200+ "type": "github"
201+ },
202+ "original": {
203+ "owner": "NixOS",
204+ "ref": "2.6.0",
205+ "repo": "nix",
206+ "type": "github"
207+ }
208+ },
209+ "nix-tools": {
210+ "flake": false,
211+ "locked": {
212+ "lastModified": 1658968505,
213+ "narHash": "sha256-UnbQ/Ig/23e9hUdDOBwYHwHgHmQawZ2uazpJ8DLIJgE=",
214+ "owner": "input-output-hk",
215+ "repo": "nix-tools",
216+ "rev": "8a754bdcf20b20e116409c2341cf69065d083053",
217+ "type": "github"
218+ },
219+ "original": {
220+ "owner": "input-output-hk",
221+ "repo": "nix-tools",
222+ "type": "github"
223+ }
224+ },
225+ "nixpkgs": {
226+ "locked": {
227+ "lastModified": 1632864508,
228+ "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=",
229+ "owner": "NixOS",
230+ "repo": "nixpkgs",
231+ "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234",
232+ "type": "github"
233+ },
234+ "original": {
235+ "id": "nixpkgs",
236+ "ref": "nixos-21.05-small",
237+ "type": "indirect"
238+ }
239+ },
240+ "nixpkgs-2003": {
241+ "locked": {
242+ "lastModified": 1620055814,
243+ "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=",
244+ "owner": "NixOS",
245+ "repo": "nixpkgs",
246+ "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205",
247+ "type": "github"
248+ },
249+ "original": {
250+ "owner": "NixOS",
251+ "ref": "nixpkgs-20.03-darwin",
252+ "repo": "nixpkgs",
253+ "type": "github"
254+ }
255+ },
256+ "nixpkgs-2105": {
257+ "locked": {
258+ "lastModified": 1655034179,
259+ "narHash": "sha256-rf1/7AbzuYDw6+8Xvvf3PtEOygymLBrFsFxvext5ZjI=",
260+ "owner": "NixOS",
261+ "repo": "nixpkgs",
262+ "rev": "046ee4af7a9f016a364f8f78eeaa356ba524ac31",
263+ "type": "github"
264+ },
265+ "original": {
266+ "owner": "NixOS",
267+ "ref": "nixpkgs-21.05-darwin",
268+ "repo": "nixpkgs",
269+ "type": "github"
270+ }
271+ },
272+ "nixpkgs-2111": {
273+ "locked": {
274+ "lastModified": 1656782578,
275+ "narHash": "sha256-1eMCBEqJplPotTo/SZ/t5HU6Sf2I8qKlZi9MX7jv9fw=",
276+ "owner": "NixOS",
277+ "repo": "nixpkgs",
278+ "rev": "573603b7fdb9feb0eb8efc16ee18a015c667ab1b",
279+ "type": "github"
280+ },
281+ "original": {
282+ "owner": "NixOS",
283+ "ref": "nixpkgs-21.11-darwin",
284+ "repo": "nixpkgs",
285+ "type": "github"
286+ }
287+ },
288+ "nixpkgs-2205": {
289+ "locked": {
290+ "lastModified": 1657876628,
291+ "narHash": "sha256-URmf0O2cQ/3heg2DJOeLyU/JmfVMqG4X5t9crQXMaeY=",
292+ "owner": "NixOS",
293+ "repo": "nixpkgs",
294+ "rev": "549d82bdd40f760a438c3c3497c1c61160f3de55",
295+ "type": "github"
296+ },
297+ "original": {
298+ "owner": "NixOS",
299+ "ref": "nixpkgs-22.05-darwin",
300+ "repo": "nixpkgs",
301+ "type": "github"
302+ }
303+ },
304+ "nixpkgs-regression": {
305+ "locked": {
306+ "lastModified": 1643052045,
307+ "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
308+ "owner": "NixOS",
309+ "repo": "nixpkgs",
310+ "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
311+ "type": "github"
312+ },
313+ "original": {
314+ "id": "nixpkgs",
315+ "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
316+ "type": "indirect"
317+ }
318+ },
319+ "nixpkgs-unstable": {
320+ "locked": {
321+ "lastModified": 1657888067,
322+ "narHash": "sha256-GnwJoFBTPfW3+mz7QEeJEEQ9OMHZOiIJ/qDhZxrlKh8=",
323+ "owner": "NixOS",
324+ "repo": "nixpkgs",
325+ "rev": "65fae659e31098ca4ac825a6fef26d890aaf3f4e",
326+ "type": "github"
327+ },
328+ "original": {
329+ "owner": "NixOS",
330+ "ref": "nixpkgs-unstable",
331+ "repo": "nixpkgs",
332+ "type": "github"
333+ }
334+ },
335+ "old-ghc-nix": {
336+ "flake": false,
337+ "locked": {
338+ "lastModified": 1631092763,
339+ "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=",
340+ "owner": "angerman",
341+ "repo": "old-ghc-nix",
342+ "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8",
343+ "type": "github"
344+ },
345+ "original": {
346+ "owner": "angerman",
347+ "ref": "master",
348+ "repo": "old-ghc-nix",
349+ "type": "github"
350+ }
351+ },
352+ "root": {
353+ "inputs": {
354+ "HTTP": "HTTP",
355+ "cabal-32": "cabal-32",
356+ "cabal-34": "cabal-34",
357+ "cabal-36": "cabal-36",
358+ "cardano-shell": "cardano-shell",
359+ "flake-utils": "flake-utils",
360+ "ghc-8.6.5-iohk": "ghc-8.6.5-iohk",
361+ "hackage": "hackage",
362+ "hpc-coveralls": "hpc-coveralls",
363+ "hydra": "hydra",
364+ "nix-tools": "nix-tools",
365+ "nixpkgs": [
366+ "nixpkgs-unstable"
367+ ],
368+ "nixpkgs-2003": "nixpkgs-2003",
369+ "nixpkgs-2105": "nixpkgs-2105",
370+ "nixpkgs-2111": "nixpkgs-2111",
371+ "nixpkgs-2205": "nixpkgs-2205",
372+ "nixpkgs-unstable": "nixpkgs-unstable",
373+ "old-ghc-nix": "old-ghc-nix",
374+ "stackage": "stackage"
375+ }
376+ },
377+ "stackage": {
378+ "flake": false,
379+ "locked": {
380+ "lastModified": 1659402917,
381+ "narHash": "sha256-zRDOtN4A2KmfzmZiqqxOAIw1YVPhnoIaszKKd+qCEcQ=",
382+ "owner": "input-output-hk",
383+ "repo": "stackage.nix",
384+ "rev": "778df3c4b35eac853d57fac7bafc7c9f2dde917f",
385+ "type": "github"
386+ },
387+ "original": {
388+ "owner": "input-output-hk",
389+ "repo": "stackage.nix",
390+ "type": "github"
391+ }
392+ }
393+ },
394+ "root": "root",
395+ "version": 7
396+}
flake.nixnew file+148
@@ -0,0 +1,148 @@
1+{
2+ description = "Alternative Haskell Infrastructure for Nixpkgs";
3+
4+ inputs = {
5+ nixpkgs.follows = "nixpkgs-unstable";
6+ nixpkgs-2003 = { url = "github:NixOS/nixpkgs/nixpkgs-20.03-darwin"; };
7+ nixpkgs-2105 = { url = "github:NixOS/nixpkgs/nixpkgs-21.05-darwin"; };
8+ nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; };
9+ nixpkgs-2205 = { url = "github:NixOS/nixpkgs/nixpkgs-22.05-darwin"; };
10+ nixpkgs-unstable = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; };
11+ flake-utils = { url = "github:numtide/flake-utils"; };
12+ hydra.url = "hydra";
13+ hackage = {
14+ url = "github:input-output-hk/hackage.nix";
15+ flake = false;
16+ };
17+ stackage = {
18+ url = "github:input-output-hk/stackage.nix";
19+ flake = false;
20+ };
21+ cabal-32 = {
22+ url = "github:haskell/cabal/3.2";
23+ flake = false;
24+ };
25+ cabal-34 = {
26+ url = "github:haskell/cabal/3.4";
27+ flake = false;
28+ };
29+ cabal-36 = {
30+ url = "github:haskell/cabal/3.6";
31+ flake = false;
32+ };
33+ cardano-shell = {
34+ url = "github:input-output-hk/cardano-shell";
35+ flake = false;
36+ };
37+ "ghc-8.6.5-iohk" = {
38+ type = "github";
39+ owner = "input-output-hk";
40+ repo = "ghc";
41+ ref = "release/8.6.5-iohk";
42+ flake = false;
43+ };
44+ hpc-coveralls = {
45+ url = "github:sevanspowell/hpc-coveralls";
46+ flake = false;
47+ };
48+ nix-tools = {
49+ url = "github:input-output-hk/nix-tools";
50+ flake = false;
51+ };
52+ old-ghc-nix = {
53+ url = "github:angerman/old-ghc-nix/master";
54+ flake = false;
55+ };
56+ HTTP = {
57+ url = "github:phadej/HTTP";
58+ flake = false;
59+ };
60+ };
61+
62+ outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-2105, nixpkgs-2111, nixpkgs-2205, flake-utils, ... }@inputs:
63+ let compiler = "ghc924";
64+ config = import ./config.nix;
65+ in {
66+ inherit config;
67+ overlay = self.overlays.combined;
68+ overlays = import ./overlays { sources = inputs; };
69+ internal = rec {
70+ nixpkgsArgs = {
71+ inherit config;
72+ overlays = [ self.overlay ];
73+ };
74+
75+ sources = inputs;
76+
77+ overlaysOverrideable = import ./overlays;
78+ # Compatibility with old default.nix
79+ compat = { checkMaterialization ?
80+ false # Allows us to easily switch on materialization checking
81+ , system, sourcesOverride ? { }, ... }@args: rec {
82+ sources = inputs // sourcesOverride;
83+ allOverlays = import ./overlays (args // { inherit sources; });
84+ inherit config;
85+ # We are overriding 'overlays' and 'nixpkgsArgs' from the
86+ # flake outputs so that we can incorporate the args passed
87+ # to the compat layer (e.g. sourcesOverride).
88+ overlays = [ allOverlays.combined ]
89+ ++ (if checkMaterialization == true then
90+ [
91+ (final: prev: {
92+ haskell-nix = prev.haskell-nix // {
93+ checkMaterialization = true;
94+ };
95+ })
96+ ]
97+ else
98+ [ ]);
99+ nixpkgsArgs = {
100+ inherit config overlays;
101+ };
102+ pkgs = import nixpkgs
103+ (nixpkgsArgs // { localSystem = { inherit system; }; });
104+ pkgs-2105 = import nixpkgs-2105
105+ (nixpkgsArgs // { localSystem = { inherit system; }; });
106+ pkgs-2111 = import nixpkgs-2111
107+ (nixpkgsArgs // { localSystem = { inherit system; }; });
108+ pkgs-2205 = import nixpkgs-2205
109+ (nixpkgsArgs // { localSystem = { inherit system; }; });
110+ pkgs-unstable = import nixpkgs-unstable
111+ (nixpkgsArgs // { localSystem = { inherit system; }; });
112+ hix = import ./hix/default.nix { inherit pkgs; };
113+ };
114+ };
115+
116+ # Note: `nix flake check` evaluates outputs for all platforms, and haskell.nix
117+ # uses IFD heavily, you have to have the ability to build for all platforms
118+ # supported by haskell.nix, e.g. with remote builders, in order to check this flake.
119+ # If you want to run the tests for just your platform, run `./test/tests.sh` or
120+ # `nix-build -A checks.$PLATFORM`
121+ } // flake-utils.lib.eachSystem [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ] (system: rec {
122+ legacyPackages = (self.internal.compat { inherit system; }).pkgs;
123+ legacyPackagesUnstable = (self.internal.compat { inherit system; }).pkgs-unstable;
124+
125+ # FIXME: Currently `nix flake check` requires `--impure` because coverage-golden
126+ # (and maybe other tests) import projects that use builtins.currentSystem
127+ checks = builtins.listToAttrs (map (pkg: {
128+ name = pkg.name;
129+ value = pkg;
130+ }) (nixpkgs.lib.collect nixpkgs.lib.isDerivation (import ./test rec {
131+ haskellNix = self.internal.compat { inherit system; };
132+ compiler-nix-name = compiler;
133+ pkgs = haskellNix.pkgs;
134+ })));
135+ # Exposed so that buildkite can check that `allow-import-from-derivation=false` works for core of haskell.nix
136+ roots = legacyPackagesUnstable.haskell-nix.roots compiler;
137+
138+ devShell = with self.legacyPackages.${system};
139+ mkShell {
140+ buildInputs = [
141+ nixUnstable
142+ cabal-install
143+ haskell-nix.compiler.${compiler}
144+ haskell-nix.nix-tools.${compiler}
145+ ];
146+ };
147+ });
148+}
hackage-src.jsonnew file+10
@@ -0,0 +1,10 @@
1+{
2+ "url": "https://github.com/input-output-hk/hackage.nix",
3+ "rev": "9bdefa51c864bbef48a2758b05b4b568f0ded62b",
4+ "date": "2021-08-06T01:11:48+00:00",
5+ "path": "/nix/store/isypgnv4qa5398z6vjc3fi620l4y87c4-hackage.nix-9bdefa5",
6+ "sha256": "0pm3m864wwgf76isjwb8244xh8xykc94b5az6zb1h38q30s9xjji",
7+ "fetchSubmodules": false,
8+ "deepClone": false,
9+ "leaveDotGit": false
10+}
hix/default.nixnew file+43
@@ -0,0 +1,43 @@
1+{ pkgs }:
2+let
3+ args = '' --arg userDefaults "$HOME/.config/hix/hix.conf" --arg src ./.'';
4+ # Use HIX_ROOT to override the version of hix used when developing new hix features.
5+ # See docs/dev/hix.md for details.
6+ hixProject = "\${HIX_ROOT:-${./..}}/hix/project.nix";
7+in pkgs.symlinkJoin {
8+ name = "hix";
9+ paths = [
10+ (pkgs.writeScriptBin "hix-shell" ''
11+ nix-shell ${hixProject} ${args} -A shell "$@"
12+ '')
13+ (pkgs.writeScriptBin "hix-build" ''
14+ nix-build ${hixProject} ${args} "$@"
15+ '')
16+ (pkgs.writeScriptBin "hix-instantiate" ''
17+ nix-instantiate ${hixProject} ${args} "$@"
18+ '')
19+ (pkgs.writeScriptBin "hix-env" ''
20+ nix-env -f ${hixProject} ${args} "$@"
21+ '')
22+ (pkgs.writeScriptBin "hix" ''
23+ cmd=$1
24+ shift
25+ case $cmd in
26+ update)
27+ nix-env -iA hix -f https://github.com/input-output-hk/haskell.nix/tarball/master
28+ ;;
29+ build|dump-path|eval|log|path-info|run|search|show-derivation|sign-paths|verify|why-depends)
30+ nix $cmd -f ${hixProject} ${args} "$@"
31+ ;;
32+ repl)
33+ nix $cmd ${hixProject} ${args} "$@"
34+ ;;
35+ *)
36+ nix $cmd "$@"
37+ ;;
38+ esac
39+ '')
40+ ];
41+} // {
42+ project = import ./project.nix;
43+}
hix/project.nixnew file+77
@@ -0,0 +1,77 @@
1+{ src
2+, userDefaults ? {}
3+, nixpkgs ? null
4+, nixpkgsPin ? null
5+, pkgs ? null
6+, checkMaterialization ? null
7+, compiler-nix-name ? null
8+, shell ? null
9+, ...}@commandArgs:
10+let
11+ inherit ((lib.evalModules {
12+ modules = [
13+ (import ../modules/project-common.nix)
14+ (import ../modules/stack-project.nix)
15+ (import ../modules/cabal-project.nix)
16+ (import ../modules/project.nix)
17+ (import ../modules/hix-project.nix)
18+ projectDefaults
19+ commandArgs'
20+ { _module.args.pkgs = {}; }
21+ ];
22+ }).config) name;
23+ inherit (import ./.. {}) sources;
24+ lib = import (sources.nixpkgs-unstable + "/lib");
25+ commandArgs' =
26+ builtins.listToAttrs (
27+ builtins.concatMap (
28+ name:
29+ if commandArgs.${name} == null || name == "src" || name == "userDefaults" || name == "inNixShell"
30+ then []
31+ else [{ inherit name; value = commandArgs.${name}; }]
32+ ) (builtins.attrNames commandArgs));
33+ defaultArgs = {
34+ nixpkgsPin = "nixpkgs-unstable";
35+ };
36+ importDefaults = src:
37+ if src == null || !(__pathExists src)
38+ then {}
39+ else import src;
40+ userDefaults = importDefaults (commandArgs.userDefaults or null);
41+ projectDefaults = importDefaults (toString (src.origSrcSubDir or src) + "/nix/hix.nix");
42+ inherit ((lib.evalModules {
43+ modules = [
44+ (import ../modules/project-common.nix)
45+ (import ../modules/stack-project.nix)
46+ (import ../modules/cabal-project.nix)
47+ (import ../modules/project.nix)
48+ (import ../modules/hix-project.nix)
49+ userDefaults
50+ projectDefaults
51+ commandArgs'
52+ ({config, pkgs, ...}: {
53+ haskellNix = import ./.. { inherit checkMaterialization; };
54+ nixpkgsPin = "nixpkgs-unstable";
55+ nixpkgs = config.haskellNix.sources.${config.nixpkgsPin};
56+ nixpkgsArgs = config.haskellNix.nixpkgsArgs // {
57+ overlays = config.haskellNix.nixpkgsArgs.overlays ++ config.overlays;
58+ };
59+ _module.args.pkgs = import config.nixpkgs config.nixpkgsArgs;
60+ project = pkgs.haskell-nix.project [
61+ (import ../modules/hix-project.nix)
62+ userDefaults
63+ projectDefaults
64+ commandArgs'
65+ ({config, ...}: {
66+ src =
67+ if __pathExists (toString (src.origSrcSubDir or src) + "/.git")
68+ then config.evalPackages.haskell-nix.haskellLib.cleanGit {
69+ inherit src name;
70+ }
71+ else src;
72+ })
73+ ];
74+ })
75+ ];
76+ }).config) project shell;
77+in project
lib/cabal-licenses.nixnew file+21
@@ -0,0 +1,21 @@
1+pkgs:
2+let licenses = import spdx/licenses.nix pkgs;
3+in licenses // {
4+ # Generic
5+ LicenseRef-PublicDomain = {
6+ spdxId = "LicenseRef-PublicDomain";
7+ shortName = "Public Domain";
8+ fullName = "This work is dedicated to the Public Domain";
9+ url = "https://wikipedia.org/wiki/Public_domain";
10+ free = true;
11+ };
12+ LicenseRef-OtherLicense = {
13+ spdxId = "LicenseRef-OtherLicense";
14+ shortName = "Other License";
15+ fullName = "Unidentified Other License";
16+ url = "https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/";
17+ # Not setting `free` here. The license may or may not be `free`.
18+ # See https://github.com/input-output-hk/haskell.nix/pull/1006
19+ };
20+ NONE = null;
21+}
compat/cabal-os-arch-comp.nix → lib/cabal-os-arch-comp.nixrenamed+3−2
@@ -20,12 +20,13 @@
20 isLinux = false;
20 isLinux = false;
21 isWindows = false;
21 isWindows = false;
22 isOsx = false;
22 isOsx = false;
23+ isIos = false;
23 isFreebsd = false;
24 isFreebsd = false;
24 isOpenbsd = false;
25 isOpenbsd = false;
25 isNetbsd = false;
26 isNetbsd = false;
26 isDragonFly = false;
27 isDragonFly = false;
27 isSolaris = false;
28 isSolaris = false;
28− isAIX = false;
29+ isAix = false;
29 isHPUX = false;
30 isHPUX = false;
30 isIRIX = false;
31 isIRIX = false;
31 isHalvm = false;
32 isHalvm = false;
@@ -42,7 +43,7 @@
42 isPPC64 = false;
43 isPPC64 = false;
43 isSparc = false;
44 isSparc = false;
44 isArm = false;
45 isArm = false;
45− isAArch64= false;
46+ isAarch64= false;
46 isMips = false;
47 isMips = false;
47 isSH = false;
48 isSH = false;
48 isIA64 = false;
49 isIA64 = false;
lib/cabal-project-parser.nixnew file+213
@@ -0,0 +1,213 @@
1+{ pkgs }:
2+let
3+ span = pred: list:
4+ let n = pkgs.lib.lists.foldr (x: acc: if pred x then acc + 1 else 0) 0 list;
5+ in { fst = pkgs.lib.lists.take n list; snd = pkgs.lib.lists.drop n list; };
6+
7+ # Look for a index-state: field in the cabal.project file
8+ parseIndexState = rawCabalProject:
9+ let
10+ indexState = pkgs.lib.lists.concatLists (
11+ pkgs.lib.lists.filter (l: l != null)
12+ (builtins.map (l: builtins.match "^index-state: *(.*)" l)
13+ (pkgs.lib.splitString "\n" rawCabalProject)));
14+ in
15+ pkgs.lib.lists.head (indexState ++ [ null ]);
16+
17+ # Remove the indentation of the first line from all the lines
18+ unindent = blockLines: (pkgs.lib.foldl' ({matchString, out}: s:
19+ let
20+ m = builtins.match matchString s;
21+ in
22+ if m != null
23+ then {
24+ matchString = "(${builtins.head m})(.*)";
25+ out = out ++ [(builtins.elemAt m 1)];
26+ }
27+ else {
28+ inherit matchString out;
29+ }
30+ ) { matchString = "( *)(.*)"; out = []; } blockLines).out;
31+
32+ # Strip comments except `--sha256`
33+ stripComments = blockLines: pkgs.lib.filter (s: s != "") (
34+ pkgs.lib.foldl' (out: s:
35+ let
36+ m = builtins.match "(.*)--.*" s;
37+ in
38+ if !(pkgs.lib.hasPrefix "--sha256" s) && m != null
39+ then out ++ [(builtins.head m)]
40+ else out ++ [s]
41+ ) [] blockLines
42+ );
43+
44+ # Parse lines of a source-repository-package block
45+ parseBlockLines = blockLines: (pkgs.lib.foldl' ({name, attrs}: s:
46+ let
47+ # Look for a new attribute name
48+ pair = builtins.match "([^ :]*): *(.*)" s;
49+
50+ # Function to build the next parse state when the attribute name is known
51+ nextState = name: value: {
52+ inherit name;
53+ # Support multi line attributes by appending the value to the named attribute
54+ attrs = attrs // {
55+ ${name} =
56+ if attrs ? ${name}
57+ then attrs.${name} + " " + value
58+ else value;
59+ };
60+ };
61+ in
62+ if pair != null
63+ then
64+ # First line of a new attribute
65+ nextState (builtins.head pair) (builtins.elemAt pair 1)
66+ else
67+ if name != null
68+ then nextState name s # Append another line to the current attribute
69+ else __trace "Expected attribute but found `${s}`" { inherit name attrs; }
70+ ) { name = null; attrs = {}; } (stripComments (unindent blockLines))).attrs;
71+
72+ # Gets data for all the repositories to fetch
73+ # A comment like
74+ # --shar256: 003lm3pm0000hbfmii7xcdd9v20000flxf7gdl2pyxia7p014i8z
75+ # will be trated like a field and returned here
76+ # (used in call-cabal-project-to-nix.nix to create a fixed-output derivation)
77+ extractSourceRepoPackageData = cabalProjectFileName: sha256map: repo: {
78+ url = repo.location;
79+ ref = repo.tag;
80+ sha256 = repo."--sha256" or (
81+ if sha256map != null
82+ then sha256map."${repo.location}"."${repo.tag}"
83+ else null);
84+ subdirs = if repo ? subdir
85+ then pkgs.lib.filter (x: x != "") (pkgs.lib.splitString " " repo.subdir)
86+ else ["."];
87+ };
88+
89+ # Parse a source-repository-package and return data of `type: git` repositories
90+ # See tests/unit.nix for examples of input and output.
91+ parseSourceRepositoryPackageBlock = cabalProjectFileName: sha256map: block:
92+ let
93+ x = span (pkgs.lib.strings.hasPrefix " ") (pkgs.lib.splitString "\n" block);
94+ attrs = parseBlockLines x.fst;
95+ in
96+ if attrs."type" or "" != "git"
97+ then {
98+ sourceRepo = [];
99+ otherText = "\nsource-repository-package\n" + block;
100+ }
101+ else {
102+ sourceRepo = extractSourceRepoPackageData cabalProjectFileName sha256map attrs;
103+ otherText = pkgs.lib.strings.concatStringsSep "\n" x.snd;
104+ };
105+
106+ parseSourceRepositoryPackages = cabalProjectFileName: sha256map: source-repo-override: projectFile:
107+ let
108+ blocks = pkgs.lib.splitString "\nsource-repository-package\n" ("\n" + projectFile);
109+ initialText = pkgs.lib.lists.take 1 blocks;
110+ repoBlocks = builtins.map (parseSourceRepositoryPackageBlock cabalProjectFileName sha256map) (pkgs.lib.lists.drop 1 blocks);
111+ overrideSourceRepo = sourceRepo: (source-repo-override.${sourceRepo.url} or (pkgs.lib.id)) sourceRepo;
112+ in {
113+ sourceRepos = pkgs.lib.lists.map (block: overrideSourceRepo block.sourceRepo) repoBlocks;
114+ otherText = pkgs.lib.strings.concatStringsSep "\n" (
115+ initialText
116+ ++ (builtins.map (x: x.otherText) repoBlocks));
117+ };
118+
119+ # Parse and replace repository
120+ # This works in a similar way to the `source-repository-package` but we are
121+ # able to simply replace the `repository` blocks with local `file:/nix/store` ones.
122+ # This works because `cabal configure` does not include any of the `/nix/sore/`
123+ # paths in the `plan.json` (so materialized plan-nix will still work as expeced).
124+ # See tests/unit.nix for examples of input and output.
125+ parseRepositoryBlock = evalPackages: cabalProjectFileName: sha256map: inputMap: cabal-install: nix-tools: block:
126+ let
127+ lines = pkgs.lib.splitString "\n" block;
128+ # The first line will contain the repository name.
129+ x = span (pkgs.lib.strings.hasPrefix " ") (__tail lines);
130+ attrs = parseBlockLines x.fst;
131+ sha256 = attrs."--sha256" or (
132+ if sha256map != null
133+ then sha256map."${attrs.url}"
134+ else null);
135+ in rec {
136+ # This is `some-name` from the `repository some-name` line in the `cabal.project` file.
137+ name = __head lines;
138+ # The $HOME/.cabal/packages/${name} after running `cabal v2-update` to download the repository
139+ repoContents = if inputMap ? ${attrs.url}
140+ # If there is an input use it to make `file:` url and create a suitable `.cabal/packages/${name}` directory
141+ then evalPackages.runCommand name ({
142+ nativeBuildInputs = [ cabal-install ];
143+ preferLocalBuild = true;
144+ }) ''
145+ HOME=$(mktemp -d)
146+ mkdir -p $HOME/.cabal/packages/${name}
147+ cat <<EOF > $HOME/.cabal/config
148+ repository ${name}
149+ url: file:${inputMap.${attrs.url}}
150+ ${pkgs.lib.optionalString (attrs ? secure) "secure: ${attrs.secure}"}
151+ ${pkgs.lib.optionalString (attrs ? root-keys) "root-keys: ${attrs.root-keys}"}
152+ ${pkgs.lib.optionalString (attrs ? key-threshold) "key-threshold: ${attrs.key-threshold}"}
153+ EOF
154+
155+ cabal v2-update ${name}
156+ cp -r $HOME/.cabal/packages/${name} $out
157+ ''
158+ else evalPackages.runCommand name ({
159+ nativeBuildInputs = [ cabal-install evalPackages.curl nix-tools ];
160+ LOCALE_ARCHIVE = pkgs.lib.optionalString (evalPackages.stdenv.buildPlatform.libc == "glibc") "${evalPackages.glibcLocales}/lib/locale/locale-archive";
161+ LANG = "en_US.UTF-8";
162+ preferLocalBuild = true;
163+ } // pkgs.lib.optionalAttrs (sha256 != null) {
164+ outputHashMode = "recursive";
165+ outputHashAlgo = "sha256";
166+ outputHash = sha256;
167+ }) ''
168+ HOME=$(mktemp -d)
169+ mkdir -p $HOME/.cabal/packages/${name}
170+ cat <<EOF > $HOME/.cabal/config
171+ repository ${name}
172+ url: ${attrs.url}
173+ ${pkgs.lib.optionalString (attrs ? secure) "secure: ${attrs.secure}"}
174+ ${pkgs.lib.optionalString (attrs ? root-keys) "root-keys: ${attrs.root-keys}"}
175+ ${pkgs.lib.optionalString (attrs ? key-threshold) "key-threshold: ${attrs.key-threshold}"}
176+ EOF
177+
178+ export SSL_CERT_FILE=${evalPackages.cacert}/etc/ssl/certs/ca-bundle.crt
179+ cabal v2-update ${name}
180+ cp -r $HOME/.cabal/packages/${name} $out
181+ '';
182+ # Output of hackage-to-nix
183+ hackage = import (
184+ evalPackages.runCommand ("hackage-to-nix-" + name) {
185+ nativeBuildInputs = [ cabal-install evalPackages.curl nix-tools ];
186+ LOCALE_ARCHIVE = pkgs.lib.optionalString (evalPackages.stdenv.buildPlatform.libc == "glibc") "${evalPackages.glibcLocales}/lib/locale/locale-archive";
187+ LANG = "en_US.UTF-8";
188+ preferLocalBuild = true;
189+ } ''
190+ mkdir -p $out
191+ hackage-to-nix $out ${repoContents}/01-index.tar ${attrs.url}
192+ '');
193+ # Directory to `lndir` when constructing a suitable $HOME/.cabal dir
194+ repo = {
195+ ${name} = repoContents;
196+ };
197+ };
198+
199+ parseRepositories = evalPackages: cabalProjectFileName: sha256map: inputMap: cabal-install: nix-tools: projectFile:
200+ let
201+ # This will leave the name of repository in the first line of each block
202+ blocks = pkgs.lib.splitString "\nrepository " ("\n" + projectFile);
203+ repoBlocks = builtins.map (parseRepositoryBlock evalPackages cabalProjectFileName sha256map inputMap cabal-install nix-tools) (pkgs.lib.lists.drop 1 blocks);
204+ in {
205+ extra-hackages = pkgs.lib.lists.map (block: block.hackage) repoBlocks;
206+ repos = pkgs.lib.lists.foldl' (x: block: x // block.repo) {} repoBlocks;
207+ };
208+
209+in {
210+ inherit parseIndexState parseSourceRepositoryPackages parseRepositories
211+ # These are only exposed for tests
212+ parseSourceRepositoryPackageBlock parseRepositoryBlock;
213+}
lib/call-cabal-project-to-nix.nixnew file+632
@@ -0,0 +1,632 @@
1+{ pkgs, runCommand, cacert, index-state-hashes, haskellLib }@defaults:
2+let readIfExists = src: fileName:
3+ let origSrcDir = src.origSrcSubDir or src;
4+ in
5+ if builtins.elem ((__readDir origSrcDir)."${fileName}" or "") ["regular" "symlink"]
6+ then __readFile (origSrcDir + "/${fileName}")
7+ else null;
8+in
9+{ name ? src.name or null # optional name for better error messages
10+, src
11+, compiler-nix-name # The name of the ghc compiler to use eg. "ghc884"
12+, index-state ? null # Hackage index-state, eg. "2019-10-10T00:00:00Z"
13+, index-sha256 ? null # The hash of the truncated hackage index-state
14+, plan-sha256 ? null # The hash of the plan-to-nix output (makes the plan-to-nix step a fixed output derivation)
15+, materialized ? null # Location of a materialized copy of the nix files
16+, checkMaterialization ? null # If true the nix files will be generated used to check plan-sha256 and material
17+, cabalProjectFileName ? "cabal.project"
18+, cabalProject ? readIfExists src cabalProjectFileName
19+, cabalProjectLocal ? readIfExists src "${cabalProjectFileName}.local"
20+, cabalProjectFreeze ? readIfExists src "${cabalProjectFileName}.freeze"
21+, caller ? "callCabalProjectToNix" # Name of the calling function for better warning messages
22+, ghc ? null # Deprecated in favour of `compiler-nix-name`
23+, ghcOverride ? null # Used when we need to set ghc explicitly during bootstrapping
24+, configureArgs ? "" # Extra arguments to pass to `cabal v2-configure`.
25+ # `--enable-tests --enable-benchmarks` are included by default.
26+ # If the tests and benchmarks are not needed and they
27+ # cause the wrong plan to be chosen, then we can use
28+ # `configureArgs = "--disable-tests --disable-benchmarks";`
29+, sha256map ? null
30+ # An alternative to adding `--sha256` comments into the
31+ # cabal.project file:
32+ # sha256map =
33+ # { # For a `source-repository-package` use the `location` and `tag` as the key
34+ # "https://github.com/jgm/pandoc-citeproc"."0.17"
35+ # = "0dxx8cp2xndpw3jwiawch2dkrkp15mil7pyx7dvd810pwc22pm2q";
36+ # # For a `repository` use the `url` as the key
37+ # "https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/bfc363b9f879c360e0a0460ec0c18ec87222ec32"
38+ # = "sha256-g9xGgJqYmiczjxjQ5JOiK5KUUps+9+nlNGI/0SpSOpg=";
39+ # };
40+, inputMap ? {}
41+ # An alternative to providing a `sha256` handy for flakes
42+ # cabal.project file:
43+ # inputs.pandoc-citeproc.url = "github:jgm/pandoc-citeproc/0.17";
44+ # inputs.pandoc-citeproc.flake = false;
45+ # outputs = inputs:
46+ # ...
47+ # inputMap."https://github.com/jgm/pandoc-citeproc" = inputs.inputs.pandoc-citeproc;
48+, extra-hackage-tarballs ? {}
49+, source-repo-override ? {} # Cabal seems to behave incoherently when
50+ # two source-repository-package entries
51+ # provide the same packages, making it
52+ # impossible to override cabal.project
53+ # with e.g. a cabal.project.local. In CI,
54+ # we want to be able to test against the
55+ # latest versions of various dependencies.
56+ #
57+ # This argument is a map from url to
58+ # a function taking the existing repoData
59+ # and returning the new repoData in its
60+ # place. E.g.
61+ #
62+ # { "https://github.com/input-output-hk/plutus-apps" = orig: orig // { subdirs = (orig.subdirs or [ "." ]) ++ [ "foo" ]; }; }
63+ #
64+ # would result in the "foo" subdirectory of
65+ # any plutus-apps input being used for a
66+ # package.
67+, evalPackages
68+, ...
69+}@args:
70+
71+let
72+ inherit (evalPackages.haskell-nix) materialize dotCabal;
73+
74+ # These defaults are hear rather than in modules/cabal-project.nix to make them
75+ # lazy enough to avoid infinite recursion issues.
76+ # Using null as the default also improves performance as they are not forced by the
77+ # nix module system for `nix-tools-unchecked` and `cabal-install-unchecked`.
78+ nix-tools = if args.nix-tools or null != null
79+ then args.nix-tools
80+ else evalPackages.haskell-nix.nix-tools-unchecked.${compiler-nix-name};
81+ cabal-install = if args.cabal-install or null != null
82+ then args.cabal-install
83+ else evalPackages.haskell-nix.cabal-install-unchecked.${compiler-nix-name};
84+ forName = pkgs.lib.optionalString (name != null) (" for " + name);
85+ nameAndSuffix = suffix: if name == null then suffix else name + "-" + suffix;
86+
87+ ghc' =
88+ if ghcOverride != null
89+ then ghcOverride
90+ else
91+ if ghc != null
92+ then __trace ("WARNING: A `ghc` argument was passed" + forName
93+ + " this has been deprecated in favour of `compiler-nix-name`. "
94+ + "Using `ghc` will break cross compilation setups, as haskell.nix cannot "
95+ + "pick the correct `ghc` package from the respective buildPackages. "
96+ + "For example, use `compiler-nix-name = \"ghc865\";` for GHC 8.6.5.") ghc
97+ else
98+ # Do note that `pkgs = final.buildPackages` in the `overlays/haskell.nix`
99+ # call to this file. And thus `pkgs` here is the proper `buildPackages`
100+ # set and we do not need, nor should pick the compiler from another level
101+ # of `buildPackages`, lest we want to get confusing errors about the Win32
102+ # package.
103+ #
104+ # > The option `packages.Win32.package.identifier.name' is used but not defined.
105+ #
106+ pkgs.haskell-nix.compiler."${compiler-nix-name}";
107+
108+in
109+ assert (if ghc'.isHaskellNixCompiler or false then true
110+ else throw ("It is likely you used `haskell.compiler.X` instead of `haskell-nix.compiler.X`"
111+ + forName));
112+
113+let
114+ ghc = ghc';
115+ subDir' = src.origSubDir or "";
116+ subDir = pkgs.lib.strings.removePrefix "/" subDir';
117+
118+ cleanedSource = haskellLib.cleanSourceWith {
119+ name = if name != null then "${name}-root-cabal-files" else "source-root-cabal-files";
120+ src = src.origSrc or src;
121+ filter = path: type: (!(src ? filter) || src.filter path type) && (
122+ type == "directory" ||
123+ pkgs.lib.any (i: (pkgs.lib.hasSuffix i path)) [ ".cabal" "package.yaml" ]); };
124+
125+ # Using origSrcSubDir bypasses any cleanSourceWith so that it will work when
126+ # access to the store is restricted. If origSrc was already in the store
127+ # you can pass the project in as a string.
128+ rawCabalProject =
129+ if cabalProject != null
130+ then cabalProject + (
131+ if cabalProjectLocal != null
132+ then ''
133+
134+ -- Added from cabalProjectLocal argument to cabalProject
135+ ${cabalProjectLocal}
136+ ''
137+ else ""
138+ )
139+ else null;
140+
141+ cabalProjectIndexState =
142+ if rawCabalProject != null
143+ then pkgs.haskell-nix.haskellLib.parseIndexState rawCabalProject
144+ else null;
145+
146+ index-state-found =
147+ if index-state != null
148+ then index-state
149+ else if cabalProjectIndexState != null
150+ then cabalProjectIndexState
151+ else
152+ let latest-index-state = pkgs.lib.last (builtins.attrNames index-state-hashes);
153+ in builtins.trace ("No index state specified" + (if name == null then "" else " for " + name) + ", using the latest index state that we know about (${latest-index-state})!") latest-index-state;
154+
155+ index-state-pinned = index-state != null || cabalProjectIndexState != null;
156+
157+in
158+ assert (if index-state-found == null
159+ then throw "No index state passed and none found in ${cabalProjectFileName}" else true);
160+
161+ assert (if index-sha256 == null && !(pkgs.lib.hasSuffix "Z" index-state-found)
162+ then throw "Index state found was ${index-state-found} and no `index-sha256` was provided. "
163+ "The index hash lookup code requires zulu time zone (ends in a Z)" else true);
164+
165+let
166+ # If a hash was not specified find a suitable cached index state to
167+ # use that will contain all the packages we need. By using the
168+ # first one after the desired index-state we can avoid recalculating
169+ # when new index-state-hashes are added.
170+ # See https://github.com/input-output-hk/haskell.nix/issues/672
171+ cached-index-state = if index-sha256 != null
172+ then index-state-found
173+ else
174+ let
175+ suitable-index-states =
176+ builtins.filter
177+ (s: s >= index-state-found) # This compare is why we need zulu time
178+ (builtins.attrNames index-state-hashes);
179+ in
180+ if builtins.length suitable-index-states == 0
181+ then index-state-found
182+ else pkgs.lib.head suitable-index-states;
183+
184+ # Lookup hash for the index state we found
185+ index-sha256-found = if index-sha256 != null
186+ then index-sha256
187+ else index-state-hashes.${cached-index-state} or null;
188+
189+in
190+ assert (if index-sha256-found == null
191+ then throw "Unknown index-state ${index-state-found}, the latest index-state I know about is ${pkgs.lib.last (builtins.attrNames index-state-hashes)}. You may need to update to a newer hackage.nix." else true);
192+
193+let
194+ # Deal with source-repository-packages in a way that will work in
195+ # restricted-eval mode (as long as a sha256 is included).
196+ # Replace source-repository-package blocks that have a sha256 with
197+ # packages: block containing nix store paths of the fetched repos.
198+
199+ hashPath = path:
200+ builtins.readFile (pkgs.runCommand "hash-path" { preferLocalBuild = true; }
201+ "echo -n $(${pkgs.nix}/bin/nix-hash --type sha256 --base32 ${path}) > $out");
202+
203+ replaceSourceRepos = projectFile:
204+ let
205+ fetchPackageRepo = fetchgit: repoData:
206+ let
207+ fetched =
208+ if inputMap ? "${repoData.url}/${repoData.ref}"
209+ then inputMap."${repoData.url}/${repoData.ref}"
210+ else if inputMap ? ${repoData.url}
211+ then
212+ (if inputMap.${repoData.url}.rev != repoData.ref
213+ then throw "${inputMap.${repoData.url}.rev} may not match ${repoData.ref} for ${repoData.url} use \"${repoData.url}/${repoData.ref}\" as the inputMap key if ${repoData.ref} is a branch or tag that points to ${inputMap.${repoData.url}.rev}."
214+ else inputMap.${repoData.url})
215+ else if repoData.sha256 != null
216+ then fetchgit { inherit (repoData) url sha256; rev = repoData.ref; }
217+ else
218+ let drv = builtins.fetchGit { inherit (repoData) url ref; };
219+ in __trace "WARNING: No sha256 found for source-repository-package ${repoData.url} ${repoData.ref} download may fail in restricted mode (hydra)"
220+ (__trace "Consider adding `--sha256: ${hashPath drv}` to the ${cabalProjectFileName} file or passing in a sha256map argument"
221+ drv);
222+ in {
223+ # Download the source-repository-package commit and add it to a minimal git
224+ # repository that `cabal` will be able to access from a non fixed output derivation.
225+ location = evalPackages.runCommand "source-repository-package" {
226+ nativeBuildInputs = [ evalPackages.rsync evalPackages.gitMinimal ];
227+ } ''
228+ mkdir $out
229+ rsync -a --prune-empty-dirs "${fetched}/" "$out/"
230+ cd $out
231+ chmod -R +w .
232+ git init -b minimal
233+ git add --force .
234+ GIT_COMMITTER_NAME='No One' GIT_COMMITTER_EMAIL= git commit -m "Minimal Repo For Haskell.Nix" --author 'No One <>'
235+ '';
236+ inherit (repoData) subdirs;
237+ inherit fetched;
238+ tag = "minimal";
239+ };
240+
241+ # Parse the `source-repository-package` blocks
242+ sourceRepoPackageResult = pkgs.haskell-nix.haskellLib.parseSourceRepositoryPackages
243+ cabalProjectFileName sha256map source-repo-override projectFile;
244+
245+ # Parse the `repository` blocks
246+ repoResult = pkgs.haskell-nix.haskellLib.parseRepositories
247+ evalPackages cabalProjectFileName sha256map inputMap cabal-install nix-tools sourceRepoPackageResult.otherText;
248+
249+ # we need the repository content twice:
250+ # * at eval time (below to build the fixed project file)
251+ # Here we want to use evalPackages.fetchgit, so one can calculate
252+ # the build plan for any target without a remote builder
253+ # * at built time (passed out)
254+ # Here we want to use plain pkgs.fetchgit, which is what a builder
255+ # on the target system would use, so that the derivation is unaffected
256+ # and, say, a linux release build job can identify the derivation
257+ # as built by a darwin builder, and fetch it from a cache
258+ sourceReposEval = builtins.map (fetchPackageRepo evalPackages.fetchgit) sourceRepoPackageResult.sourceRepos;
259+ sourceReposBuild = builtins.map (x: (fetchPackageRepo pkgs.fetchgit x).fetched) sourceRepoPackageResult.sourceRepos;
260+ in {
261+ sourceRepos = sourceReposBuild;
262+ inherit (repoResult) repos extra-hackages;
263+ makeFixedProjectFile = ''
264+ cp -f ${evalPackages.writeText "cabal.project" sourceRepoPackageResult.otherText} ./cabal.project
265+ '' +
266+ pkgs.lib.optionalString (builtins.length sourceReposEval != 0) (''
267+ chmod +w -R ./cabal.project
268+ # The newline here is important in case cabal.project does not have one at the end
269+ echo >> ./cabal.project
270+ '' +
271+ # Add replacement `source-repository-package` blocks pointing to the minimal git repos
272+ ( pkgs.lib.strings.concatMapStrings (f: ''
273+ echo "source-repository-package" >> ./cabal.project
274+ echo " type: git" >> ./cabal.project
275+ echo " location: file://${f.location}" >> ./cabal.project
276+ echo " subdir: ${builtins.concatStringsSep " " f.subdirs}" >> ./cabal.project
277+ echo " tag: ${f.tag}" >> ./cabal.project
278+ '') sourceReposEval
279+ ));
280+ # This will be used to replace refernces to the minimal git repos with just the index
281+ # of the repo. The index will be used in lib/import-and-filter-project.nix to
282+ # lookup the correct repository in `sourceReposBuild`. This avoids having
283+ # `/nix/store` paths in the `plan-nix` output so that it can be materialized safely.
284+ replaceLocations = pkgs.lib.strings.concatStrings (
285+ pkgs.lib.lists.zipListsWith (n: f: ''
286+ (cd $out${subDir'}
287+ substituteInPlace $tmp${subDir'}/dist-newstyle/cache/plan.json --replace file://${f.location} ${builtins.toString n}
288+ for a in $(grep -rl file://${f.location} .plan.nix/*.nix); do
289+ substituteInPlace $a --replace file://${f.location} ${builtins.toString n}
290+ done)
291+ '')
292+ (pkgs.lib.lists.range 0 ((builtins.length sourceReposEval) - 1))
293+ sourceReposEval
294+ );
295+ };
296+
297+ fixedProject =
298+ if rawCabalProject == null
299+ then { sourceRepos = []; repos = {}; extra-hackages = []; makeFixedProjectFile = ""; replaceLocations = ""; }
300+ else replaceSourceRepos rawCabalProject;
301+
302+ # The use of the actual GHC can cause significant problems:
303+ # * For hydra to assemble a list of jobs from `components.tests` it must
304+ # first have GHC that will be used. If a patch has been applied to the
305+ # GHC to be used it must be rebuilt before the list of jobs can be assembled.
306+ # If a lot of different GHCs are being tests that can be a lot of work all
307+ # happening in the eval stage where little feedback is available.
308+ # * Once the jobs are running the compilation of the GHC needed (the eval
309+ # stage already must have done it, but the outputs there are apparently
310+ # not added to the cache) happens inside the IFD part of cabalProject.
311+ # This causes a very large amount of work to be done in the IFD and our
312+ # understanding is that this can cause problems on nix and/or hydra.
313+ # * When using cabalProject we cannot examine the properties of the project without
314+ # building or downloading the GHC (less of an issue as we would normally need
315+ # it soon anyway).
316+ #
317+ # The solution here is to capture the GHC outputs that `cabal v2-configure`
318+ # requests and materialize it so that the real GHC is only needed
319+ # when `checkMaterialization` is set.
320+ dummy-ghc-data =
321+ let
322+ materialized = ../materialized/dummy-ghc + "/${ghc.targetPrefix}${ghc.name}-${pkgs.stdenv.buildPlatform.system}";
323+ in pkgs.haskell-nix.materialize ({
324+ sha256 = null;
325+ sha256Arg = "sha256";
326+ materialized = if __pathExists materialized
327+ then materialized
328+ else __trace ("WARNING: No materialized dummy-ghc-data for "
329+ + "${ghc.targetPrefix}${ghc.name}-${pkgs.stdenv.buildPlatform.system}.")
330+ null;
331+ reasonNotSafe = null;
332+ } // pkgs.lib.optionalAttrs (checkMaterialization != null) {
333+ inherit checkMaterialization;
334+ }) (
335+ runCommand ("dummy-data-" + ghc.name) {
336+ nativeBuildInputs = [ ghc ];
337+ } ''
338+ mkdir -p $out/ghc
339+ mkdir -p $out/ghc-pkg
340+ ${ghc.targetPrefix}ghc --version > $out/ghc/version
341+ ${ghc.targetPrefix}ghc --numeric-version > $out/ghc/numeric-version
342+ ${ghc.targetPrefix}ghc --info | grep -v /nix/store > $out/ghc/info
343+ ${ghc.targetPrefix}ghc --supported-languages > $out/ghc/supported-languages
344+ ${ghc.targetPrefix}ghc-pkg --version > $out/ghc-pkg/version
345+ ${pkgs.lib.optionalString (ghc.targetPrefix == "js-unknown-ghcjs-") ''
346+ ${ghc.targetPrefix}ghc --numeric-ghc-version > $out/ghc/numeric-ghc-version
347+ ${ghc.targetPrefix}ghc --numeric-ghcjs-version > $out/ghc/numeric-ghcjs-version
348+ ${ghc.targetPrefix}ghc-pkg --numeric-ghcjs-version > $out/ghc-pkg/numeric-ghcjs-version
349+ ''}
350+ # The order of the `ghc-pkg dump` output seems to be non
351+ # deterministic so we need to sort it so that it is always
352+ # the same.
353+ # Sort the output by spliting it on the --- separator line,
354+ # sorting it, adding the --- separators back and removing the
355+ # last line (the trailing ---)
356+ ${ghc.targetPrefix}ghc-pkg dump --global -v0 \
357+ | grep -v /nix/store \
358+ | grep -v '^abi:' \
359+ | tr '\n' '\r' \
360+ | sed -e 's/\r\r*/\r/g' \
361+ | sed -e 's/\r$//g' \
362+ | sed -e 's/\r---\r/\n/g' \
363+ | sort \
364+ | sed -e 's/$/\r---/g' \
365+ | tr '\r' '\n' \
366+ | sed -e '$ d' \
367+ > $out/ghc-pkg/dump-global
368+ '');
369+
370+ # Dummy `ghc` that uses the captured output
371+ dummy-ghc = evalPackages.writeTextFile {
372+ name = "dummy-" + ghc.name;
373+ executable = true;
374+ destination = "/bin/${ghc.targetPrefix}ghc";
375+ text = ''
376+ #!${evalPackages.runtimeShell}
377+ case "$*" in
378+ --version*)
379+ cat ${dummy-ghc-data}/ghc/version
380+ ;;
381+ --numeric-version*)
382+ cat ${dummy-ghc-data}/ghc/numeric-version
383+ ;;
384+ ${pkgs.lib.optionalString (ghc.targetPrefix == "js-unknown-ghcjs-") ''
385+ --numeric-ghc-version*)
386+ cat ${dummy-ghc-data}/ghc/numeric-ghc-version
387+ ;;
388+ --numeric-ghcjs-version*)
389+ cat ${dummy-ghc-data}/ghc/numeric-ghcjs-version
390+ ;;
391+ ''}
392+ --supported-languages*)
393+ cat ${dummy-ghc-data}/ghc/supported-languages
394+ ;;
395+ --print-global-package-db*)
396+ echo "$out/dumby-db"
397+ ;;
398+ --info*)
399+ cat ${dummy-ghc-data}/ghc/info
400+ ;;
401+ --print-libdir*)
402+ echo ${dummy-ghc-data}/ghc/libdir
403+ ;;
404+ *)
405+ echo "Unknown argument '$*'" >&2
406+ exit 1
407+ ;;
408+ esac
409+ exit 0
410+ '';
411+ };
412+
413+ # Dummy `ghc-pkg` that uses the captured output
414+ dummy-ghc-pkg = evalPackages.writeTextFile {
415+ name = "dummy-pkg-" + ghc.name;
416+ executable = true;
417+ destination = "/bin/${ghc.targetPrefix}ghc-pkg";
418+ text = ''
419+ #!${evalPackages.runtimeShell}
420+ case "$*" in
421+ --version)
422+ cat ${dummy-ghc-data}/ghc-pkg/version
423+ ;;
424+ ${pkgs.lib.optionalString (ghc.targetPrefix == "js-unknown-ghcjs-") ''
425+ --numeric-ghcjs-version)
426+ cat ${dummy-ghc-data}/ghc-pkg/numeric-ghcjs-version
427+ ;;
428+ ''}
429+ 'dump --global -v0')
430+ cat ${dummy-ghc-data}/ghc-pkg/dump-global
431+ ;;
432+ *)
433+ echo "Unknown argument '$*'. " >&2
434+ echo "Additional ghc-pkg-options are not currently supported." >&2
435+ echo "See https://github.com/input-output-hk/haskell.nix/pull/658" >&2
436+ exit 1
437+ ;;
438+ esac
439+ exit 0
440+ '';
441+ };
442+
443+ plan-nix = materialize ({
444+ inherit materialized;
445+ sha256 = plan-sha256;
446+ sha256Arg = "plan-sha256";
447+ this = "project.plan-nix" + (if name != null then " for ${name}" else "");
448+ # Before pinning stuff down we need an index state to use
449+ reasonNotSafe =
450+ if !index-state-pinned
451+ then "index-state is not pinned by an argument or the cabal project file"
452+ else null;
453+ } // pkgs.lib.optionalAttrs (checkMaterialization != null) {
454+ inherit checkMaterialization;
455+ }) (evalPackages.runCommand (nameAndSuffix "plan-to-nix-pkgs") {
456+ nativeBuildInputs = [ nix-tools dummy-ghc dummy-ghc-pkg cabal-install evalPackages.rsync evalPackages.gitMinimal ];
457+ # Needed or stack-to-nix will die on unicode inputs
458+ LOCALE_ARCHIVE = pkgs.lib.optionalString (evalPackages.stdenv.buildPlatform.libc == "glibc") "${evalPackages.glibcLocales}/lib/locale/locale-archive";
459+ LANG = "en_US.UTF-8";
460+ meta.platforms = pkgs.lib.platforms.all;
461+ preferLocalBuild = false;
462+ outputs = [
463+ "out" # The results of plan-to-nix
464+ # These two output will be present if in cabal configure failed.
465+ # They are used to provide passthru.json and passthru.freeze that
466+ # check first for cabal configure failure.
467+ "maybeJson" # The `plan.json` file generated by cabal and used for `plan-to-nix` input
468+ "maybeFreeze" # The `cabal.project.freeze` file created by `cabal v2-freeze`
469+ ];
470+ passthru =
471+ let
472+ checkCabalConfigure = ''
473+ if [[ -f ${plan-nix}/cabal-configure.out ]]; then
474+ cat ${plan-nix}/cabal-configure.out
475+ exit 1
476+ fi
477+ '';
478+ in {
479+ # These check for cabal configure failure
480+ json = evalPackages.runCommand (nameAndSuffix "plan-json") {} ''
481+ ${checkCabalConfigure}
482+ cp ${plan-nix.maybeJson} $out
483+ '';
484+ freeze = evalPackages.runCommand (nameAndSuffix "plan-freeze") {} ''
485+ ${checkCabalConfigure}
486+ cp ${plan-nix.maybeFreeze} $out
487+ '';
488+ };
489+ } ''
490+ tmp=$(mktemp -d)
491+ cd $tmp
492+ # if cleanedSource is empty, this means it's a new
493+ # project where the files haven't been added to the git
494+ # repo yet. We fail early and provide a useful error
495+ # message to prevent headaches (#290).
496+ if [ -z "$(ls -A ${cleanedSource})" ]; then
497+ echo "cleaned source is empty. Did you forget to 'git add -A'?"
498+ ${pkgs.lib.optionalString (__length fixedProject.sourceRepos == 0) ''
499+ exit 1
500+ ''}
501+ else
502+ cp -r ${cleanedSource}/* .
503+ fi
504+ chmod +w -R .
505+ # Decide what to do for each `package.yaml` file.
506+ for hpackFile in $(find . -name package.yaml); do (
507+ # Look to see if a `.cabal` file exists
508+ shopt -u nullglob
509+ for cabalFile in $(dirname $hpackFile)/*.cabal; do
510+ if [ -e "$cabalFile" ]; then
511+ echo Ignoring $hpackFile as $cabalFile exists
512+ else
513+ # warning: this may not generate the proper cabal file.
514+ # hpack allows globbing, and turns that into module lists
515+ # without the source available (we cleaneSourceWith'd it),
516+ # this may not produce the right result.
517+ echo No .cabal file found, running hpack on $hpackFile
518+ hpack $hpackFile
519+ fi
520+ done
521+ )
522+ done
523+ ${pkgs.lib.optionalString (subDir != "") "cd ${subDir}"}
524+ ${fixedProject.makeFixedProjectFile}
525+ ${pkgs.lib.optionalString (cabalProjectFreeze != null) ''
526+ cp ${evalPackages.writeText "cabal.project.freeze" cabalProjectFreeze} \
527+ cabal.project.freeze
528+ chmod +w cabal.project.freeze
529+ ''}
530+ export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
531+ export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt
532+
533+ # Using `cabal v2-freeze` will configure the project (since
534+ # it is not configured yet), taking the existing `cabal.project.freeze`
535+ # file into account. Then it "writes out a freeze file which
536+ # records all of the versions and flags that are picked" (from cabal docs).
537+ echo "Using index-state ${index-state-found}"
538+ if(HOME=${
539+ # This creates `.cabal` directory that is as it would have
540+ # been at the time `cached-index-state`. We may include
541+ # some packages that will be excluded by `index-state-found`
542+ # which is used by cabal (cached-index-state >= index-state-found).
543+ dotCabal {
544+ inherit cabal-install nix-tools extra-hackage-tarballs;
545+ extra-hackage-repos = fixedProject.repos;
546+ index-state = cached-index-state;
547+ sha256 = index-sha256-found;
548+ }
549+ } cabal v2-freeze ${
550+ # Setting the desired `index-state` here in case it is not
551+ # in the cabal.project file. This will further restrict the
552+ # packages used by the solver (cached-index-state >= index-state-found).
553+ pkgs.lib.optionalString (index-state != null) "--index-state=${index-state}"
554+ } \
555+ -w ${
556+ # We are using `-w` rather than `--with-ghc` here to override
557+ # the `with-compiler:` in the `cabal.project` file.
558+ ghc.targetPrefix}ghc \
559+ --with-ghc-pkg=${ghc.targetPrefix}ghc-pkg \
560+ --enable-tests \
561+ --enable-benchmarks \
562+ ${pkgs.lib.optionalString (ghc.targetPrefix == "js-unknown-ghcjs-")
563+ "--ghcjs --with-ghcjs=js-unknown-ghcjs-ghc --with-ghcjs-pkg=js-unknown-ghcjs-ghc-pkg"} \
564+ ${configureArgs} 2>&1 | tee -a cabal-configure.out); then
565+
566+ mkdir -p $out
567+
568+ cp cabal.project.freeze $maybeFreeze
569+ # Not needed any more (we don't want it to wind up in the $out hash)
570+ rm cabal.project.freeze
571+
572+ # ensure we have all our .cabal files (also those generated from package.yaml) files.
573+ # otherwise we'd need to be careful about putting the `cabal-generator = hpack` into
574+ # the nix expression. As we already called `hpack` on all `package.yaml` files we can
575+ # skip that step and just package the .cabal files up as well.
576+ #
577+ # This is also important as `plan-to-nix` will look for the .cabal files when generating
578+ # the relevant `pkgs.nix` file with the local .cabal expressions.
579+ rsync -a --prune-empty-dirs \
580+ --include '*/' --include '*.cabal' --include 'package.yaml' \
581+ --exclude '*' \
582+ $tmp/ $out/
583+
584+ # make sure the path's in the plan.json are relative to $out instead of $tmp
585+ # this is necessary so that plan-to-nix relative path logic can work.
586+ substituteInPlace $tmp${subDir'}/dist-newstyle/cache/plan.json --replace "$tmp" "$out"
587+
588+ # run `plan-to-nix` in $out. This should produce files right there with the
589+ # proper relative paths.
590+ (cd $out${subDir'} && plan-to-nix --full --plan-json $tmp${subDir'}/dist-newstyle/cache/plan.json -o .)
591+
592+ # Replace the /nix/store paths to minimal git repos with indexes (that will work with materialization).
593+ ${fixedProject.replaceLocations}
594+
595+ # Make the plan.json file available in case we need to debug plan-to-nix
596+ cp $tmp${subDir'}/dist-newstyle/cache/plan.json $maybeJson
597+
598+ # Remove the non nix files ".project" ".cabal" "package.yaml" files
599+ # as they should not be in the output hash (they may change slightly
600+ # without affecting the nix).
601+ find $out \( -type f -or -type l \) ! -name '*.nix' -delete
602+ # Remove empty dirs
603+ find $out -type d -empty -delete
604+
605+ # move pkgs.nix to default.nix ensure we can just nix `import` the result.
606+ mv $out${subDir'}/pkgs.nix $out${subDir'}/default.nix
607+ else
608+ # Check that this was a solver failure that (not some other
609+ # possibly non deterministic failure).
610+ # TODO replace grep once https://github.com/haskell/cabal/issues/5191
611+ # is fixed.
612+ grep "cabal: Could not resolve dependencies" cabal-configure.out
613+
614+ # When cabal configure fails copy the output that we captured above and
615+ # use `failed-cabal-configure.nix` to make a suitable derviation with.
616+ mkdir -p $out${subDir'}
617+ cp cabal-configure.out $out${subDir'}
618+ cp ${./failed-cabal-configure.nix} $out${subDir'}/default.nix
619+
620+ # These should only be used indirectly by `passthru.json` and `passthru.freeze`.
621+ # Those derivations will check for `cabal-configure.out` out first to see if
622+ # it is ok to use these files.
623+ echo "Cabal configure failed see $out${subDir'}/cabal-configure.out for details" > $maybeJson
624+ echo "Cabal configure failed see $out${subDir'}/cabal-configure.out for details" > $maybeFreeze
625+ fi
626+ '');
627+in {
628+ projectNix = plan-nix;
629+ index-state = index-state-found;
630+ inherit src;
631+ inherit (fixedProject) sourceRepos extra-hackages;
632+}
lib/call-stack-to-nix.nixnew file+94
@@ -0,0 +1,94 @@
1+/* The function obtained when this is applied to a package set calls
2+ * the stack-to-nix tool on a supplied source set and then
3+ * imports the resulting pkgs.nix. The application of this function
4+ * to a source path can thus be used directly as the input to mkStackPackageSet
5+ *
6+ * see also `call-cabal-project-to-nix`!
7+ */
8+{ name ? src.name or null # optional name for better error messages
9+, src
10+, stackYaml ? "stack.yaml"
11+, ignorePackageYaml ? false
12+, cache ? null
13+, stack-sha256 ? null
14+, resolverSha256 ? null
15+, materialized ? null # Location of a materialized copy of the nix files
16+, checkMaterialization ? null # If true the nix files will be generated used to check plan-sha256 and material
17+, nix-tools
18+, evalPackages
19+, ... }@args:
20+let
21+ inherit (evalPackages) runCommand;
22+ inherit (evalPackages.haskell-nix) mkCacheFile materialize haskellLib;
23+ inherit (haskellLib.fetchResolver {
24+ inherit src stackYaml resolverSha256;
25+ }) resolver fetchedResolver;
26+
27+ subDir' = src.origSubDir or "";
28+ subDir = evalPackages.lib.strings.removePrefix "/" subDir';
29+ cleanedSource = (haskellLib.cleanSourceWith {
30+ name = if name != null then "${name}-root-cabal-files" else "source-root-cabal-files";
31+ src = src.origSrc or src;
32+ filter = path: type: (!(src ? filter) || src.filter path type) && (
33+ type == "directory" ||
34+ evalPackages.lib.any (i: (evalPackages.lib.hasSuffix i path)) [ stackYaml ".cabal" "package.yaml" ]); });
35+
36+ stackToNixArgs = builtins.concatStringsSep " " [
37+ "--full"
38+ "--stack-yaml=$SRC${subDir'}/${stackYaml}"
39+ (if ignorePackageYaml then "--ignore-package-yaml" else "")
40+ "-o ."
41+ ];
42+ stack = materialize ({
43+ inherit materialized;
44+ sha256 = stack-sha256;
45+ sha256Arg = "stack-sha256";
46+ reasonNotSafe = null;
47+ this = "project.stack-nix" + (if name != null then " for ${name}" else "");
48+ } // evalPackages.lib.optionalAttrs (checkMaterialization != null) {
49+ inherit checkMaterialization;
50+ }) (runCommand (if name == null then "stack-to-nix-pkgs" else name + "-stack-to-nix-pkgs") {
51+ nativeBuildInputs = [ nix-tools evalPackages.nix-prefetch-git evalPackages.cacert evalPackages.xorg.lndir ];
52+ # Needed or stack-to-nix will die on unicode inputs
53+ LOCALE_ARCHIVE = evalPackages.lib.optionalString (evalPackages.stdenv.hostPlatform.libc == "glibc") "${evalPackages.glibcLocales}/lib/locale/locale-archive";
54+ LANG = "en_US.UTF-8";
55+ LC_ALL = "en_US.UTF-8";
56+ preferLocalBuild = false;
57+ } (''
58+ mkdir -p $out${subDir'}
59+ SRC=$(mktemp -d)
60+ cd $SRC
61+ # if cleanedSource is empty, this means it's a new
62+ # project where the files haven't been added to the git
63+ # repo yet. We fail early and provide a useful error
64+ # message to prevent headaches (#290).
65+ if [ -z "$(ls -A ${cleanedSource})" ]; then
66+ echo "cleaned source is empty. Did you forget to 'git add -A'?"; exit 1;
67+ fi
68+ lndir -silent "${cleanedSource}/." $SRC
69+ ${evalPackages.lib.optionalString (subDir != "") "cd ${subDir}"}
70+ ${
71+ # If a resolver was fetched use the it instead of the original stack.yaml
72+ evalPackages.lib.optionalString (fetchedResolver != null)
73+ # Replace the resolver path in the stack.yaml with the fetched version
74+ ''
75+ rm ${stackYaml}
76+ cp ${src}/${stackYaml} .
77+ chmod +w ${stackYaml}
78+ substituteInPlace ${stackYaml} --replace "${resolver}" "${fetchedResolver}"
79+ ''}
80+ ${evalPackages.lib.optionalString (cache != null) ''
81+ cp ${mkCacheFile cache}/.stack-to-nix.cache* $out${subDir'}
82+ ''}
83+ (cd $out${subDir'} && stack-to-nix ${stackToNixArgs})
84+
85+ # We need to strip out any references to $src, as those won't
86+ # be accessable in restricted mode.
87+ for nixf in $(find $out -name "*.nix" -type f); do
88+ substituteInPlace $nixf --replace "$SRC${subDir'}" "."
89+ done
90+
91+ # move pkgs.nix to default.nix ensure we can just nix `import` the result.
92+ mv $out${subDir'}/pkgs.nix $out${subDir'}/default.nix
93+ ''));
94+in { projectNix = stack; inherit src; sourceRepos = []; }
lib/check.nixnew file+56
@@ -0,0 +1,56 @@
1+{ stdenv, lib, haskellLib }:
2+drv:
3+
4+let
5+ component = drv.config;
6+
7+# This derivation can be used to execute test component.
8+# The $out of the derivation is a file containing the resulting
9+# stdout output.
10+in stdenv.mkDerivation ((
11+ if drv ? source
12+ then {
13+ src = drv.source;
14+ patchPhase =
15+ # This `cd` is normally done in the `prePatch` of the drv
16+ lib.optionalString (drv.srcSubDir != "") ''
17+ cd ${lib.removePrefix "/" drv.srcSubDir}
18+ '';
19+ }
20+ else
21+ # This makes the derivation work a bit like `srcOnly`,
22+ # using the original derivation, but replacing the `buildPhase`.
23+ (drv.drvAttrs or drv) // {
24+ outputs = [ "out" ];
25+ separateDebugInfo = false;
26+ }) // {
27+ name = (drv.name + "-check");
28+
29+ passthru = {
30+ inherit (drv) identifier config configFiles executableToolDepends cleanSrc env exeName;
31+ };
32+
33+ inherit (drv) meta LANG LC_ALL buildInputs nativeBuildInputs;
34+
35+ inherit (component) doCheck doCrossCheck;
36+
37+ phases = ["unpackPhase" "patchPhase" "buildPhase"];
38+
39+ # If doCheck or doCrossCheck are false we may still build this
40+ # component and we want it to quietly succeed.
41+ buildPhase = ''
42+ mkdir $out
43+ runHook preCheck
44+
45+ ${toString component.testWrapper} ${drv}/bin/${drv.exeName} ${lib.concatStringsSep " " component.testFlags} | tee $out/test-stdout
46+
47+ # Copy over tix files, if they exist
48+ find . -iname '${drv.exeName}.tix' -exec mkdir -p $out/share/hpc/vanilla/tix/${drv.exeName} \; -exec cp {} $out/share/hpc/vanilla/tix/${drv.exeName}/ \;
49+
50+ runHook postCheck
51+ '';
52+} // haskellLib.optionalHooks {
53+ inherit (component) preCheck postCheck;
54+}
55+// lib.optionalAttrs (drv ? LOCALE_ARCHIVE) { inherit (drv) LOCALE_ARCHIVE; }
56+)
lib/clean-cabal-component.nixnew file+138
@@ -0,0 +1,138 @@
1+# Use cleanSourceWith to filter just the files needed for a particular
2+# component of the package
3+{ lib, cleanSourceWith }: package: component: componentName: src:
4+let
5+ srcStr' = src.origSrc or null;
6+ subDir = if src.origSubDir or "" == ""
7+ then ""
8+ else lib.removePrefix "/" src.origSubDir + "/";
9+ # Remove a directory for each .. part of a path.
10+ removeDotDots = parts: lib.reverseList (
11+ builtins.foldl' (a: b:
12+ if b == ".."
13+ then builtins.tail a
14+ else builtins.concatLists [ [b] a ]) [] parts);
15+ # Transform
16+ # "." -> ""
17+ # "./." -> ""
18+ # "./xyz" -> "xyz"
19+ # "../abc" -> ERROR
20+ # "abc/.." -> ""
21+ # "abc/../xyz" -> "xyz"
22+ # "abc/./xyz" -> "abc/xyz"
23+ # "abc/./../xyz" -> "xyz"
24+ # "abc/.././xyz" -> "xyz"
25+ # "abc/" -> "abc/"
26+ normalizeRelativePath = path:
27+ let
28+ # Split the path into component parts and remove the empty ones and single dots.
29+ nonEmptyParts = lib.filter (x: x != "" && x != ".") (lib.splitString "/" path);
30+ in lib.concatStringsSep "/" (removeDotDots nonEmptyParts)
31+ # Keep the trailing slash if there was one.
32+ + (if lib.hasSuffix "/" path then "/" else "");
33+ isAbsolutePath = path: lib.hasPrefix "/" path;
34+ isRelativePath = path: !(isAbsolutePath path);
35+ normalizePath = path:
36+ (if isAbsolutePath path
37+ then "/"
38+ else ""
39+ ) + normalizeRelativePath path;
40+ combinePaths = a: b:
41+ if isAbsolutePath b
42+ then b
43+ else normalizePath (
44+ if a == ""
45+ then b
46+ else if b == ""
47+ then a
48+ else a + "/" + b
49+ );
50+ # Like normalizePath but with a trailing / when needed
51+ normalizeDir = dir:
52+ let p = normalizePath dir;
53+ in if p == "" || p == "/"
54+ then ""
55+ else if lib.hasSuffix "/" p
56+ then p
57+ else p + "/";
58+in
59+ if srcStr' == null || package.detailLevel != "FullDetails"
60+ then src
61+ else
62+ let
63+ srcStr = toString srcStr';
64+ dataDir = combinePaths subDir package.dataDir;
65+ hsSourceDirs = builtins.map (d: combinePaths subDir d) component.hsSourceDirs
66+ ++ (if component.hsSourceDirs == [] then [subDir] else []);
67+ includeDirs = builtins.map (d: combinePaths subDir d) component.includeDirs;
68+ # paths that will be needed (used to check if a parent dir should be included)
69+ dirsNeeded =
70+ # These already include subDir
71+ [dataDir]
72+ ++ hsSourceDirs
73+ ++ includeDirs
74+ ++ builtins.map (f: combinePaths dataDir f) package.dataFiles
75+ ++ otherSourceFiles
76+ ++ builtins.map (d: combinePaths subDir d) (
77+ # These need the subDir added
78+ package.licenseFiles
79+ ++ package.extraSrcFiles
80+ ++ component.extraSrcFiles
81+ ++ package.extraDocFiles);
82+ fileMatch = dir: list:
83+ let
84+ prefixes = builtins.map (f: combinePaths dir f) (
85+ lib.lists.remove null (lib.lists.flatten (
86+ builtins.map (f: builtins.match "([^*]*)[*].*" f) list)));
87+ exactMatches = builtins.map (f: combinePaths dir f) (
88+ lib.lists.remove null (lib.lists.flatten (
89+ builtins.map (f: builtins.match "([^*]*)" f) list)));
90+ in rPath: lib.any (d: lib.strings.hasPrefix d rPath) prefixes
91+ || lib.any (d: d == rPath) exactMatches;
92+ dataFileMatch = fileMatch dataDir package.dataFiles;
93+ licenseMatch = fileMatch subDir package.licenseFiles;
94+ extraSrcMatch = fileMatch subDir (
95+ package.extraSrcFiles
96+ ++ component.extraSrcFiles);
97+ extraDocMatch = fileMatch subDir package.extraDocFiles;
98+ otherSourceFiles = builtins.map (f: combinePaths subDir f) (
99+ component.asmSources
100+ ++ component.cmmSources
101+ ++ component.cSources
102+ ++ component.cxxSources
103+ ++ component.jsSources);
104+ in cleanSourceWith {
105+ name = src.name or "source" + "-${componentName}";
106+ subDir = lib.removePrefix "/" (src.origSubDir or "");
107+ includeSiblings = true;
108+ src = cleanSourceWith {
109+ src = src.origSrc or src;
110+ filter = path: type:
111+ (!(src ? filter) || src.filter path type) && (
112+ assert (if !lib.strings.hasPrefix (srcStr + "/") (path + "/")
113+ then throw ("Unexpected path " + path + " (expected something in " + srcStr + "/)")
114+ else true);
115+ let
116+ srcStrLen = lib.strings.stringLength srcStr;
117+ rPath = lib.strings.substring (srcStrLen + 1) (lib.strings.stringLength path - srcStrLen - 1) path;
118+ # This is a handy way to find out why different files are included
119+ # traceReason = reason: v: if v then builtins.trace (rPath + " : " + reason) true else false;
120+ traceReason = reason: v: v;
121+ in
122+ traceReason "directory is needed" (
123+ lib.any (d: lib.strings.hasPrefix (rPath + "/") d) dirsNeeded)
124+ || traceReason "cabal package definition" (lib.strings.hasPrefix subDir rPath
125+ && lib.strings.hasSuffix ".cabal" rPath)
126+ || traceReason "hpack package defintion" (lib.strings.hasPrefix subDir rPath
127+ && rPath == "package.yaml")
128+ || traceReason "data file" (lib.strings.hasPrefix dataDir rPath
129+ && dataFileMatch rPath)
130+ || traceReason "haskell source dir" (lib.any (d: lib.strings.hasPrefix d rPath) hsSourceDirs)
131+ || traceReason "include dir" (lib.any (d: lib.strings.hasPrefix d rPath) includeDirs)
132+ || traceReason "license file" (licenseMatch rPath)
133+ || traceReason "extra source file" (extraSrcMatch rPath)
134+ || traceReason "extra doc file" (extraDocMatch rPath)
135+ || traceReason "other source file" (lib.any (f: f == rPath) otherSourceFiles)
136+ );
137+ };
138+ }
lib/clean-git.nixnew file+205
@@ -0,0 +1,205 @@
1+# From https://github.com/NixOS/nix/issues/2944
2+{ lib, runCommand, git, cleanSourceWith }:
3+{ name ? null, src, subDir ? "", includeSiblings ? false, keepGitDir ? false }:
4+
5+# The function call
6+#
7+# gitSource ./toplevel subpath
8+#
9+# creates a Nix store path of ./toplevel/subpath that includes only those files
10+# tracked by git. More precisely: mentioned in the git index (i.e. git add is enough
11+# to get them to be included, you do not have to commit).
12+#
13+# This is a whitelist-based alternative to manually listing files or using
14+# nix-gitignore.
15+
16+# Internally, it works by calling git ls-files at evaluation time. To
17+# avoid copying all of `.git` to the git store, it only copies the least amount
18+# of files necessary for `git ls-files` to work; this is a bit fragile, but
19+# very fast.
20+
21+with builtins;
22+
23+# We read the git index once, before getting the subdir parameter, so that it
24+# is shared among multiple invocations of gitSource:
25+
26+let
27+ remove_prefix = prefix: s:
28+ builtins.substring
29+ (builtins.stringLength prefix)
30+ (builtins.stringLength s - builtins.stringLength prefix)
31+ s;
32+
33+ lines = s: filter (x : x != [] && x != "") (split "\n" s);
34+
35+ origSrcSubDir = toString (src.origSrcSubDir or src);
36+in
37+
38+if builtins.pathExists (origSrcSubDir + "/.git")
39+then
40+ let
41+ hasIndex = builtins.pathExists (origSrcSubDir + "/.git/index");
42+ isWorktree = (builtins.readDir origSrcSubDir).".git" == "regular";
43+
44+ # Identify the .git directory and filter just the files that we need.
45+ gitDir = cleanSourceWith ({
46+ caller = "cleanGit";
47+ name = (if name == null then "" else name + "-") + "gitFiles";
48+ filter = path: type:
49+ type == "directory" ||
50+ lib.any (i: (lib.hasSuffix i path)) [
51+ "/config" "/index" "/HEAD" ] ||
52+ (lib.strings.hasInfix "modules/" path &&
53+ lib.any (i: (lib.hasSuffix i path)) [
54+ "/config" "/index" "/HEAD" "/objects" "/refs" ]);
55+ } // (
56+ if hasIndex
57+ then { inherit src; subDir = ".git"; }
58+ else if !isWorktree
59+ then abort "cleanGit: ${origSrcSubDir + "/.git"} has no index file"
60+ else {
61+ # likely a git worktree, so follow the indirection
62+ src =
63+ let
64+ git_content = lines (readFile (origSrcSubDir + "/.git"));
65+ first_line = head git_content;
66+ prefix = "gitdir: ";
67+ ok = length git_content == 1 && lib.hasPrefix prefix first_line;
68+ raw_path = remove_prefix prefix first_line;
69+ in
70+ if ok
71+ then
72+ if lib.hasPrefix "/" raw_path
73+ then /. + raw_path
74+ else /. + builtins.toPath (origSrcSubDir + "/" + raw_path)
75+ else abort "gitSource.nix: Cannot parse ${origSrcSubDir + "/.git"}";
76+ }));
77+
78+ # Worktrees have a commondir pointing to the common `.git` dir. We need the
79+ # config file from there to get the list of active submodules right.
80+ commonConfig = if builtins.pathExists (toString gitDir.origSrc + "/commondir")
81+ then
82+ # The commondir file contains just the relative path of the
83+ # common `.git` dir.
84+ let
85+ git_content = lines (readFile (toString gitDir.origSrc + "/commondir"));
86+ first_line = head git_content;
87+ in gitDir.origSrc + ("/" + first_line + "/config")
88+ else gitDir + "/config";
89+
90+ # We need the .gitmodules file for submoules to work.
91+ gitModulesStr = origSrcSubDir + "/.gitmodules";
92+ gitModules = builtins.path { name = "gitmodules"; path = gitModulesStr; };
93+
94+ # Files from the git repository related knownSubmoduleDirs.
95+ gitSubmoduleFiles = knownSubmoduleDirs:
96+ let pathsNeeded = map (p: toString (src.origSrcSubDir or src) + "/${p}") (
97+ lib.concatMap (x: all_paren_dirs (x + "/.git")) knownSubmoduleDirs);
98+ in cleanSourceWith {
99+ caller = "cleanGit";
100+ name = (if name == null then "" else name + "-") + "gitSubmoduleFiles";
101+ inherit src;
102+ filter = path: type:
103+ elem path pathsNeeded
104+ ||
105+ lib.any (i: (lib.hasSuffix i path)) [
106+ ".gitmodules" ".git/config" ".git/index" ".git/HEAD" ".git/objects" ".git/refs" ]
107+ ||
108+ (lib.strings.hasInfix ".git/modules/" path &&
109+ lib.any (i: (lib.hasSuffix i path)) [
110+ "config" "index" "HEAD" "objects" "refs" ]);
111+ };
112+
113+ hasSubmodules = !isWorktree && builtins.pathExists gitModulesStr;
114+
115+ # Make a temporary dir that looks enough like the real thing for
116+ # `git ls-files --recurse-submodules` to give us an accurate list
117+ # of all the files in the index.
118+ whitelist_files = knownSubmoduleDirs:
119+ runCommand "git-ls-files" { preferLocalBuild = true; } ''
120+ tmp=$(mktemp -d)
121+ cd $tmp
122+ ${ lib.optionalString hasSubmodules ''
123+ cp -ra ${gitSubmoduleFiles knownSubmoduleDirs}/. $tmp
124+ chmod +w -R $tmp
125+ ''}
126+ cp -r ${gitDir} .git
127+ chmod +w -R .git
128+ mkdir -p .git/objects .git/refs
129+ mkdir -p .git-common/objects .git-common/refs
130+ cp ${commonConfig} .git-common/config
131+ echo ../.git-common > .git/commondir
132+ ${ lib.optionalString (isWorktree && builtins.pathExists gitModulesStr) ''
133+ cp ${gitModules} ./.gitmodules
134+ ''}
135+ mkdir $out
136+ ${ lib.optionalString hasSubmodules ''
137+ ${git}/bin/git submodule status --recursive | awk '{ print $2 }' > $out/submoduleDirs
138+ ''}
139+ ${git}/bin/git ls-files --recurse-submodules > $out/files
140+ '';
141+
142+ # Find the submodules
143+ whitelist_recursive = knownSubmoduleDirs:
144+ let
145+ # Get the new list of submoduleDirs and files
146+ # (useing the submoduleDirs we already know about)
147+ files = whitelist_files knownSubmoduleDirs;
148+ new = {
149+ submoduleDirs = lines (readFile (files + "/submoduleDirs"));
150+ files = lines (readFile (files + "/files"));
151+ };
152+ in
153+ # If we are not expecting submodules or if the new list does not
154+ # contain any additional submodules we are done.
155+ if !hasSubmodules || lib.all (x: elem x knownSubmoduleDirs) new.submoduleDirs
156+ then new
157+ else
158+ # Look again using what we know now about the submodules
159+ whitelist_recursive new.submoduleDirs;
160+
161+ # Use empty as a starting point for looking for submodules.
162+ # We could allow a list to be passed into cleanGit, but when testing
163+ # on the `ghcjs` repo (one with a lot of submodules) it did not
164+ # make much of a difference to the speed of `cleanGit`.
165+ whitelist = whitelist_recursive [];
166+
167+ all_paren_dirs = p:
168+ if p == "." || p == "/"
169+ then []
170+ else [ p ] ++ all_paren_dirs (dirOf p);
171+
172+ # All the paths that we need to keep as a set (including parent dirs)
173+ whitelist_set = listToAttrs (
174+ concatMap (p:
175+ # Using `origSrcSubDir` (if present) makes it possible to cleanGit src that
176+ # has already been cleaned with cleanSrcWith.
177+ let full_path = toString (src.origSrcSubDir or src) + "/${p}"; in
178+ map (p': { name = p'; value = true; }) (all_paren_dirs full_path)
179+ ) whitelist.files
180+ );
181+
182+ # Identify files in the `.git` dir
183+ isGitDirPath = path:
184+ path == origSrcSubDir + "/.git"
185+ || lib.hasPrefix (origSrcSubDir + "/.git/") path;
186+
187+ filter = path: type:
188+ hasAttr (toString path) whitelist_set
189+ || (keepGitDir && isGitDirPath path);
190+ in
191+ cleanSourceWith {
192+ caller = "cleanGit";
193+ inherit name src subDir includeSiblings filter;
194+ } // {
195+ # For testing
196+ # inherit whitelist whitelist_set;
197+ }
198+
199+else
200+ trace "haskell-nix.haskellLib.cleanGit: ${origSrcSubDir} does not seem to be a git repository,\nassuming it is a clean checkout." (
201+ cleanSourceWith {
202+ caller = "cleanGit";
203+ inherit name src subDir includeSiblings;
204+ }
205+ )
lib/clean-source-haskell.nixnew file+41
@@ -0,0 +1,41 @@
1+# This is a source filter function which cleans common build products
2+# and files not needed to do a haskell build from a source directory.
3+#
4+# This can avoid unnecessary builds when these files change.
5+#
6+# It should be used with "pkgs.lib.cleanSourceWith". Alternatively,
7+# use the convenience function "cleanSourceHaskell".
8+#
9+{ lib }:
10+
11+rec {
12+ haskellSourceFilter = name: type:
13+ let baseName = baseNameOf (toString name);
14+ in ! (
15+ # Filter out cabal build products.
16+ baseName == "dist" || baseName == "dist-newstyle" ||
17+ baseName == "cabal.project.local" ||
18+ lib.hasPrefix ".ghc.environment" baseName ||
19+ # Filter out stack build products.
20+ lib.hasPrefix ".stack-work" baseName ||
21+ # Filter out files left by ghci
22+ lib.hasSuffix ".hi" baseName ||
23+ # Filter out files generated by "hasktags"
24+ baseName == "TAGS" || baseName == "tags" ||
25+ # Filter out files which are commonly edited but don't
26+ # affect the cabal build.
27+ lib.hasSuffix ".nix" baseName
28+ );
29+
30+ # Like pkgs.lib.cleanSource, but adds Haskell files to the filter.
31+ cleanSourceHaskell = { src, name ? null }:
32+ let
33+ clean = lib.cleanSourceWith {
34+ filter = haskellSourceFilter;
35+ src = lib.cleanSource src;
36+ inherit name;
37+ };
38+ in
39+ if (builtins.typeOf src) == "path"
40+ then clean else src;
41+}
lib/clean-source-with.nixnew file+150
@@ -0,0 +1,150 @@
1+# This is a replacement for the cleanSourceWith function in nixpkgs
2+# https://github.com/NixOS/nixpkgs/blob/1d9d31a0eb8e8358830528538a391df52f6a075a/lib/sources.nix#L41
3+# It adds a subDir argument in a way that allows descending into a subdirectory
4+# to compose with cleaning the source with a filter.
5+{ lib }: rec {
6+
7+ # Like `builtins.filterSource`, except it will compose with itself,
8+ # allowing you to chain multiple calls together without any
9+ # intermediate copies being put in the nix store.
10+ #
11+ # lib.cleanSourceWith {
12+ # filter = f;
13+ # src = lib.cleanSourceWith {
14+ # filter = g;
15+ # src = ./.;
16+ # };
17+ # }
18+ # # Succeeds!
19+ #
20+ # builtins.filterSource f (builtins.filterSource g ./.)
21+ # # Fails!
22+ #
23+ # Parameters:
24+ #
25+ # src: A path or cleanSourceWith result to filter and/or rename.
26+ #
27+ # filter: A function (path -> type -> bool)
28+ # Optional with default value: constant true (include everything)
29+ # The function will be combined with the && operator such
30+ # that src.filter is called lazily.
31+ # For implementing a filter, see
32+ # https://nixos.org/nix/manual/#builtin-filterSource
33+ #
34+ # subDir: Descend into a subdirectory in a way that will compose.
35+ # It will be as if `src = src + "/${subDir}` and filters
36+ # already applied to `src` will be respected.
37+ #
38+ # includeSiblings: By default the siblings trees of `subDir` are excluded.
39+ # In some cases it is useful to include these so that
40+ # relative references to those siblings will work.
41+ #
42+ # name: Optional name to use as part of the store path.
43+ # If you do not provide a `name` it will be derived
44+ # from the `subDir`. You should provide `name` or
45+ # `subDir`. If you do not a warning will be displayed
46+ # and the name used will be `source`.
47+ #
48+ # caller: Name of the function used in warning message.
49+ # Functions that are implemented using `cleanSourceWith`
50+ # (and forward a `name` argument) can use this to make
51+ # the message to the use more meaningful.
52+ #
53+ # Nix <2.4 Suport with filterPath
54+ #
55+ # As of Nix >=2.4 filtering is now possible on all paths (including those in the store).
56+ # If you still need to support older versions of Nix and want to maximise cache hits for your project
57+ # you may want to consider using setting the `filterPath` attribute on `src` (must be done on
58+ # the original src not the output of another `cleanSourceWith`).
59+ #
60+ # To disable filtering completely replace:
61+ #
62+ # src = ./.;
63+ #
64+ # with:
65+ #
66+ # src = { outPath = ./.; filterPath = { path, ... }: path; };
67+ #
68+ # To disable filtering only when the path is in the store use (when Nix <2.4 is unable to filter it):
69+ #
70+ # src = {
71+ # outPath = ./.;
72+ # filterPath = { path, ... }@args:
73+ # if builtins.hasContext (toString path) then path else builtins.path args;
74+ # };
75+ #
76+ # Currently `haskell-nix.hackage-project` (used by `hackage-package`, `tool` and `tools`) disables
77+ # filtering. See `overlays/haskell.nix` for details.
78+ #
79+ # For more see https://github.com/input-output-hk/haskell.nix/pull/1418
80+ cleanSourceWith = { filter ? _path: _type: true, src, subDir ? "", name ? null
81+ , caller ? "cleanSourceWith", includeSiblings ? false }:
82+ let
83+ subDir' = if subDir == "" then "" else "/" + subDir;
84+ subDirName = __replaceStrings ["/"] ["-"] subDir;
85+ # In case this is mixed with older versions of cleanSourceWith
86+ isFiltered = src ? _isLibCleanSourceWith;
87+ isFilteredEx = src ? _isLibCleanSourceWithEx;
88+ origSrc = if isFiltered || isFilteredEx then src.origSrc else src;
89+ origSubDir = if isFilteredEx then src.origSubDir + subDir' else subDir';
90+ origSrcSubDir = toString origSrc + origSubDir;
91+ parentFilter = if isFiltered || isFilteredEx
92+ then path: type: src.filter path type
93+ else path: type: true;
94+ filter' = path: type:
95+ # Respect the parent filter
96+ parentFilter path type && (
97+ # Must include parent paths of the subdir.
98+ (lib.strings.hasPrefix (path + "/") (origSrcSubDir + "/"))
99+ ||
100+ # Everything else is either the child tree or sibling tree.
101+ ((includeSiblings || lib.strings.hasPrefix (origSrcSubDir + "/") path)
102+ && filter path type # Use the filter function to decide if we need it
103+ )
104+ );
105+ name' = if name != null
106+ then name
107+ else
108+ if subDirName != ""
109+ then if src ? name
110+ then src.name + "-" + subDirName
111+ else "source-" + subDirName
112+ else if src ? name
113+ then src.name
114+ else
115+ # No name was provided and one could not be constructed from
116+ # the `subDirName`.
117+
118+ # We used to use `baseNameOf src` as a default here.
119+ # This was cute, but it lead to cache misses. For instance if
120+ # `x = cleanSourceWith { src = ./.; }` then `baseName src`
121+ # will be different when `src` resolves to "/nix/store/X"
122+ # than when it is in a local directory. If people use
123+ # git worktrees they also may wind up with different
124+ # values for `name`. Anything that depends on `x.name` will
125+ # propagate the issue.
126+
127+ # Encourage adding a suitable `name` with:
128+ # * A warning message.
129+ # * A default name that gives a hint as to why there is no name.
130+ __trace (
131+ "WARNING: `${caller}` called on ${toString src} without a `name`. "
132+ + "Consider adding `name = \"${baseNameOf src}\";`") "source";
133+ filterPath = origSrc.filterPath or (
134+ if builtins.compareVersions builtins.nixVersion "2.4" >= 0
135+ then builtins.path
136+ else __trace "WARNING: Using nix <2.4 will result in inconsistent filtering of ${toString origSrc} (see lib/clean-source-with.nix)"
137+ (if builtins.hasContext or (lib.hasPrefix builtins.storeDir) (toString origSrc)
138+ then { path, ... }: path
139+ else builtins.path));
140+ in {
141+ inherit origSrc origSubDir origSrcSubDir;
142+ filter = filter';
143+ outPath = (filterPath { filter = filter'; path = origSrc; name = name'; }) + origSubDir;
144+ _isLibCleanSourceWithEx = true;
145+ # It is only safe for older cleanSourceWith to filter this one
146+ # if the we are still looking at the root of origSrc
147+ _isLibCleanSourceWith = origSubDir == "";
148+ name = name';
149+ };
150+}
lib/compat.nixnew file+1
@@ -0,0 +1 @@
1+{ license-map = import ./cabal-licenses.nix; platform-map = import ./cabal-os-arch-comp.nix; host-map = import ./host-map.nix; }
lib/cover-project.nixnew file+150
@@ -0,0 +1,150 @@
1+# A project coverage report is a composition of package coverage
2+# reports
3+{ stdenv, pkgs, lib, haskellLib }:
4+
5+# haskell.nix project
6+project:
7+# List of coverage reports to accumulate
8+coverageReports:
9+
10+let
11+ toBashArray = arr: "(" + (lib.concatStringsSep " " arr) + ")";
12+
13+ # Create a list element for a project coverage index page.
14+ coverageListElement = coverageReport:
15+ ''
16+ <li>
17+ <a href="${coverageReport.passthru.name}/hpc_index.html">${coverageReport.passthru.name}</a>
18+ </li>
19+ '';
20+
21+ projectIndexHtml = pkgs.writeText "index.html" ''
22+ <html>
23+ <head>
24+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
25+ </head>
26+ <body>
27+ <div>
28+ WARNING: Modules with no coverage are not included in any of these reports, this is just how HPC works under the hood.
29+ </div>
30+ <div>
31+ <h2>Union Report</h2>
32+ <p>The following report shows how each module is covered by any test in the project:</p>
33+ <ul>
34+ <li>
35+ <a href="all/hpc_index.html">all</a>
36+ </li>
37+ </ul>
38+ </div>
39+ <div>
40+ <h2>Individual Reports</h2>
41+ <p>The following reports show how the tests of each package cover modules in the project:</p>
42+ <ul>
43+ ${with lib; concatStringsSep "\n" (map coverageListElement coverageReports)}
44+ </ul>
45+ </div>
46+ </body>
47+ </html>
48+ '';
49+
50+ ghc = project.pkg-set.config.ghc.package;
51+
52+ libs = lib.unique (lib.concatMap (r: r.mixLibraries) coverageReports);
53+
54+ mixDirs =
55+ map
56+ (l: "${l}/share/hpc/vanilla/mix/${l.identifier.name}-${l.identifier.version}")
57+ libs;
58+
59+ srcDirs = map (l: l.srcSubDirPath) libs;
60+
61+ allCoverageReport = haskellLib.coverageReport {
62+ name = "all";
63+ checks = lib.flatten (lib.concatMap
64+ (pkg: lib.optional (pkg ? checks) (lib.filter lib.isDerivation (lib.attrValues pkg.checks)))
65+ (lib.attrValues (haskellLib.selectProjectPackages project.hsPkgs)));
66+ mixLibraries = lib.concatMap
67+ (pkg: lib.optional (pkg.components ? library) pkg.components.library)
68+ (lib.attrValues (haskellLib.selectProjectPackages project.hsPkgs));
69+ ghc = project.pkg-set.config.ghc.package;
70+ };
71+
72+in pkgs.runCommand "project-coverage-report"
73+ ({ nativeBuildInputs = [ (ghc.buildGHC or ghc) pkgs.buildPackages.zip ];
74+ LANG = "en_US.UTF-8";
75+ LC_ALL = "en_US.UTF-8";
76+ } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") {
77+ LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive";
78+ })
79+ ''
80+ function markup() {
81+ local -n srcDs=$1
82+ local -n mixDs=$2
83+ local -n includedModules=$3
84+ local destDir=$4
85+ local tixFile=$5
86+
87+ local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir")
88+ for srcDir in "''${srcDs[@]}"; do
89+ hpcMarkupCmd+=("--srcdir=$srcDir")
90+ done
91+
92+ for mixDir in "''${mixDs[@]}"; do
93+ hpcMarkupCmd+=("--hpcdir=$mixDir")
94+ done
95+
96+ for module in "''${includedModules[@]}"; do
97+ hpcMarkupCmd+=("--include=$module")
98+ done
99+
100+ hpcMarkupCmd+=("$tixFile")
101+
102+ echo "''${hpcMarkupCmd[@]}"
103+ eval "''${hpcMarkupCmd[@]}"
104+ }
105+
106+ function findModules() {
107+ local searchDir=$2
108+ local pattern=$3
109+
110+ pushd $searchDir
111+ mapfile -d $'\0' $1 < <(find ./ -type f \
112+ -wholename "$pattern" -not -name "Paths*" \
113+ -exec basename {} \; \
114+ | sed "s/\.mix$//" \
115+ | tr "\n" "\0")
116+ popd
117+ }
118+
119+ mkdir -p $out/nix-support
120+ mkdir -p $out/share/hpc/vanilla/tix/all
121+ mkdir -p $out/share/hpc/vanilla/mix/
122+ mkdir -p $out/share/hpc/vanilla/html/
123+
124+ # Find all tix files in each package
125+ tixFiles=()
126+ ${with lib; concatStringsSep "\n" (map (coverageReport: ''
127+ identifier="${coverageReport.name}"
128+ report=${coverageReport}
129+ tix="$report/share/hpc/vanilla/tix/$identifier/$identifier.tix"
130+ if test -f "$tix"; then
131+ tixFiles+=("$tix")
132+ fi
133+
134+ # Copy mix, tix, and html information over from each report
135+ cp -Rn $report/share/hpc/vanilla/mix/$identifier $out/share/hpc/vanilla/mix/
136+ cp -R $report/share/hpc/vanilla/tix/* $out/share/hpc/vanilla/tix/
137+ cp -R $report/share/hpc/vanilla/html/* $out/share/hpc/vanilla/html/
138+ '') coverageReports)}
139+
140+ # Copy out "all" coverage report
141+ cp -R ${allCoverageReport}/share/hpc/vanilla/tix/all $out/share/hpc/vanilla/tix
142+ cp -R ${allCoverageReport}/share/hpc/vanilla/html/all $out/share/hpc/vanilla/html
143+
144+ # Markup a HTML coverage summary report for the entire project
145+ cp ${projectIndexHtml} $out/share/hpc/vanilla/html/index.html
146+
147+ echo "report coverage $out/share/hpc/vanilla/html/index.html" >> $out/nix-support/hydra-build-products
148+ ( cd $out/share/hpc/vanilla/html ; zip -r $out/share/hpc/vanilla/html.zip . )
149+ echo "file zip $out/share/hpc/vanilla/html.zip" >> $out/nix-support/hydra-build-products
150+ ''
lib/cover.nixnew file+204
@@ -0,0 +1,204 @@
1+# The following collects coverage information from a set of given "checks" and
2+# provides a coverage report showing how those "checks" cover a set of given
3+# "mixLibraries".
4+{ stdenv, lib, haskellLib, pkgs }:
5+
6+# Name of the coverage report, which should be unique.
7+{ name
8+# List of check derivations that generate coverage.
9+, checks ? []
10+# List of libraries to include in the coverage report. If one of the above
11+# checks generates coverage for a particular library, coverage will only
12+# be included if that library is in this list.
13+, mixLibraries ? []
14+# Hack for project-less projects.
15+, ghc ? if mixLibraries == [] then null else (lib.head mixLibraries).project.pkg-set.config.ghc.package
16+}:
17+
18+let
19+ toBashArray = arr: "(" + (lib.concatStringsSep " " arr) + ")";
20+
21+ mixDir = l: "${l}/share/hpc/vanilla/mix/${l.identifier.name}-${l.identifier.version}";
22+ mixDirs = map mixDir mixLibraries;
23+
24+ srcDirs = map (l: l.srcSubDirPath) mixLibraries;
25+
26+in pkgs.runCommand (name + "-coverage-report")
27+ ({nativeBuildInputs = [ (ghc.buildGHC or ghc) pkgs.buildPackages.zip ];
28+ passthru = {
29+ inherit name checks mixLibraries;
30+ };
31+ # HPC will fail if the Haskell file contains non-ASCII characters,
32+ # unless our locale is set correctly. This has been fixed, but we
33+ # don't know what version of HPC we will be using, hence we should
34+ # always use the workaround.
35+ # https://gitlab.haskell.org/ghc/ghc/-/issues/17073
36+ LANG = "en_US.UTF-8";
37+ LC_ALL = "en_US.UTF-8";
38+ } // lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc") {
39+ LOCALE_ARCHIVE = "${pkgs.buildPackages.glibcLocales}/lib/locale/locale-archive";
40+ })
41+ ''
42+ function markup() {
43+ local -n srcDs=$1
44+ local -n mixDs=$2
45+ local -n includedModules=$3
46+ local destDir=$4
47+ local tixFile=$5
48+
49+ local hpcMarkupCmd=("hpc" "markup" "--destdir=$destDir")
50+ for srcDir in "''${srcDs[@]}"; do
51+ hpcMarkupCmd+=("--srcdir=$srcDir")
52+ done
53+
54+ for mixDir in "''${mixDs[@]}"; do
55+ hpcMarkupCmd+=("--hpcdir=$mixDir")
56+ done
57+
58+ for module in "''${includedModules[@]}"; do
59+ hpcMarkupCmd+=("--include=$module")
60+ done
61+
62+ hpcMarkupCmd+=("$tixFile")
63+
64+ echo "''${hpcMarkupCmd[@]}"
65+ eval "''${hpcMarkupCmd[@]}"
66+ }
67+
68+ function sumTix() {
69+ local -n includedModules=$1
70+ local -n tixFs=$2
71+ local outFile="$3"
72+
73+ if (( "''${#tixFs[@]}" > 0 )); then
74+ local hpcSumCmd=("hpc" "sum" "--union" "--output=$outFile")
75+
76+ for module in "''${includedModules[@]}"; do
77+ hpcSumCmd+=("--include=$module")
78+ done
79+
80+ for tixFile in "''${tixFs[@]}"; do
81+ hpcSumCmd+=("$tixFile")
82+ done
83+
84+ echo "''${hpcSumCmd[@]}"
85+ eval "''${hpcSumCmd[@]}"
86+ else
87+ # If there are no tix files we output an empty tix file so that we can
88+ # markup an empty HTML coverage report. This is preferable to failing to
89+ # output a HTML report.
90+ echo 'Tix []' > $outFile
91+ fi
92+ }
93+
94+ function findModules() {
95+ local -n result=$1
96+ local -n searchDirs=$2
97+ local pattern=$3
98+
99+ for dir in "''${searchDirs[@]}"; do
100+ pushd $dir
101+ local temp=()
102+ mapfile -d $'\0' temp < <(find ./ -type f \
103+ -wholename "$pattern" -not -name "Paths*" \
104+ -exec basename {} \; \
105+ | sed "s/\.mix$//" \
106+ | tr "\n" "\0")
107+ result+=("''${temp[@]}")
108+ popd
109+ done
110+ }
111+
112+ mkdir -p $out/nix-support
113+ mkdir -p $out/share/hpc/vanilla/mix/
114+ mkdir -p $out/share/hpc/vanilla/tix/${name}
115+ mkdir -p $out/share/hpc/vanilla/html/${name}
116+
117+ local srcDirs=${toBashArray srcDirs}
118+ local mixDirs=${toBashArray mixDirs}
119+
120+ # Copy out mix files used for this report
121+ for dir in "''${mixDirs[@]}"; do
122+ if [ -d "$dir" ]; then
123+ cp -R "$dir" $out/share/hpc/vanilla/mix/
124+ fi
125+ done
126+
127+ local mixModules=()
128+ # Mix modules for all packages in "mixLibraries"
129+ findModules mixModules mixDirs "*.mix"
130+
131+ # We need to make a distinction between library "exposed-modules" and
132+ # "other-modules" used in test suites:
133+ # - "exposed-modules" are addressed as "$library-$version-$hash/module"
134+ # - "other-modules" are addressed as "module"
135+ #
136+ # This complicates the code required to find the mix modules. For a given mix directory:
137+ #
138+ # mix
139+ # └── ntp-client-0.0.1
140+ # └── ntp-client-0.0.1-gYjRsBHUCaHX7ENcjHnw5
141+ # ├── Network.NTP.Client.mix
142+ # ├── Network.NTP.Client.Packet.mix
143+ # └── Network.NTP.Client.Query.mix
144+ #
145+ # Iff ntp-client uses "other-modules" in a test suite, both:
146+ # - "mix/ntp-client-0.0.1", and
147+ # - "mix/ntp-client-0.0.1/ntp-client-0.0.1-gYjRsBHUCaHX7ENcjHnw5"
148+ # need to be provided to hpc as search directories.
149+ #
150+ # I'd prefer to just exclude "other-modules", but I can't think of an easy
151+ # way to do that in bash.
152+ #
153+ # Here we expand the search dirs and modify the mix dirs accordingly:
154+ for dir in "''${mixDirs[@]}"; do
155+ local otherModulesSearchDirs=()
156+ # Simply consider any directory with a mix file as a search directory.
157+ mapfile -d $'\0' otherModulesSearchDirs < <(find $dir -type f \
158+ -wholename "*.mix" \
159+ -exec dirname {} \; \
160+ | uniq \
161+ | tr "\n" "\0")
162+ mixDirs+=("''${otherModulesSearchDirs[@]}")
163+ done
164+
165+ local tixFiles=()
166+ ${lib.concatStringsSep "\n" (builtins.map (check: ''
167+ if [ -d "${check}/share/hpc/vanilla/tix" ]; then
168+ pushd ${check}/share/hpc/vanilla/tix
169+
170+ tixFile="$(find . -iwholename "*.tix" -type f -print -quit)"
171+ local newTixFile=$out/share/hpc/vanilla/tix/${check.name}/"$(basename $tixFile)"
172+
173+ mkdir -p "$(dirname $newTixFile)"
174+ # Copy over the tix file verbatim
175+ cp "$tixFile" "$newTixFile"
176+
177+ # Add the tix file to our list
178+ tixFiles+=("$newTixFile")
179+
180+ # Create a coverage report for *just that check* affecting any of the
181+ # "mixLibraries"
182+ markup srcDirs mixDirs mixModules "$out/share/hpc/vanilla/html/${check.name}/" "$newTixFile"
183+
184+ popd
185+ fi
186+ '') checks)
187+ }
188+
189+ # Sum tix files to create a tix file with tix information from all tests in
190+ # the package and markup a HTML report from this info.
191+ local sumTixFile="$out/share/hpc/vanilla/tix/${name}/${name}.tix"
192+ local markupOutDir="$out/share/hpc/vanilla/html/${name}"
193+
194+ # Sum all of our tix files
195+ sumTix mixModules tixFiles "$sumTixFile"
196+
197+ # Markup a HTML report
198+ markup srcDirs mixDirs mixModules "$markupOutDir" "$sumTixFile"
199+
200+ # Provide a HTML zipfile and Hydra links
201+ ( cd "$markupOutDir" ; zip -r $out/share/hpc/vanilla/${name}-html.zip . )
202+ echo "report coverage $markupOutDir/hpc_index.html" >> $out/nix-support/hydra-build-products
203+ echo "file zip $out/share/hpc/vanilla/${name}-html.zip" >> $out/nix-support/hydra-build-products
204+ ''
lib/default.nixnew file+346
@@ -0,0 +1,346 @@
1+{ pkgs, stdenv, lib, haskellLib, recurseIntoAttrs, srcOnly }:
2+
3+
4+with haskellLib;
5+
6+let
7+ # Why `final.buildPackages.buildPackages.gitMinimal`?
8+ # Why not just final.buildPackages.gitMinimal?
9+ #
10+ # It turns out `git` depends on `gdb` in a round about way:
11+ # git -> openssh -> libfido2 -> systemd -> python libxml -> Cython -> gdb
12+ # Somewhere in that chain there should perhaps be a `buildPackages` so
13+ # that the `gdb` that is used is not the one for debugging code in
14+ # the `final` (but instead the one for debugging code in
15+ # `final.buildPackages`).
16+ #
17+ # Using `final.buildPackages.git` causes two problems:
18+ #
19+ # * Multiple versions of `git` (and that dependency chain
20+ # to `gdb` are needed when cross compiling).
21+ # * When `gdb` does not exist for `js`, so when cross
22+ # compiling with ghcjs `final.buildPackages.git` fails
23+ # to build at all.
24+ inherit (pkgs.buildPackages.buildPackages) gitMinimal;
25+
26+in {
27+ # Within the package components, these are the attribute names of
28+ # nested attrsets.
29+ subComponentTypes = [
30+ "sublibs"
31+ "foreignlibs"
32+ "exes"
33+ "tests"
34+ "benchmarks"
35+ ];
36+
37+ foldrAttrVals = f: z: attrs:
38+ lib.foldr (g: acc: g acc) z (lib.mapAttrsToList (_name: f) attrs);
39+
40+ foldComponents = tys: f: z: conf:
41+ let
42+ comps = conf.components or {};
43+ # ensure that comps.library exists and is not null.
44+ libComp = acc: if (comps.library or null) != null then f comps.library acc else acc;
45+ subComps = acc:
46+ lib.foldr
47+ (ty: acc': foldrAttrVals f acc' (comps.${ty} or {}))
48+ acc
49+ tys;
50+ in libComp (subComps z);
51+
52+ getAllComponents = foldComponents subComponentTypes (c: acc: [c] ++ acc) [];
53+
54+ componentPrefix = {
55+ sublibs = "lib";
56+ foreignlibs = "flib";
57+ exes = "exe";
58+ tests = "test";
59+ benchmarks = "bench";
60+ };
61+
62+ # For looking up the components attribute based on the cabal component type
63+ prefixComponent =
64+ lib.listToAttrs (
65+ lib.mapAttrsToList (value: name: { inherit name value; })
66+ componentPrefix);
67+
68+ applyComponents = f: config:
69+ let
70+ comps = config.components;
71+ applyLibrary = cname: f { cname = config.package.identifier.name; ctype = "lib"; };
72+ applySubComp = ctype: cname: f { inherit cname; ctype = componentPrefix.${ctype} or (throw "Missing component mapping for ${ctype}."); };
73+ isBuildable = comp:
74+ config.package.buildable # Set manually in a module (allows whole packages to be disabled)
75+ && comp.buildable # Set based on `buildable` in `.cabal` files
76+ && comp.planned; # Set if the component was in the `plan.json`
77+ buildableAttrs = lib.filterAttrs (n: isBuildable);
78+ libComp = if comps.library == null || !(isBuildable comps.library)
79+ then {}
80+ else lib.mapAttrs applyLibrary (removeAttrs comps (subComponentTypes ++ [ "setup" ]));
81+ subComps = lib.mapAttrs
82+ (ctype: attrs: lib.mapAttrs (applySubComp ctype) (buildableAttrs attrs))
83+ (builtins.intersectAttrs (lib.genAttrs subComponentTypes (_: null)) comps);
84+ in subComps // libComp;
85+
86+ isLibrary = componentId: componentId.ctype == "lib";
87+ isExe = componentId: componentId.ctype == "exe";
88+ isTest = componentId: componentId.ctype == "test";
89+ isBenchmark = componentId: componentId.ctype == "bench";
90+ isExecutableType = componentId:
91+ isExe componentId
92+ || isTest componentId
93+ || isBenchmark componentId;
94+ mayHaveExecutable = componentId:
95+ isExecutableType componentId;
96+
97+ # Was there a reference to the package source in the `cabal.project` or `stack.yaml` file.
98+ # This is used to make the default `packages` list for `shellFor`.
99+ isLocalPackage = p: p.isLocal or false;
100+ selectLocalPackages = ps: lib.filterAttrs (n: p: p != null && isLocalPackage p) ps;
101+
102+ # if it's a project package it has a src attribute set with an origSubDir attribute.
103+ # project packages are a subset of localPackages
104+ isProjectPackage = p: p.isProject or false;
105+ selectProjectPackages = ps: lib.filterAttrs (n: p: p != null && isLocalPackage p && isProjectPackage p) ps;
106+
107+ # Format a componentId as it should appear as a target on the
108+ # command line of the setup script.
109+ componentTarget = componentId:"${componentId.ctype}:${componentId.cname}";
110+
111+ # Remove null or empty values from an attrset.
112+ optionalHooks = lib.filterAttrs (_: hook: hook != null && hook != "");
113+
114+ # Avoid pkgs.callPackage for now. It does a lot of nonsense with OOP
115+ # style programming that we should avoid until we know we want it.
116+
117+ # weakCallPackage: call a function or (importable expression)
118+ # with scope + args.
119+ #
120+ # weakCallPackage scope f args
121+ # will call f (scope // args)
122+ #
123+ # weakCallpackage scope ./path args
124+ # will call the expression at ./path with (scope // args)
125+ #
126+ weakCallPackage = scope: f: args:
127+ let f' = if lib.isFunction f then f else import f;
128+ args' = (builtins.intersectAttrs (builtins.functionArgs f') scope) // args;
129+ in f' args';
130+
131+ # Collect all (transitive) Haskell library dependencies of a
132+ # component.
133+ ## flatLibDepends :: Component -> [Package]
134+ flatLibDepends = component:
135+ let
136+ makePairs = map (p: rec { key=val.name; val=(p.components.library or p); });
137+ closure = builtins.genericClosure {
138+ startSet = makePairs component.depends;
139+ operator = {val,...}: makePairs val.config.depends;
140+ };
141+ in map ({val,...}: val) closure;
142+
143+
144+ # Extracts a selection of components from a Haskell package set.
145+ #
146+ # This can be used to filter out all test suites or benchmarks of
147+ # your project, so that they can be built in Hydra.
148+ #
149+ # For example:
150+ #
151+ # tests = collectComponents "tests" (package: package.identifier.name == "mypackage") hsPkgs;
152+ #
153+ # Will result in moving:
154+ # from: hsPkgs.mypackage.components.tests.unit-tests
155+ # to: tests.mypackage.unit-tests
156+ #
157+ collectComponents = group: packageSel: haskellPackages:
158+ let packageToComponents = name: package:
159+ # look for the components with this group if there are any
160+ let components = package.components.${group} or {};
161+ # set recurseForDerivations unless it's a derivation itself (e.g. the "library" component) or an empty set
162+ in if lib.isDerivation components || components == {}
163+ then components
164+ else recurseIntoAttrs components;
165+ packageFilter = name: package: (package.isHaskell or false) && packageSel package;
166+ filteredPkgs = lib.filterAttrs packageFilter haskellPackages;
167+ # at this point we can filter out packages that don't have any of the given kind of component
168+ packagesByComponent = lib.filterAttrs (_: components: components != {}) (lib.mapAttrs packageToComponents filteredPkgs);
169+ in recurseIntoAttrs packagesByComponent;
170+
171+ # Equivalent to collectComponents with (_: true) as selection function.
172+ # Useful for pre-filtered package-set.
173+ #
174+ # For example:
175+ #
176+ # myHaskellPackages = selectProjectPackages hsPkgs;
177+ # myTests = collectComponents' "tests" myHaskellPackages;
178+ collectComponents' = group: collectComponents group (_: true);
179+
180+ # Extracts a selection of 'checks' from a Haskell package set.
181+ #
182+ # This can be used to collect all the test runs in your project, so that can be run in CI.
183+ collectChecks = packageSel: haskellPackages:
184+ let packageFilter = name: package: (package.isHaskell or false) && packageSel package;
185+ in recurseIntoAttrs (lib.mapAttrs (_: p: p.checks) (lib.filterAttrs packageFilter haskellPackages));
186+
187+ # Equivalent to collectChecks with (_: true) as selection function.
188+ # Useful for pre-filtered package-set.
189+ collectChecks' = collectChecks (_: true);
190+
191+ # Replacement for lib.cleanSourceWith that has a subDir argument.
192+ inherit (import ./clean-source-with.nix { inherit lib; }) cleanSourceWith;
193+
194+ # Use cleanSourceWith to filter just the files needed for a particular
195+ # component of a package
196+ cleanCabalComponent = import ./clean-cabal-component.nix { inherit lib cleanSourceWith; };
197+
198+ # Clean git directory based on `git ls-files --recurse-submodules`
199+ cleanGit = import ./clean-git.nix {
200+ inherit lib cleanSourceWith;
201+ git = gitMinimal;
202+ inherit (pkgs.buildPackages.buildPackages) runCommand;
203+ };
204+
205+ # Some times it is handy to temporarily use a relative path between git
206+ # repos. If the repos are individually cleaned this is not possible
207+ # (since the cleaned version of one repo will never include the files
208+ # of the other).
209+ #
210+ # `cleanGits` allows us to specify a root directory and any number of
211+ # sub directories containing git repos.
212+ #
213+ # See docs/user-guide/clean-git.md for details of how to use this
214+ # with `cabalProject`.
215+ cleanGits = { src, gitDirs, name ? null, caller ? "cleanGits" }@args:
216+ let
217+ # List of filters, one for each git directory.
218+ filters = builtins.map (subDir:
219+ (pkgs.haskell-nix.haskellLib.cleanGit {
220+ src = pkgs.haskell-nix.haskellLib.cleanSourceWith {
221+ inherit src subDir;
222+ };
223+ }).filter) gitDirs;
224+ in pkgs.haskell-nix.haskellLib.cleanSourceWith {
225+ inherit src name caller;
226+ # Keep files that match any of the filters
227+ filter = path: type: pkgs.lib.any (f: f path type) filters;
228+ };
229+
230+ # Check a test component
231+ check = import ./check.nix {
232+ inherit stdenv lib haskellLib;
233+ };
234+
235+ # Do coverage of a package
236+ coverageReport = import ./cover.nix {
237+ inherit stdenv lib haskellLib pkgs;
238+ };
239+
240+ # Do coverage of a project
241+ projectCoverageReport = import ./cover-project.nix {
242+ inherit stdenv lib haskellLib pkgs;
243+ };
244+
245+ # Use `isCrossHost` to identify when we are cross compiling and
246+ # the code we are producing will not run on the build system
247+ # without an emulator.
248+ # In most cases we do not want to treat musl as a cross compiler.
249+ # For instance when building ghc we want to include ghci.
250+ isCrossHost = stdenv.hostPlatform != stdenv.buildPlatform
251+ && !(stdenv.buildPlatform.isLinux && stdenv.hostPlatform.isMusl && stdenv.buildPlatform.linuxArch == stdenv.hostPlatform.linuxArch);
252+ # This is the same as isCrossHost but for use when building ghc itself
253+ isCrossTarget = stdenv.targetPlatform != stdenv.hostPlatform
254+ && !(stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && stdenv.hostPlatform.linuxArch == stdenv.targetPlatform.linuxArch);
255+ # Native musl build-host-target combo
256+ isNativeMusl = stdenv.hostPlatform.isMusl
257+ && stdenv.buildPlatform == stdenv.hostPlatform
258+ && stdenv.hostPlatform == stdenv.targetPlatform;
259+
260+ # Takes a version number, module or list of modules (for cabalProject)
261+ # and converts it to an list of project modules. This allows
262+ # the use of "1.0.0.0" or { version = "1.0.0.0"; ... }
263+ versionOrModToMods = versionOrMod:
264+ if lib.isString versionOrMod
265+ then [{ version = versionOrMod; }]
266+ else if lib.isList versionOrMod
267+ then versionOrMod
268+ else [versionOrMod];
269+
270+ # Find the resolver in the stack.yaml file and fetch it if a sha256 value is provided
271+ fetchResolver = import ./fetch-resolver.nix {
272+ inherit (pkgs.buildPackages) pkgs;
273+ };
274+
275+ inherit (import ./cabal-project-parser.nix {
276+ inherit pkgs;
277+ }) parseIndexState parseSourceRepositoryPackages parseRepositories parseSourceRepositoryPackageBlock parseRepositoryBlock;
278+
279+
280+ cabalToNixpkgsLicense = import ./spdx/cabal.nix pkgs;
281+
282+ # This function is like
283+ # `src + (if subDir == "" then "" else "/" + subDir)`
284+ # however when `includeSiblings` is set it maintains
285+ # `src.origSrc` if there is one and instead adds to
286+ # `src.origSubDir`. It uses `cleanSourceWith` when possible
287+ # to keep `cleanSourceWith` support in the result.
288+ appendSubDir = { src, subDir, includeSiblings ? false }:
289+ if subDir == ""
290+ then src
291+ else
292+ haskellLib.cleanSourceWith {
293+ inherit src subDir includeSiblings;
294+ };
295+
296+ # Givin a `src` split it into a `root` path (based on `src.origSrc` if
297+ # present) and `subDir` (based on `src.origSubDir). The
298+ # `root` will still use the `filter` of `src` if there was one.
299+ rootAndSubDir = src: rec {
300+ subDir = src.origSubDir or "";
301+ root =
302+ if subDir == ""
303+ then src # if there was no subdir use the original src
304+ else
305+ # Use `cleanSourceWith` to make sure the `filter` is still used
306+ if src ? origSrc && src ? filter
307+ then haskellLib.cleanSourceWith {
308+ name = src.name or "source" + "-root";
309+ src = src.origSrc;
310+ # Not passing src.origSubDir so that the result points `origSrc`
311+ inherit (src) filter;
312+ }
313+ else src.origSrc or src; # If there is a subDir and origSrc (but no filter) use origSrc
314+ };
315+
316+ # Run evalModules passing the project function argument (m) as a module along with
317+ # the the a projectType module (../modules/cabal-project.nix or ../modules/stack-project.nix).
318+ # The resulting config is then passed to the project function's implementation.
319+ evalProjectModule = projectType: m: f:
320+ let project = f
321+ (lib.evalModules {
322+ modules = (if builtins.isList m then m else [m]) ++ [
323+ # Include ../modules/cabal-project.nix or ../modules/stack-project.nix
324+ (import ../modules/project-common.nix)
325+ (import projectType)
326+ # Pass the pkgs and the buildProject to the modules
327+ ({ config, lib, ... }: {
328+ _module.args = {
329+ inherit pkgs;
330+ # to make it easy to depends on build packages in, eg., shell definition:
331+ inherit (project) buildProject;
332+ };
333+ inherit (project) hsPkgs;
334+ })
335+ ];
336+ }).config;
337+ in project;
338+
339+ # Converts from a `compoent.depends` value to a library derivation.
340+ # In the case of sublibs the `depends` value should already be the derivation.
341+ dependToLib = d: d.components.library or d;
342+
343+ projectOverlays = import ./project-overlays.nix {
344+ inherit lib haskellLib;
345+ };
346+}
lib/failed-cabal-configure.nixnew file+9
@@ -0,0 +1,9 @@
1+let
2+ configurationError = ./cabal-configure.out;
3+in
4+ # Trace the error output to make sure the user has a chance to see it
5+ # (even if the choose not to build anything from the project)
6+ __trace ''
7+ ERROR: cabal configure failed with:
8+ ${__readFile configurationError}
9+ '' { inherit configurationError; }
lib/fetch-external.nixnew file+16
@@ -0,0 +1,16 @@
1+# Provides a function for fetching a GitHub repo from a JSON spec,
2+# overridable with the given entry on the NIX_PATH.
3+
4+let
5+ overrideWith = import ./override-with.nix;
6+in
7+ { name, specJSON, override }:
8+ let
9+ spec = builtins.fromJSON (builtins.readFile specJSON);
10+ in
11+ overrideWith override
12+ (builtins.fetchTarball {
13+ inherit name;
14+ url = "${spec.url}/archive/${spec.rev}.tar.gz";
15+ inherit (spec) sha256;
16+ })
lib/fetch-resolver.nixnew file+37
@@ -0,0 +1,37 @@
1+# Find the resolver in the stack.yaml file and fetch it if a sha256 value is provided
2+{ pkgs }:
3+{ src
4+, stackYaml ? "stack.yaml"
5+, resolverSha256 ? null
6+}:
7+let
8+ srcDir = src.origSrcSubDir or src;
9+
10+ # Using origSrcSubDir bypasses any cleanSourceWith so that it will work when
11+ # access to the store is restricted. If origSrc was already in the store
12+ # you can pass the project in as a string.
13+ rawStackYaml = builtins.readFile (srcDir + "/${stackYaml}");
14+
15+ # Determine the resolver as it may point to another file we need
16+ # to look at.
17+ resolver =
18+ let
19+ rs = pkgs.lib.lists.concatLists (
20+ pkgs.lib.lists.filter (l: l != null)
21+ (builtins.map (l: builtins.match "^resolver: *(.*)" l)
22+ (pkgs.lib.splitString "\n" rawStackYaml)));
23+ in
24+ pkgs.lib.lists.head (rs ++ [ null ]);
25+
26+ # If we found a resolver and we have a resolverSha256 then we should download it.
27+ fetchedResolver =
28+ if resolver != null && resolverSha256 != null
29+ then pkgs.fetchurl {
30+ url = resolver;
31+ sha256 = resolverSha256;
32+ }
33+ else if resolver != null && __pathExists (srcDir + "/${resolver}")
34+ then pkgs.copyPathToStore (srcDir + "/${resolver}")
35+ else null;
36+
37+in { inherit resolver fetchedResolver; }
lib/ghcjs-project.nixnew file+218
@@ -0,0 +1,218 @@
1+# IMPORTANT: This is for building ghcjs, not for building with
2+# ghcjs. To build with ghcjs then just replace `haskell-nix`
3+# with `pkgsCross.ghcjs.haskell-nix`.
4+#
5+# For the time being we can't really treat ghcjs like a
6+# regular ghc (with different target). We need this as a
7+# stop-gap measure until ghcjs can be treated like a regular
8+# ghc.
9+#
10+# `haskell-nix.ghcjsProject` wraps `haskell-nix.cabalProject'`
11+# for use with the ghcjs source. It is exposed to allow GHCJS
12+# developers to work on the GHCJS code in a nix-shell with
13+# `shellFor`. It takes thes the clean src (from fetched
14+# source or local source that has been cleaned with cleanGit.
15+# It configures the source and passes it onto `cabalProject`
16+# along with the necessary modules.
17+#
18+# It also adds `configureInputs` and `bootInputs` that a
19+# needed for configuring the source and booting the compiler
20+# once it is built. These are added to the `hsPkgs.shellFor`
21+# of the project.
22+{ pkgs }:
23+{ src
24+, compiler-nix-name
25+, ghc ? pkgs.buildPackages.haskell-nix.compiler.${compiler-nix-name}
26+, ghcjsVersion # Version in the ghcjs.cabal file (that we will replace)
27+, ghcVersion ? ghc.version
28+, happy ? pkgs.haskell-nix.tool compiler-nix-name "happy" {
29+ index-state = pkgs.haskell-nix.internalHackageIndexState;
30+ version = "1.19.12";
31+ materialized = ../materialized/ghcjs/happy + "/${compiler-nix-name}";
32+ }
33+, alex ? pkgs.haskell-nix.tool compiler-nix-name "alex" {
34+ index-state = pkgs.haskell-nix.internalHackageIndexState;
35+ version = "3.2.5";
36+ materialized = ../materialized/ghcjs/alex + "/${compiler-nix-name}";
37+ }
38+, cabal-install ?
39+ if (builtins.compareVersions ghcjsVersion "8.10.0.0" >= 0)
40+ then pkgs.haskell-nix.tool compiler-nix-name "cabal" {
41+ index-state = pkgs.haskell-nix.internalHackageIndexState;
42+ version = "3.6.2.0";
43+ materialized = ../materialized/ghcjs/cabal + "/${compiler-nix-name}";
44+ }
45+ else pkgs.haskell-nix.tool compiler-nix-name "cabal" {
46+ index-state = pkgs.haskell-nix.internalHackageIndexState;
47+ version = "3.2.0.0";
48+ # Cabal 3.2.1.0 no longer supports he mix of `cabal-version`,
49+ # lack of `custom-setup` and `v1-install` used by ghcjs boot.
50+ cabalProjectLocal = ''
51+ constraints: Cabal <3.2.1.0
52+ '';
53+ materialized = ../materialized/ghcjs/cabal + "/${compiler-nix-name}";
54+ }
55+, overrideBootPackages ? []
56+, patches ? []
57+, ...
58+}@args:
59+let
60+ isGhcjs88 = builtins.compareVersions ghcjsVersion "8.8.0.0" >= 0;
61+ isGhcjs810 = builtins.compareVersions ghcjsVersion "8.10.0.0" >= 0;
62+
63+ # Inputs needed to configure the GHCJS source tree
64+ configureInputs = with pkgs; [
65+ perl
66+ autoconf
67+ automake
68+ python3
69+ ] ++ [
70+ ghc
71+ happy
72+ alex
73+ cabal-install
74+ ];
75+
76+ inherit (pkgs.buildPackages) emscriptenupstream emscripten emsdk;
77+
78+ # Inputs needed to boot the GHCJS compiler
79+ bootInputs = with pkgs.buildPackages; [
80+ # We used to pin nodejs to the 12 series, as strings can only be half the length in node 14+
81+ # see https://github.com/nodejs/node/issues/33960
82+ # Large TH splices are likely broken.
83+ # TODO reinstate the pin of find a work around for ghcjs to send TH splice in chunks.
84+ nodejs-18_x
85+ makeWrapper
86+ xorg.lndir
87+ gmp
88+ pkgconfig
89+ ]
90+ ++ [ ghc cabal-install emsdk ];
91+ # Configured the GHCJS source
92+ configured-src = (pkgs.runCommandCC "configured-ghcjs-src" {
93+ buildInputs = configureInputs;
94+ inherit src patches;
95+ } ''
96+ export HOME=$(pwd)
97+ mkdir $HOME/.cabal
98+ touch $HOME/.cabal/config
99+ cp -r "$src" "$out"
100+ chmod -R +w "$out"
101+ cd "$out"
102+
103+ for p in $patches
104+ do
105+ patch -p1 <$p
106+ done
107+
108+ # TODO: Find a better way to avoid impure version numbers
109+ sed -i 's/RELEASE=NO/RELEASE=YES/' ghc/configure.ac
110+ sed -i 's/${ghcjsVersion}/${ghcVersion}/' ghcjs.cabal
111+
112+ ${
113+ # TODO: How to actually fix this?
114+ # Seems to work fine and produce the right files.
115+ pkgs.lib.optionalString (!isGhcjs88) ''
116+ touch ghc/includes/ghcautoconf.h
117+ mkdir -p ghc/compiler/vectorise
118+ mkdir -p ghc/utils/haddock/haddock-library/vendor
119+ ''
120+ }
121+
122+ rm -rf utils/pkg-cache/ghc
123+ cp -r ${ghc.generated} utils/pkg-cache/ghc
124+
125+ for a in integer-gmp base unix; do
126+ cp ${../overlays/patches/config.sub} ghc/libraries/$a/config.sub
127+ cp ${../overlays/patches/config.guess} ghc/libraries/$a/config.guess
128+ chmod +w ghc/libraries/$a/config.*
129+ done
130+
131+ sed -i 's/_AC_PROG_CC_C99/AC_PROG_CC_C99/' ghc/aclocal.m4
132+
133+ patchShebangs .
134+ sed -i 's/gcc /cc /g' utils/makePackages.sh
135+ ./utils/makePackages.sh copy
136+
137+ for a in integer-gmp base unix; do
138+ cp ${../overlays/patches/config.sub} lib/boot/pkg/$a/config.sub
139+ done
140+ ${ # it just so happens that all existing uses of overriding boot packages
141+ # need to be installed right after template-haskell
142+ # if at some point we would need to insert them at different points
143+ # then we will have gto come up with something more clever
144+ builtins.concatStringsSep "\n" (map ({name, src}: ''
145+ rm -rf $out/lib/boot/pkg/${name}
146+ cp -r ${src} $out/lib/boot/pkg/${name}
147+ sed -i 's/^ - ${name}$//g' $out/lib/boot/boot.yaml
148+ sed -i 's/^ - template-haskell$/ - template-haskell\n - ${name}/g' $out/lib/boot/boot.yaml
149+ echo "Added ${name} to boot.yaml"
150+ ''
151+ ) (pkgs.lib.reverseList overrideBootPackages))
152+ }
153+
154+ chmod -R +w $out/lib/boot/pkg
155+ '') // {
156+ # The configured source includes /nix/store paths and so filtering can fail.
157+ filterPath = { path, ... }: path;
158+ };
159+ # see https://github.com/ghcjs/ghcjs/issues/751 for the happy upper bound.
160+
161+ ghcjsProject = pkgs.haskell-nix.cabalProject' (
162+ (pkgs.lib.filterAttrs
163+ (n: _: !(builtins.any (x: x == n)
164+ [ "src" "ghcjsVersion" "ghcVersion" "happy" "alex" "cabal-install"
165+ "overrideBootPackages" "patches"])) args) // {
166+ src = configured-src;
167+ index-state = "2021-03-20T00:00:00Z";
168+ inherit compiler-nix-name;
169+ configureArgs = pkgs.lib.optionalString (isGhcjs88 && !isGhcjs810) "--constraint='Cabal >=3.0.2.0 && <3.1'";
170+ # If a package is in both build-depends and build-tool-depends multiple versions may
171+ # be in the `plan.json` file. Haskell.nix will pick the newer one, but when nbuilding
172+ # ghcjs 8.6 we need to use the older happy version.
173+ pkg-def-extras = pkgs.lib.optional (!isGhcjs88) (hackage: {
174+ packages.happy.revision = hackage.happy."1.19.9".revisions.default;
175+ });
176+ materialized = ../materialized + "/ghcjs/${compiler-nix-name}";
177+ modules = [
178+ {
179+ # we need ghc-boot in here for ghcjs.
180+ nonReinstallablePkgs = [ "rts" "ghc-heap" "ghc-prim" "integer-gmp" "integer-simple" "base"
181+ "deepseq" "array" "ghc-boot-th" "pretty" "template-haskell"
182+ "ghc-boot" "binary" "bytestring" "filepath" "directory" "containers"
183+ "time" "unix" "Win32" ];
184+ }
185+ (pkgs.lib.optionalAttrs (!isGhcjs88) {
186+ packages.Cabal.patches = [ ./../overlays/patches/Cabal/fix-data-dir.patch ];
187+ })
188+ {
189+ ghcOptions = ["-O2"];
190+ packages.ghcjs.doHaddock = false;
191+ packages.haddock-ghcjs.doHaddock = false;
192+ packages.haddock-api-ghcjs.doHaddock = false;
193+ packages.ghcjs.flags.no-wrapper-install = true;
194+ # set use-host-template-haskell. This *does*
195+ # work as we use a patched ghc to boot anyway.
196+ # (we apply https://github.com/ghcjs/ghc/commit/2918d88d4ef786b5f2801f6f77ac333cc56dde75 already)
197+ packages.ghcjs.flags.use-host-template-haskell = true;
198+ packages.ghc-api-ghcjs.flags.use-host-template-haskell = true;
199+ packages.ghcjs-th.flags.use-host-template-haskell = true;
200+ packages.ghc.flags.ghci = true;
201+ packages.ghci.flags.ghci = true;
202+ # packages.ghcjs.components.library.configureFlags = [ "-fno-wrapper-install" ];
203+ packages.ghcjs.components.library.build-tools = [ alex ];
204+ }
205+ ];
206+ });
207+in ghcjsProject // {
208+ # Add `configureInputs` and `bootInputs` to the shell
209+ hsPkgs = ghcjsProject.hsPkgs // {
210+ # Shell suitable for configuring and building a local copy of GHCJS
211+ shellFor = args: (ghcjsProject.hsPkgs.shellFor args).overrideAttrs (drv: {
212+ buildInputs = (drv.buildInputs or []) ++ configureInputs;
213+ nativeBuildInputs = (drv.nativeBuildInputs or []) ++ bootInputs;
214+ EMSDK = emsdk;
215+ });
216+ };
217+ inherit configureInputs bootInputs configured-src emscriptenupstream emscripten emsdk;
218+}
lib/hackageIndex.nixnew file+16
@@ -0,0 +1,16 @@
1+{ runCommand, cabal-install
2+, indexState ? "2019-04-24T21:34:04Z"
3+} :
4+let
5+ # To avoid downloading more data than necessary this will provide a base.
6+ cachedState = runCommand "hackage-${builtins.substring 0 4 indexState}" {} ''
7+ mkdir -p $out
8+ HOME=$out ${cabal-install}/bin/cabal update --index-state='${builtins.substring 0 4 indexState}-01-01T00:00:00Z'
9+ '';
10+in runCommand "hackage-${builtins.replaceStrings [":"] [""] indexState}" {} ''
11+ mkdir -p $out
12+ cp -r ${cachedState}/.cabal $out
13+ chmod +w -R $out/.cabal
14+ sed -i.back -e "s|${cachedState}|$out|g" $out/.cabal/config
15+ HOME=$out ${cabal-install}/bin/cabal update --index-state='${indexState}'
16+ ''
lib/host-map.nixnew file+34
@@ -0,0 +1,34 @@
1+stdenv:
2+# set a few default values so we don't depend on what's exported from
3+# hostPlatform from whatever nixpkgs set we are working against.
4+with { isLinux = false; isWindows = false; isDarwin = false; isFreeBSD = false;
5+ isOpenBSD = false; isNetBSD = false; isiOS = false; isAndroid = false;
6+ isGhcjs = false; isAsterius = false; isHurd = false;
7+ isx86 = false; isPowerPC = false; isAarch32 = false; isAarch64 = false;
8+ isMips = false; isWasm = false; isJavaScript = false;
9+ is32bit = false; is64bit = false; };
10+with stdenv.hostPlatform; {
11+ os = if isLinux then "Linux" else
12+ if isWindows then "Windows" else
13+ if isDarwin then "Osx" else
14+ if isFreeBSD then "Freebsd" else
15+ if isOpenBSD then "Openbsd" else
16+ if isNetBSD then "Netbsd" else
17+ if isHurd then "Hurd" else
18+ if isiOS then "Ios" else
19+ if isAndroid then "Android" else
20+ if isGhcjs then "Ghcjs" else
21+ if isAsterius then "Asterius" else
22+ throw "Unknown OS";
23+ arch = if isx86 && is32bit then "I386" else
24+ if isx86 && is64bit then "X86_64" else
25+ if isPowerPC && is32bit then "PPC" else
26+ if isPowerPC && is64bit then "PPC64" else
27+ if isAarch32 then "Arm" else
28+ if isAarch64 then "Aarch64" else
29+ if isMips then "Mips" else
30+ if isWasm && is32bit then "Wasm32" else
31+ if isWasm && is64bit then "Wasm64" else
32+ if isJavaScript then "JavaScript" else
33+ throw "Unknown Arch";
34+}
lib/import-and-filter-project.nixnew file+61
@@ -0,0 +1,61 @@
1+# This function takes the output of `callCabalProjectToNix` or
2+# `callStackToNix`. It imports the projectNix that was produced
3+# and combines it with the original source.
4+{ pkgs, haskellLib }:
5+{ projectNix, sourceRepos, src }:
6+let
7+ # Full source including possible relative paths form the
8+ # project directory.
9+ srcRoot = haskellLib.cleanSourceWith {
10+ name = if src ? name then "${src.name}-root" else "source-root";
11+ src = src.origSrc or src;
12+ filter = src.filter or (_: _: true);
13+ };
14+ # The sub directory containing the cabal.project or stack.yaml file
15+ projectSubDir' = src.origSubDir or ""; # With leading /
16+ projectSubDir = pkgs.lib.strings.removePrefix "/" projectSubDir'; # Without /
17+ projectSubDir'' = if projectSubDir == "" then "" else projectSubDir + "/"; # With trailing /
18+ project = import "${projectNix}${projectSubDir'}";
19+in project // {
20+ extras = hackage: let old = (project.extras hackage).packages; in {
21+ packages = pkgs.lib.attrsets.mapAttrs (name: value:
22+ if builtins.isFunction value
23+ then value
24+ else {...}@args: with pkgs.lib.strings;
25+ let
26+ oldPkg = import value args;
27+ packageInfo =
28+ if oldPkg.src ? url
29+ then {
30+ # The source is from a source-repository-package in a cabal.project file
31+ # and lib/call-cabal-project-to-nix.nix should have replaced the url with
32+ # an index into the sourceRepos list.
33+ isProject = false;
34+ packageSrc = pkgs.lib.lists.elemAt sourceRepos (toInt oldPkg.src.url);
35+ }
36+ else if !hasPrefix "${projectNix}" (toString oldPkg.src.content)
37+ then {
38+ # Source location does not match project prefix
39+ isProject = false;
40+ packageSrc = toString oldPkg.src.content;
41+ }
42+ else {
43+ # Source does match project prefix and it is not from a source repository
44+ isProject = true;
45+ packageSrc = haskellLib.appendSubDir {
46+ src = srcRoot;
47+ subDir = removePrefix "/" (removePrefix "${projectNix}"
48+ (toString oldPkg.src.content));
49+ includeSiblings = true; # Filtering sibling dirs of the package dir is done in the
50+ # component builder so that relative paths can be used to
51+ # reference project directories not in the package subDir.
52+ };
53+ };
54+ in oldPkg // {
55+ src = (pkgs.lib).mkDefault packageInfo.packageSrc;
56+ package = oldPkg.package // {
57+ isProject = (pkgs.lib).mkDefault packageInfo.isProject;
58+ };
59+ }) old;
60+ };
61+ }
lib/make-source-pins.nixnew file+11
@@ -0,0 +1,11 @@
1+# Writes the store paths of a list of sources into a file.
2+# If this derivation is built by Hydra, then the sources will
3+# be kept and will be available to download from the binary cache.
4+{ lib, writeTextFile
5+, sources # A list of paths
6+}:
7+
8+writeTextFile {
9+ name = "haskell.nix-source-pins";
10+ text = lib.concatMapStringsSep "\n" toString sources;
11+}
lib/materialize.nixnew file+168
@@ -0,0 +1,168 @@
1+{ pkgs, nix, runCommand, writeShellScript, checkMaterialization }@defaults:
2+{ sha256 ? null # Has to make this a fixed output derivation
3+, sha256Arg ? "sha256"
4+ # Name of the sha256 argument for more meaningful
5+ # error messages when checking the materialization.
6+, materialized # null or path where to find materialized version of
7+ # the output. If this is set but does not exist
8+ # the derivation will fail but with a message
9+ # advising how to populate it.
10+, this ? "this"
11+ # A name to use when referring to the thing currently being
12+ # materialized. Clients can pass in an attribute name or similar.
13+, reasonNotSafe ? null
14+ # Some times there a reasont the derivation will
15+ # not produce output that can be safely materialized.
16+ # Set this to a string explaining why and materialization
17+ # will not be used (if sha256 was set an error will be
18+ # displayed including the reasonNotSafe string).
19+, checkMaterialization ? defaults.checkMaterialization
20+ # When checkMaterialization is set the derivation
21+ # will be calculated the slow way (without using `sha256`
22+ # and `materialized`) the result will be used to check
23+ # `sha256` and `materialized` (if set).
24+}: derivation:
25+
26+let
27+ name = derivation.name + pkgs.lib.optionalString (derivation ? version) "-${derivation.version}";
28+
29+ traceIgnoringSha256 = reason: x:
30+ if sha256 != null
31+ then builtins.trace ("Warning: ignoring sha256 for " + name + " " + reason) x
32+ else x;
33+
34+ traceIgnoringMaterialized = reason: x:
35+ if materialized != null
36+ then builtins.trace ("Warning: ignoring materialized for " + name + " " + reason) x
37+ else x;
38+
39+ traceWhenChecking = message: x:
40+ if checkMaterialization
41+ then builtins.trace message x
42+ else x;
43+
44+ unchecked =
45+ let
46+ sha256message = "${name}: To make ${this} a fixed-output derivation but not materialized, set `${sha256Arg}` to the output of the 'calculateMaterializedSha' script in 'passthru'.";
47+ materializeMessage = "${name}: To materialize ${this} entirely, pass a writable path as the `materialized` argument and run the 'updateMaterialized' script in 'passthru'.";
48+ in if reasonNotSafe != null
49+ then
50+ # Warn the user if they tried to pin stuff down when it is not safe
51+ traceIgnoringSha256 reasonNotSafe
52+ (traceIgnoringMaterialized reasonNotSafe calculateNoHash)
53+ else if materialized != null
54+ then calculateUseMaterialized
55+ else if sha256 != null
56+ then
57+ # Let the user know how to materialize if they want to.
58+ traceWhenChecking materializeMessage calculateUseHash
59+ else # materialized == null && sha256 == null
60+ # Let the user know how to calculate a sha256 or materialize if they want to.
61+ traceWhenChecking sha256message (traceWhenChecking materializeMessage calculateNoHash);
62+
63+ # Build fully and check the hash and materialized versions
64+ checked =
65+ # Let the user know what we are checking. This is useful for debugging issues
66+ # where materialization fails to prevent infinite recurstion when:
67+ # checkMaterialization = true;
68+ (if materialized != null
69+ then __trace "Checking materialization in ${toString materialized}"
70+ else x: x)
71+ runCommand name {} (''
72+ ERR=$(mktemp -d)/errors.txt
73+ ''
74+ + (pkgs.lib.optionalString (sha256 != null) ''
75+ NEW_HASH=$(${calculateMaterializedSha})
76+ if [[ ${sha256} != $NEW_HASH ]]; then
77+ echo Changes to ${name} not reflected in ${sha256Arg}
78+ diff -ru ${calculateUseHash} ${calculateNoHash} || true
79+ echo "Calculated hash for ${name} was not ${sha256}. New hash is :" >> $ERR
80+ echo " ${sha256Arg} = \"$NEW_HASH\";" >> $ERR
81+ else
82+ echo ${sha256Arg} used for ${name} is correct
83+ fi
84+ '')
85+ + (
86+ if materialized != null && !__pathExists materialized
87+ then ''
88+ echo "Materialized nix used for ${name} is missing. To fix run: ${updateMaterialized}" >> $ERR
89+ cat $ERR
90+ false
91+ ''
92+ else
93+ (pkgs.lib.optionalString (materialized != null && __pathExists materialized) ''
94+ if diff -qr ${materialized} ${calculateNoHash} &>/dev/null; then
95+ echo materialized nix used for ${name} is correct
96+ else
97+ echo Changes to plan not reflected in materialized nix for ${name}
98+ diff -ru ${materialized} ${calculateNoHash} || true
99+ echo "Materialized nix used for ${name} incorrect. To fix run: ${updateMaterialized}" >> $ERR
100+ fi
101+ '')
102+ + ''
103+ if [[ -e $ERR ]]; then
104+ cat $ERR
105+ false
106+ else
107+ cp -Lr ${unchecked} $out
108+ # Make sure output files can be removed from the sandbox
109+ chmod -R +w $out
110+ fi
111+ '')
112+ );
113+
114+ hashArgs = {
115+ outputHashMode = "recursive";
116+ outputHashAlgo = "sha256";
117+ outputHash = sha256;
118+ };
119+ calculateNoHash = derivation;
120+ calculateUseHash =
121+ # Use `cp -Lr` here to get rid of symlinks so we know the result
122+ # can be safely materialized (no symlinks to the store).
123+ runCommand name hashArgs ''
124+ cp -Lr ${derivation} $out
125+ # Make sure output files can be removed from the sandbox
126+ chmod -R +w $out
127+ '';
128+ calculateUseMaterialized =
129+ assert materialized != null;
130+ assert __pathExists materialized;
131+ { outPath = materialized; inherit name; };
132+ calculateMaterializedSha =
133+ writeShellScript "calculateSha" ''${nix}/bin/nix-hash --base32 --type sha256 ${calculateNoHash}'';
134+
135+ # Generate the materialized files in a particular path.
136+ generateMaterialized =
137+ writeShellScript "generateMaterialized" ''
138+ TARGET=$1
139+
140+ # Crudely try and guard people from writing to the Nix store accidentally
141+ if [[ ''${TARGET##/nix/store/} != $TARGET ]]; then
142+ echo "Attempted to write to $TARGET in the Nix store! Put your materialized files somewhere else!"
143+ exit 1
144+ fi
145+
146+ # Generate the files
147+ mkdir -p $TARGET
148+ rm -rf $TARGET
149+ cp -r ${calculateNoHash} "$TARGET"
150+ chmod -R +w "$TARGET"
151+ '';
152+ # Update the materialized files at 'materialized', which must already be set.
153+ updateMaterialized =
154+ assert materialized != null;
155+ writeShellScript "updateMaterialized" ''${generateMaterialized} ${toString materialized}'';
156+
157+ # Materialized location was specified, but the files are not there.
158+ missingMaterialized = materialized != null && !__pathExists materialized;
159+
160+ # Use the checked version if requested or if the `materialized` version
161+ # is missing (perhaps deleted or not created yet).
162+ result = if checkMaterialization || missingMaterialized
163+ then checked
164+ else unchecked;
165+
166+in result
167+ # Also include the scripts for fixing materialization files in passthru.
168+ // { passthru = (result.passthru or {}) // { inherit generateMaterialized updateMaterialized calculateMaterializedSha; }; }
lib/override-with.nixnew file+9
@@ -0,0 +1,9 @@
1+# overrideWith - Allow the user to override the given default path
2+# with a NIX_PATH entry.
3+override: default:
4+ let
5+ try = builtins.tryEval (builtins.findFile builtins.nixPath override);
6+ in if try.success then
7+ builtins.trace "using search host <${override}>" try.value
8+ else
9+ default
lib/pkgconf-nixpkgs-map.nixnew file+189
@@ -0,0 +1,189 @@
1+# pkgconfig entries to nixpkgs map
2+# See ../docs/dev/pkg-map.md
3+pkgs:
4+ pkgs.lib.mapAttrs (name: value: [ value ]) pkgs //
5+ {
6+ # Based on https://github.com/NixOS/cabal2nix/blob/11c68fdc79461fb74fa1dfe2217c3709168ad752/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs#L23
7+ "adns" = [ pkgs."adns" ];
8+ "alsa" = [ pkgs."alsaLib" ];
9+ "alut" = [ pkgs."freealut" ];
10+ "appindicator-0.1" = [ pkgs."libappindicator-gtk2" ];
11+ "appindicator3-0.1" = [ pkgs."libappindicator-gtk3" ];
12+ "asound" = [ pkgs."alsaLib" ];
13+ "atk" = [ pkgs."atk" ];
14+ "b2" = [ pkgs."libb2" ];
15+ "bdw-gc" = [ pkgs."boehmgc" ];
16+ "bz2" = [ pkgs."bzip2" ];
17+ "c++" = []; # What is that?
18+ "cairo-1.0" = [ pkgs."cairo" ];
19+ "cairo-gobject" = [ pkgs."cairo" ];
20+ "cairo-pdf" = [ pkgs."cairo" ];
21+ "cairo-ps" = [ pkgs."cairo" ];
22+ "cairo-svg" = [ pkgs."cairo" ];
23+ "crypt" = []; # provided by glibc
24+ "curses" = [ pkgs."ncurses" ];
25+ "dbusmenu-glib-0.4" = [ pkgs."libdbusmenu" ];
26+ "dbusmenu-gtk3-0.4" = [ pkgs."libdbusmenu-gtk3" ]; # do we also need pkgs."gtk3"
27+ "dl" = []; # provided by glibc
28+ "fftw3" = [ pkgs."fftw" ];
29+ "fftw3f" = [ pkgs."fftwFloat" ];
30+ "freetype2" = [ pkgs."freetype" ];
31+ "gconf" = [ pkgs."GConf" ];
32+ "gconf-2.0" = [ pkgs."GConf" ];
33+ "gdk-2.0" = [ pkgs."gtk2" ];
34+ "gdk-3.0" = [ pkgs."gtk3" ];
35+ "gdk-pixbuf-2.0" = [ (pkgs."gdk-pixbuf" or pkgs."gdk_pixbuf") ];
36+ "gdk-x11-2.0" = [ pkgs."gdk_x11" ];
37+ "gdk-x11-3.0" = [ pkgs."gtk3" ];
38+ "gio-2.0" = [ pkgs."glib" ];
39+ "glib-2.0" = [ pkgs."glib" ];
40+ "GL" = [ pkgs."libGL" ];
41+ "GLU" = [ pkgs."libGLU" pkgs."libGL" ];
42+ "glut" = [ pkgs."freeglut" pkgs."libGLU" pkgs."libGL" ];
43+ "gnome-keyring" = [ pkgs."gnome-keyring" ];
44+ "gnome-keyring-1" = [ pkgs."libgnome-keyring" ];
45+ "gnome-vfs-2.0" = [ pkgs."gnome-vfs" ];
46+ "gnome-vfs-module-2.0" = [ pkgs."gnome-vfs_module" ];
47+ "gobject-2.0" = [ pkgs."glib" ];
48+ "gmodule-2.0" = [ pkgs."glib" ];
49+ "gobject-introspection-1.0" = [ pkgs."gobject-introspection" ];
50+ "graphene-gobject-1.0" = [ pkgs."graphene" ];
51+ "gstreamer-audio-0.10" = [ pkgs."gst-plugins-base" ];
52+ "gstreamer-audio-1.0" = [ pkgs."gst-plugins-base" ];
53+ "gstreamer-base-0.10" = [ pkgs."gst-plugins-base" ];
54+ "gstreamer-base-1.0" = [ pkgs."gst-plugins-base" ];
55+ "gstreamer-controller-0.10" = [ pkgs."gstreamer" ];
56+ "gstreamer-dataprotocol-0.10" = [ pkgs."gstreamer" ];
57+ "gstreamer-net-0.10" = [ pkgs."gst-plugins-base" ];
58+ "gstreamer-plugins-base-0.10" = [ pkgs."gst-plugins-base" ];
59+ "gstreamer-video-1.0" = [ pkgs."gst-plugins-base" ];
60+ "gthread-2.0" = [ pkgs."glib" ];
61+ "gtk+-2.0" = [ pkgs."gtk2" ];
62+ "gtk+-3.0" = [ pkgs."gtk3" ];
63+ "gtk-x11-2.0" = [ pkgs."gtk_x11" ];
64+ "gtkglext-1.0" = [ pkgs.gnome2.gtkglext pkgs.gtk2 ];
65+ "gtksourceview-3.0" = [ pkgs."gtksourceview3" ];
66+ "harfbuzz-gobject" = [ pkgs."harfbuzz" ];
67+ "hidapi-libusb" = [ pkgs."hidapi" ];
68+ "icudata" = [ pkgs."icu" ];
69+ "icui18n" = [ pkgs."icu" ];
70+ "icu-i18n" = [ pkgs."icu" ];
71+ "icuuc" = [ pkgs."icu" ];
72+ "idn" = [ pkgs."libidn" ];
73+ "IL" = [ pkgs."libdevil" ];
74+ "ImageMagick" = [ pkgs."imagemagick" ];
75+ "Imlib2" = [ pkgs."imlib2" ];
76+ "iw" = [ pkgs."wirelesstools" ];
77+ "jack" = [ pkgs."libjack2" ];
78+ "javascriptcoregtk-3.0" = [ pkgs."webkitgtk24x-gtk3" ]; # These are the old APIs, of which 2.4 is the last provider, so map directly to that.
79+ "javascriptcoregtk-4.0" = [ pkgs."webkitgtk" ];
80+ "jpeg" = [ pkgs."libjpeg" ];
81+ "jvm" = [ pkgs."jdk" ];
82+ "lapack" = [ pkgs."liblapack" ];
83+ "lber" = [ pkgs."openldap" ];
84+ "ldap" = [ pkgs."openldap" ];
85+ "libavutil" = [ pkgs."ffmpeg" ];
86+ "libcrypto" = [ pkgs."openssl".dev ];
87+ "libfreenect" = [ pkgs."freenect" ];
88+ "libgsasl" = [ pkgs."gsasl" ];
89+ "liboath" = [ pkgs."liboauth" ];
90+ "libpcre" = [ pkgs."pcre" ];
91+ "libqrencode" = [ pkgs."qrencode" ];
92+ "libR" = [ pkgs."R" ];
93+ "librsvg-2.0" = [ pkgs."librsvg" ];
94+ "libsecp256k1" = [ pkgs."secp256k1" ];
95+ "libsoup-2.4" = [ pkgs."libsoup" ];
96+ "libsoup-gnome-2.4" = [ pkgs."libsoup" ];
97+ "libssl" = [ pkgs."openssl".dev ];
98+ "libsystemd" = [ pkgs."systemd" ];
99+ "libudev" = [ pkgs."systemd" ];
100+ "libusb-1.0" = [ pkgs."libusb1" ];
101+ "libxml-2.0" = [ pkgs."libxml2" ];
102+ "libzip" = [ pkgs."libzip" ];
103+ "libzmq" = [ pkgs."zeromq" ];
104+ "libzstd" = [ pkgs."zstd" ];
105+ "m" = []; # in stdenv
106+ "magic" = [ pkgs."file" ];
107+ "MagickWand" = [ pkgs."imagemagick" ];
108+ "mnl" = [ pkgs."libmnl" ];
109+ "mpi" = [ pkgs."openmpi" ];
110+ "ncursesw" = [ pkgs."ncurses" ];
111+ "nix-expr" = [ pkgs."nix" ];
112+ "nix-main" = [ pkgs."nix" ];
113+ "nix-store" = [ pkgs."nix" ];
114+ "netsnmp" = [ pkgs."net_snmp" ];
115+ "notify" = [ pkgs."libnotify" ];
116+ "odbc" = [ pkgs."unixODBC" ];
117+ "openblas" = [ pkgs."openblasCompat" ];
118+ "opencv" = [ pkgs."opencv3" ];
119+ "panelw" = [ pkgs."ncurses" ];
120+ "pangocairo" = [ pkgs."pango" ];
121+ "pcap" = [ pkgs."libpcap" ];
122+ "pfs-1.2" = [ pkgs."pfstools" ];
123+ "png" = [ pkgs."libpng" ];
124+ "poppler-glib" = [ pkgs."poppler" ];
125+ "poppler-cpp" = [ pkgs."poppler" ];
126+ "pq" = [ pkgs."postgresql" ];
127+ "libpq" = [ pkgs."postgresql" ];
128+ "pthread" = [];
129+ "pulse" = [ pkgs."libpulseaudio" ];
130+ "pulse-simple" = [ pkgs."libpulseaudio" ];
131+ "python-3.3" = [ pkgs."python33" ];
132+ "python-3.4" = [ pkgs."python34" ];
133+ "Qt5Core" = [ pkgs."qt5" ];
134+ "Qt5Gui" = [ pkgs."qt5" ];
135+ "Qt5Qml" = [ pkgs."qt5" ];
136+ "Qt5Quick" = [ pkgs."qt5" ];
137+ "Qt5Widgets" = [ pkgs."qt5" ];
138+ "quadprog" = [ pkgs."QuadProgpp" ];
139+ "rt" = []; # in glibc
140+ "rtlsdr" = [ pkgs."rtl-sdr" ];
141+ "ruby1.8" = [ pkgs."ruby" ];
142+ "sass" = [ pkgs."libsass" ];
143+ "sctp" = [ pkgs."lksctp-tools" ]; # This is linux-specific, we should create a common attribute if we ever add sctp support for other systems.
144+ "sdl2" = [ pkgs."SDL2" ];
145+ "sndfile" = [ pkgs."libsndfile" ];
146+ "sodium" = [ pkgs."libsodium" ];
147+ "sqlite3" = [ pkgs."sqlite" ];
148+ "ssh2" = [ pkgs."libssh2" ];
149+ "statgrab" = [ pkgs."libstatgrab" ];
150+ "stdc++" = []; # What is that?
151+ "stdc++.dll" = []; # What is that?
152+ "systemd-journal" = [ pkgs."systemd" ];
153+ "tag_c" = [ pkgs."taglib" ];
154+ "taglib_c" = [ pkgs."taglib" ];
155+ "tensorflow" = [ pkgs."libtensorflow" ];
156+ "udev" = [ pkgs."systemd" ];
157+ "uuid" = [ pkgs."libossp_uuid" ];
158+ "vte-2.91" = [ pkgs."vte_291" ];
159+ "wayland-client" = [ pkgs."wayland" ];
160+ "wayland-cursor" = [ pkgs."wayland" ];
161+ "wayland-egl" = [ pkgs."libGL" ];
162+ "wayland-server" = [ pkgs."wayland" ];
163+ "webkit2gtk" = [ pkgs."webkitgtk" ];
164+ "webkit2gtk-4.0" = [ pkgs."webkitgtk" ];
165+ "webkit2gtk-web-extension-4.0" = [ pkgs."webkitgtk" ];
166+ "webkitgtk-3.0" = [ pkgs."webkitgtk24x-gtk3" ]; # These are the old APIs, of which 2.4 is the last provider, so map directly to that
167+ "vulkan" = [ pkgs."vulkan-loader" ]; # vulkan-loader provides vulkan.pc file for pkg-config.
168+ "X11" = [ pkgs.xorg."libX11" ];
169+ "x11" = [ pkgs.xorg."xlibsWrapper" ];
170+ "xau" = [ pkgs.xorg."libXau" ];
171+ "Xcursor" = [ pkgs.xorg."libXcursor" ];
172+ "xerces-c" = [ pkgs."xercesc" ];
173+ "Xext" = [ pkgs.xorg."libXext" ];
174+ "xft" = [ pkgs.xorg."libXft" ];
175+ "Xi" = [ pkgs.xorg."libXi" ];
176+ "Xinerama" = [ pkgs.xorg."libXinerama" ];
177+ "xkbcommon" = [ pkgs."libxkbcommon" ];
178+ "xml2" = [ pkgs."libxml2" ];
179+ "Xpm" = [ pkgs.xorg."libXpm" ];
180+ "Xrandr" = [ pkgs.xorg."libXrandr" ];
181+ "Xrender" = [ pkgs.xorg."libXrender" ];
182+ "Xss" = [ pkgs.xorg."libXScrnSaver" ];
183+ "Xtst" = [ pkgs.xorg."libXtst" ];
184+ "Xxf86vm" = [ pkgs.xorg."libXxf86vm" ];
185+ "yaml" = [ pkgs."libyaml" ];
186+ "yaml-0.1" = [ pkgs."libyaml" ];
187+ "z" = [ pkgs."zlib" ];
188+ "zmq" = [ pkgs."zeromq" ];
189+}
lib/project-overlays.nixnew file+37
@@ -0,0 +1,37 @@
1+{
2+ lib
3+, haskellLib
4+}: {
5+ # Provide a devshell profile (https://github.com/numtide/devshell),
6+ # adapted from the project normal shell.
7+ devshell = final: prev: {
8+ devshell = let
9+ in {
10+ packages = final.shell.nativeBuildInputs
11+ # devshell does not use pkgs.mkShell / pkgs.stdenv.mkDerivation,
12+ # so we need to explicit required dependencies which
13+ # are provided implicitely by stdenv when using the normal shell:
14+ ++ (lib.filter lib.isDerivation final.shell.stdenv.defaultNativeBuildInputs)
15+ ++ [ final.pkgs.buildPackages.binutils ];
16+ env = lib.mapAttrsToList lib.nameValuePair {
17+ inherit (final.shell) CABAL_CONFIG NIX_GHC_LIBDIR;
18+ };
19+ };
20+ };
21+
22+ # Provides easily accessible attrset for each type of
23+ # components belonging to the project packages.
24+ projectComponents = final: prev: {
25+ # local project packages:
26+ packages = haskellLib.selectProjectPackages final.hsPkgs;
27+ # set of all exes (as first level entries):
28+ exes = lib.foldl' lib.mergeAttrs { } (map (p: p.components.exes) (lib.attrValues final.packages));
29+ # `tests` are the test suites which have been built.
30+ tests = haskellLib.collectComponents' "tests" final.packages;
31+ # `benchmarks` (only built, not run).
32+ benchmarks = haskellLib.collectComponents' "benchmarks" final.packages;
33+ # `checks` collect results of executing the tests:
34+ checks = haskellLib.collectChecks' final.packages;
35+ };
36+
37+}
lib/spdx/cabal.nixnew file+19
@@ -0,0 +1,19 @@
1+let
2+ spdx = import ./parser.nix;
3+in pkgs:
4+with builtins;
5+let
6+ # For better performance these are not in the
7+ # let block below (probably helps by increasing
8+ # the sharing)
9+ license-map = import ../cabal-licenses.nix pkgs;
10+ otherLicenseWarning = lic:
11+ trace "WARNING: license \"${lic}\" not found"
12+ license-map.LicenseRef-OtherLicense;
13+in license:
14+let
15+ licenses = spdx.compound-expression license;
16+in if licenses == []
17+ then otherLicenseWarning license
18+ else map (lic: license-map.${lic} or (otherLicenseWarning lic))
19+ (pkgs.lib.unique (head licenses)._1)
lib/spdx/licenses.nixnew file+27
@@ -0,0 +1,27 @@
1+pkgs:
2+with builtins; let
3+ spdxJson = pkgs.buildPackages.spdx-license-list-data.json or pkgs.buildPackages.spdx-license-list-data;
4+ materialized' = ../../materialized + "/spdx-${spdxJson.version}";
5+ licensesJSON = fromJSON (replaceStrings
6+ [ "\\u0026" "\\u0027" "\\u003d" ]
7+ [ "&" "'" "=" ]
8+ (readFile "${pkgs.buildPackages.haskell-nix.materialize {
9+ materialized = if pathExists materialized' then materialized' else null;
10+ } (pkgs.buildPackages.runCommand "spdx-json" { inherit (spdxJson) version; } ''
11+ mkdir $out
12+ cp ${spdxJson}/json/licenses.json $out
13+ '')
14+ }/licenses.json")
15+ );
16+ dropFour = s: substring 0 (stringLength s - 4) s;
17+ toSpdx = lic: with lic;
18+ { spdxId = licenseId;
19+ shortName = licenseId;
20+ fullName = name;
21+ url = dropFour detailsUrl + "html";
22+ free = isOsiApproved || lic.isFsfLibre or false;
23+ };
24+ toNamedValue = lic: { name = lic.spdxId; value = lic; };
25+in
26+
27+listToAttrs (map (l: toNamedValue (toSpdx l)) licensesJSON.licenses)
lib/spdx/parser.nixnew file+115
@@ -0,0 +1,115 @@
1+let String = { mempty = ""; mappend = a: b: a + b; };
2+ List = { singleton = x: [x]; };
3+ pair = a: b: { _1 = a; _2 = b; };
4+ Pair = { pure = s: pair String.mempty s;
5+ mappend = a: b: pair (String.mappend a._1 b._1) b._2;
6+ map = f: p: pair (f p._1) p._2;
7+ };
8+ compose = f: g: x: f (g x);
9+in with builtins; rec {
10+ # Parser a = String -> [(a, String)]
11+ string = str: s:
12+ let strL = stringLength str;
13+ sL = stringLength s;
14+ in if str == substring 0 strL s
15+ then [ (pair str (substring strL sL s)) ]
16+ else [];
17+
18+ regex = capture_groups: re: s:
19+ let result = match "(${re})(.*)" s;
20+ in if result == null
21+ then []
22+ else [ (pair (elemAt result 0) (elemAt result (1 + capture_groups))) ];
23+
24+ # Left-biased choice
25+ choice = cs: s:
26+ if cs == []
27+ then []
28+ else let c = head cs;
29+ cs' = tail cs;
30+ result = c s;
31+ in if result == []
32+ then choice cs' s
33+ else result;
34+
35+ optional = p: s:
36+ let result = p s;
37+ in if result == []
38+ then [ (Pair.pure s) ]
39+ else result;
40+
41+ chain = ps: s:
42+ if ps == []
43+ then [ (Pair.pure s) ]
44+ else let p = head ps;
45+ ps' = tail ps;
46+ result = p s;
47+ in if result == []
48+ then []
49+ else let r = head result;
50+ rest = chain ps' r._2;
51+ in if rest == []
52+ then []
53+ else let r' = head rest;
54+ in [ (Pair.mappend r r') ];
55+
56+ idstring = regex 0 "[-\.0-9a-zA-Z]+";
57+
58+ license-ref = let documentref = chain [ (string "DocumentRef-")
59+ idstring
60+ (string ":")
61+ ];
62+ in chain [
63+ (optional documentref)
64+ (string "LicenseRef-")
65+ idstring
66+ ];
67+
68+ simple-expression = choice [ license-ref
69+ (chain [ idstring (string "+") ])
70+ idstring
71+ ];
72+
73+ compound-expression = let wrap = compose (map (Pair.map List.singleton));
74+ in choice [
75+ (s: let result = simple-expression s;
76+ in if result == []
77+ then []
78+ else let r = head result;
79+ rest = chain [(string " WITH ") idstring ] r._2;
80+ in if rest == []
81+ then []
82+ else [(pair r._1 (head rest)._2)]
83+ )
84+ (s: let result = simple-expression s;
85+ in if result == []
86+ then []
87+ else let r = head result;
88+ firstLicense = r._1;
89+ operator = choice [ (string " AND ")
90+ (string " OR ")
91+ ]
92+ r._2;
93+ in if operator == []
94+ then []
95+ else let s' = (head operator)._2;
96+ licenses = compound-expression s';
97+ in if licenses == []
98+ then []
99+ else let ls = head licenses;
100+ in [(pair ([firstLicense] ++ ls._1) ls._2)]
101+ )
102+ (wrap simple-expression)
103+ (s: let openParen = string "(" s;
104+ in if openParen == []
105+ then []
106+ else let result = compound-expression (head openParen)._2;
107+ in if result == []
108+ then []
109+ else let r = head result;
110+ closeParen = string ")" r._2;
111+ in if closeParen == []
112+ then []
113+ else [(pair r._1 (head closeParen)._2)])
114+ ];
115+}
lib/spdx/test.nixnew file+32
@@ -0,0 +1,32 @@
1+let spdx = import ./parser.nix;
2+in {
3+ idstringF = [ (spdx.idstring "$@#!$") ];
4+ idstringP = [ (spdx.idstring "blah") ];
5+
6+ license-refF = [ (spdx.license-ref "LicenseRef-$@#!$") ];
7+ license-refP = [ (spdx.license-ref "LicenseRef-blah")
8+ (spdx.license-ref "DocumentRef-beep:LicenseRef-boop")
9+ ];
10+
11+ simple-expressionF = [ (spdx.simple-expression "$@#!$") ];
12+ simple-expressionP = [
13+ (spdx.simple-expression "blah")
14+ (spdx.simple-expression "blah+")
15+ (spdx.simple-expression "LicenseRef-blah")
16+ (spdx.simple-expression "DocumentRef-beep:LicenseRef-boop")
17+ ];
18+
19+ compound-expressionF = [ (spdx.compound-expression "$@#!$") ];
20+ compound-expressionP = [
21+ (spdx.compound-expression "blah")
22+ (spdx.compound-expression "blah+")
23+ (spdx.compound-expression "LicenseRef-blah")
24+ (spdx.compound-expression "DocumentRef-beep:LicenseRef-boop")
25+ (spdx.compound-expression "(blah)")
26+ (spdx.compound-expression "beep OR boop")
27+ (spdx.compound-expression "beep AND boop")
28+ (spdx.compound-expression "beep WITH boop")
29+ (spdx.compound-expression "beep AND (boop OR blap)")
30+ (spdx.compound-expression "(beep AND ((boop OR ((blap)))))")
31+ ];
32+}
lib/stack-cache-generator.nixnew file+107
@@ -0,0 +1,107 @@
1+# Generate cache entries for dependencies of package defined in `src`
2+
3+{ src
4+, stackYaml ? "stack.yaml"
5+, sha256map ? null
6+ # An alternative to adding `# nix-sha256:` comments into the
7+ # stack.yaml file:
8+ # sha256map =
9+ # { "https://github.com/jgm/pandoc-citeproc"."0.17"
10+ # = "0dxx8cp2xndpw3jwiawch2dkrkp15mil7pyx7dvd810pwc22pm2q"; };
11+, branchMap ? null
12+ # A way to specify in which branch a git commit can
13+ # be found
14+, lookupBranch ?
15+ if branchMap != null
16+ then { location, tag, ...}: branchMap."${location}"."${tag}" or null
17+ else _: null
18+, resolverSha256 ? null
19+, nix-tools
20+, evalPackages
21+, ...
22+}@args:
23+let
24+ inherit (evalPackages) runCommand;
25+ inherit (evalPackages.haskell-nix) haskellLib;
26+
27+ # We only care about the stackYaml file. If src is a local directory
28+ # we want to avoid recalculating the cache unless the stack.yaml file
29+ # changes.
30+
31+ inherit (haskellLib.fetchResolver {
32+ inherit src stackYaml resolverSha256;
33+ }) resolver fetchedResolver;
34+
35+ # Filter just the stack yaml file and any resolver yaml file it points to.
36+ maybeCleanedSource = haskellLib.cleanSourceWith {
37+ inherit src;
38+ filter = path: type:
39+ let
40+ origSrc = if src ? _isLibCleanSourceWith then src.origSrc else src;
41+ origSubDir = if src ? _isLibCleanSourceWithEx then src.origSubDir else "";
42+ relPath = evalPackages.lib.removePrefix (toString origSrc + origSubDir + "/") path;
43+
44+ # checks if path1 is a parent directory for path2
45+ isParent = path1: path2: evalPackages.lib.hasPrefix "${path1}/" path2;
46+
47+ in
48+ (relPath == stackYaml)
49+ || (resolver != null && (relPath == resolver || isParent relPath resolver))
50+ ;
51+ };
52+
53+ # All repos served via ssh or git protocols are usually private
54+ private = url: evalPackages.lib.substring 0 4 url != "http";
55+
56+ repos = builtins.fromJSON (builtins.readFile (evalPackages.runCommand "stack-repos" {
57+ buildInputs = [ nix-tools ];
58+ } ''
59+ TMP=$(mktemp -d)
60+ cd $TMP
61+ cp -r "${maybeCleanedSource}/." $TMP
62+ chmod -R +w $TMP
63+ substituteInPlace ${stackYaml} --replace "# nix-sha256:" "nix-sha256:"
64+ ${evalPackages.lib.optionalString (fetchedResolver != null) ''
65+ substituteInPlace ${stackYaml} --replace "${resolver}" "${fetchedResolver}"
66+ ''}
67+ stack-repos --stack-yaml ${stackYaml}
68+ cp repos.json $out
69+ ''));
70+
71+ cabalName = path: builtins.readFile (evalPackages.runCommand "cabal-name" {
72+ buildInputs = [ nix-tools ];
73+ } ''
74+ cabal-name ${path} > $out
75+ '');
76+
77+ hashPath = path:
78+ builtins.readFile (evalPackages.runCommand "hash-path" { preferLocalBuild = true; }
79+ "echo -n $(${evalPackages.nix}/bin/nix-hash --type sha256 --base32 ${path}) > $out");
80+in with evalPackages.lib;
81+concatMap (dep:
82+ let
83+ is-private = private dep.url;
84+ sha256 =
85+ if dep.sha256 != null then dep.sha256
86+ else if sha256map != null then sha256map."${dep.url}"."${dep.rev}"
87+ else null;
88+ branch = lookupBranch {
89+ location = dep.url;
90+ tag = dep.rev;
91+ };
92+ pkgsrc =
93+ if !is-private && sha256 != null
94+ then evalPackages.fetchgit {
95+ inherit (dep) url rev;
96+ inherit sha256;
97+ }
98+ else builtins.fetchGit ({
99+ inherit (dep) url rev;
100+ } // evalPackages.lib.optionalAttrs (branch != null) { ref = branch; });
101+ in map (subdir: {
102+ name = cabalName "${pkgsrc}/${subdir}";
103+ inherit (dep) url rev;
104+ inherit is-private;
105+ sha256 = if !is-private then hashPath pkgsrc else null;
106+ } // (optionalAttrs (subdir != "") { inherit subdir; }))
107+ (dep.subdirs or [ "" ])) repos
lib/system-nixpkgs-map.nixnew file+136
@@ -0,0 +1,136 @@
1+# Maps of system pkg references from cabal file to nixpkgs pkgs.
2+# library name (from `extra-libraries` field of `.cabal` file) -> nixpkgs package(s) mapping.
3+# This mapping is used to construct the `libs` component attribute.
4+# See ../docs/tutorials/pkg-map.md
5+pkgs:
6+
7+with pkgs;
8+
9+let
10+ # On windows systems we need these to be propagatedBuildInputs so that the DLLs will be found.
11+ gcclibs = if pkgs.stdenv.hostPlatform.isWindows then [
12+ pkgs.windows.mcfgthreads
13+ # If we just use `pkgs.buildPackages.gcc.cc` here it breaks the `th-dlls` test. TODO figure out why exactly.
14+ (pkgs.buildPackages.runCommand "gcc-only" { nativeBuildInputs = [ pkgs.buildPackages.xorg.lndir ]; } ''
15+ mkdir $out
16+ lndir ${pkgs.buildPackages.gcc.cc} $out
17+ '')
18+ ] else [];
19+in
20+# -- linux
21+{ crypto = [ openssl ];
22+ "c++" = []; # no libc++
23+ "stdc++" = gcclibs;
24+ "stdc++-6" = gcclibs;
25+ gcc_s_seh-1 = gcclibs;
26+ gcc_s = gcclibs;
27+ gcc = gcclibs;
28+ ssl = [ openssl ];
29+ z = [ zlib ];
30+ m = []; # Included with ghc
31+ pcap = [ libpcap ];
32+ pthread = null; # available by default
33+ GL = [ libGL ];
34+ GLEW = [ glew ];
35+ GLU = [ libGLU ];
36+ alut = [ freealut ];
37+ X11 = with xorg; [ libX11 ];
38+ Xrandr = [ xorg.libXrandr ];
39+ Xrender = [ xorg.libXrender ];
40+ Xss = [ xorg.libXScrnSaver ];
41+ Xext = [ xorg.libXext ];
42+ Xi = [ xorg.libXi ];
43+ Xxf86vm = [ xorg.libXxf86vm ];
44+ Xcursor = [ xorg.libXcursor ];
45+ Xinerama = [ xorg.libXinerama ];
46+ mysqlclient = [ mysql ];
47+ Imlib2 = [ imlib2 ];
48+ asound = [ alsaLib ];
49+ ffi = null;
50+ bz2 = [ bzip2 ];
51+ util = [ utillinux ];
52+ magic = [ file ];
53+ pq = [ postgresql ];
54+ libpq = [ postgresql ];
55+ iconv = [ libiconv ];
56+ lapack = [ liblapack ];
57+ boost_atomic = [ boost ];
58+ boost_chrono = [ boost ];
59+ boost_container = [ boost ];
60+ boost_context = [ boost ];
61+ boost_contract = [ boost ];
62+ boost_coroutine = [ boost ];
63+ boost_date_time = [ boost ];
64+ boost_fiber = [ boost ];
65+ boost_filesystem = [ boost ];
66+ boost_graph = [ boost ];
67+ boost_iostreams = [ boost ];
68+ boost_locale = [ boost ];
69+ boost_log_setup = [ boost ];
70+ boost_log = [ boost ];
71+ boost_math_c99f = [ boost ];
72+ boost_math_c99l = [ boost ];
73+ boost_math_c99 = [ boost ];
74+ boost_math_tr1f = [ boost ];
75+ boost_math_tr1l = [ boost ];
76+ boost_math_tr1 = [ boost ];
77+ boost_prg_exec_monitor = [ boost ];
78+ boost_program_options = [ boost ];
79+ boost_random = [ boost ];
80+ boost_regex = [ boost ];
81+ boost_serialization = [ boost ];
82+ boost_signals = [ boost ];
83+ boost_stacktrace_addr2line = [ boost ];
84+ boost_stacktrace_basic = [ boost ];
85+ boost_stacktrace_noop = [ boost ];
86+ boost_system = [ boost ];
87+ boost_thread = [ boost ];
88+ boost_timer = [ boost ];
89+ boost_type_erasure = [ boost ];
90+ boost_unit_test_framework = [ boost ];
91+ boost_wave = [ boost ];
92+ boost_wserialization = [ boost ];
93+ tensorflow = [ libtensorflow ];
94+ # odbc package requires unixODBC packages to be installed in order to successfully
95+ # compile C sources (https://github.com/fpco/odbc/blob/master/cbits/odbc.c)
96+ odbc = [ unixODBC ];
97+ opencv = [ opencv3 ];
98+ icuuc = [ icu ];
99+ icui18n = [ icu ];
100+ icu-i18n = [ icu ];
101+ icudata = [ icu ];
102+ vulkan = [ vulkan-loader ];
103+ sodium = [ libsodium ];
104+ gfortran = [ gfortran.cc.lib ];
105+ ssh2 = [ libssh2 ];
106+ gpiod = [ libgpiod ];
107+ png = [ libpng ];
108+ jpeg = [ libjpeg ];
109+ freenect_sync = [ freenect ];
110+ FLAC = [ flac ];
111+ mp3lame = [ lame ];
112+ tag_c = [ taglib ];
113+ jwt = [ libjwt ];
114+ GeoIP = [ geoip ];
115+ pulse-simple = [ libpulseaudio ];
116+ oath = [ liboauth ];
117+}
118+# -- windows
119+// { advapi32 = null; gdi32 = null; imm32 = null; msimg32 = null;
120+ shell32 = null; shfolder = null; shlwapi = null; user32 = null;
121+ ole32 = null; rpcrt4 = null;
122+ winmm = null; userenv = null;
123+ kernel32 = null; ws2_32 = null;
124+ # this should be bundled with gcc.
125+ # if it's not we have more severe
126+ # issues anyway.
127+ ssl32 = null; eay32 = [ openssl ];
128+ iphlpapi = null; # IP Help API
129+ msvcrt = null; # this is the libc
130+ Crypt32 = null;
131+ mswsock = null;
132+ bcrypt = null;
133+ }
134+# -- os x
135+# NB: these map almost 1:1 to the framework names
136+// darwin.apple_sdk.frameworks
lib/system-pkgs.nixnew file+16
@@ -0,0 +1,16 @@
1+# Cabal packages can depend on operating system packages. However
2+# package names vary between distributions - there is no standard.
3+#
4+# This file augments the nixpkgs package set with extra attributes
5+# from the system packages map file.
6+#
7+# This package set will be used when resolving system package
8+# dependencies of package descriptions.
9+
10+pkgs:
11+
12+ # Base packages.
13+ pkgs
14+
15+ # Apply the mapping.
16+ // import ./system-nixpkgs-map.nix pkgs
materialized/bootstrap/ghc8107/alex/.plan.nix/alex.nixnew file+160
@@ -0,0 +1,160 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "alex"; version = "3.2.4"; };
15+ license = "BSD-3-Clause";
16+ copyright = "(c) Chis Dornan, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Chris Dornan and Simon Marlow";
19+ homepage = "http://www.haskell.org/alex/";
20+ url = "";
21+ synopsis = "Alex is a tool for generating lexical analysers in Haskell";
22+ description = "Alex is a tool for generating lexical analysers in Haskell.\nIt takes a description of tokens based on regular\nexpressions and generates a Haskell module containing code\nfor scanning text efficiently. It is similar to the tool\nlex or flex for C/C++.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "AlexTemplate"
30+ "AlexTemplate-ghc"
31+ "AlexTemplate-ghc-nopred"
32+ "AlexTemplate-ghc-debug"
33+ "AlexTemplate-debug"
34+ "AlexWrapper-basic"
35+ "AlexWrapper-basic-bytestring"
36+ "AlexWrapper-strict-bytestring"
37+ "AlexWrapper-posn"
38+ "AlexWrapper-posn-bytestring"
39+ "AlexWrapper-monad"
40+ "AlexWrapper-monad-bytestring"
41+ "AlexWrapper-monadUserState"
42+ "AlexWrapper-monadUserState-bytestring"
43+ "AlexWrapper-gscan"
44+ ];
45+ extraSrcFiles = [
46+ "CHANGELOG.md"
47+ "README.md"
48+ "TODO"
49+ "alex.spec"
50+ "doc/Makefile"
51+ "doc/aclocal.m4"
52+ "doc/alex.1.in"
53+ "doc/alex.xml"
54+ "doc/config.mk.in"
55+ "doc/configure.ac"
56+ "doc/docbook-xml.mk"
57+ "doc/fptools.css"
58+ "examples/Makefile"
59+ "examples/Tokens.x"
60+ "examples/Tokens_gscan.x"
61+ "examples/Tokens_posn.x"
62+ "examples/examples.x"
63+ "examples/haskell.x"
64+ "examples/lit.x"
65+ "examples/pp.x"
66+ "examples/state.x"
67+ "examples/tiny.y"
68+ "examples/words.x"
69+ "examples/words_monad.x"
70+ "examples/words_posn.x"
71+ "src/Parser.y.boot"
72+ "src/Scan.x.boot"
73+ "src/ghc_hooks.c"
74+ "templates/GenericTemplate.hs"
75+ "templates/wrappers.hs"
76+ "tests/Makefile"
77+ "tests/simple.x"
78+ "tests/null.x"
79+ "tests/tokens.x"
80+ "tests/tokens_gscan.x"
81+ "tests/tokens_posn.x"
82+ "tests/tokens_bytestring.x"
83+ "tests/tokens_posn_bytestring.x"
84+ "tests/tokens_scan_user.x"
85+ "tests/tokens_strict_bytestring.x"
86+ "tests/tokens_monad_bytestring.x"
87+ "tests/tokens_monadUserState_bytestring.x"
88+ "tests/tokens_bytestring_unicode.x"
89+ "tests/basic_typeclass.x"
90+ "tests/basic_typeclass_bytestring.x"
91+ "tests/default_typeclass.x"
92+ "tests/gscan_typeclass.x"
93+ "tests/posn_typeclass.x"
94+ "tests/monad_typeclass.x"
95+ "tests/monad_typeclass_bytestring.x"
96+ "tests/monadUserState_typeclass.x"
97+ "tests/monadUserState_typeclass_bytestring.x"
98+ "tests/posn_typeclass_bytestring.x"
99+ "tests/strict_typeclass.x"
100+ "tests/unicode.x"
101+ ];
102+ extraTmpFiles = [];
103+ extraDocFiles = [];
104+ };
105+ components = {
106+ exes = {
107+ "alex" = {
108+ depends = [
109+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
110+ ] ++ (if flags.small_base
111+ then [
112+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
113+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
114+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
115+ (hsPkgs."directory" or (errorHandler.buildDepError "directory"))
116+ ]
117+ else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]);
118+ buildable = true;
119+ modules = [
120+ "AbsSyn"
121+ "CharSet"
122+ "DFA"
123+ "DFAMin"
124+ "DFS"
125+ "Info"
126+ "Map"
127+ "NFA"
128+ "Output"
129+ "Paths_alex"
130+ "Parser"
131+ "ParseMonad"
132+ "Scan"
133+ "Set"
134+ "Sort"
135+ "Util"
136+ "UTF8"
137+ "Data/Ranged"
138+ "Data/Ranged/Boundaries"
139+ "Data/Ranged/RangedSet"
140+ "Data/Ranged/Ranges"
141+ ];
142+ hsSourceDirs = [ "src" ];
143+ mainPath = [ "Main.hs" ] ++ [ "" ];
144+ };
145+ };
146+ tests = {
147+ "tests" = {
148+ depends = [
149+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
150+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
151+ ];
152+ build-tools = [
153+ (hsPkgs.buildPackages.alex.components.exes.alex or (pkgs.buildPackages.alex or (errorHandler.buildToolDepError "alex:alex")))
154+ ];
155+ buildable = true;
156+ mainPath = [ "test.hs" ];
157+ };
158+ };
159+ };
160+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc8107/alex/default.nixnew file+69
@@ -0,0 +1,69 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default;
8+ "process".revision = (((hackage."process")."1.6.13.2").revisions).default;
9+ "base".revision = (((hackage."base")."4.14.3.0").revisions).default;
10+ "rts".revision = (((hackage."rts")."1.0.1").revisions).default;
11+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
12+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
13+ "bytestring".revision = (((hackage."bytestring")."0.10.12.0").revisions).default;
14+ "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default;
15+ "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default;
16+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
17+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
18+ };
19+ compiler = {
20+ version = "8.10.7";
21+ nix-name = "ghc8107";
22+ packages = {
23+ "ghc-prim" = "0.6.1";
24+ "array" = "0.5.4.0";
25+ "integer-gmp" = "1.0.3.0";
26+ "process" = "1.6.13.2";
27+ "base" = "4.14.3.0";
28+ "rts" = "1.0.1";
29+ "time" = "1.9.3";
30+ "unix" = "2.7.2.2";
31+ "bytestring" = "0.10.12.0";
32+ "containers" = "0.6.5.1";
33+ "directory" = "1.3.6.0";
34+ "filepath" = "1.4.2.1";
35+ "deepseq" = "1.4.4.0";
36+ };
37+ };
38+ };
39+ extras = hackage:
40+ { packages = { alex = ./.plan.nix/alex.nix; }; };
41+ modules = [
42+ ({ lib, ... }:
43+ {
44+ packages = {
45+ "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
46+ };
47+ })
48+ ({ lib, ... }:
49+ {
50+ packages = {
51+ "containers".components.library.planned = lib.mkOverride 900 true;
52+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
53+ "process".components.library.planned = lib.mkOverride 900 true;
54+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
55+ "array".components.library.planned = lib.mkOverride 900 true;
56+ "bytestring".components.library.planned = lib.mkOverride 900 true;
57+ "unix".components.library.planned = lib.mkOverride 900 true;
58+ "alex".components.exes."alex".planned = lib.mkOverride 900 true;
59+ "base".components.library.planned = lib.mkOverride 900 true;
60+ "rts".components.library.planned = lib.mkOverride 900 true;
61+ "time".components.library.planned = lib.mkOverride 900 true;
62+ "deepseq".components.library.planned = lib.mkOverride 900 true;
63+ "filepath".components.library.planned = lib.mkOverride 900 true;
64+ "directory".components.library.planned = lib.mkOverride 900 true;
65+ "alex".components.tests."tests".planned = lib.mkOverride 900 true;
66+ };
67+ })
68+ ];
69+ }
materialized/bootstrap/ghc8107/happy-1.19.12/.plan.nix/happy.nixnew file+200
@@ -0,0 +1,200 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.12"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "HappyTemplate"
30+ "HappyTemplate-arrays"
31+ "HappyTemplate-arrays-coerce"
32+ "HappyTemplate-arrays-coerce-debug"
33+ "HappyTemplate-arrays-debug"
34+ "HappyTemplate-arrays-ghc"
35+ "HappyTemplate-arrays-ghc-debug"
36+ "HappyTemplate-coerce"
37+ "HappyTemplate-ghc"
38+ "GLR_Base"
39+ "GLR_Lib"
40+ "GLR_Lib-ghc"
41+ "GLR_Lib-ghc-debug"
42+ ];
43+ extraSrcFiles = [
44+ "ANNOUNCE"
45+ "CHANGES"
46+ "Makefile"
47+ "README.md"
48+ "TODO"
49+ "doc/Makefile"
50+ "doc/aclocal.m4"
51+ "doc/config.mk.in"
52+ "doc/configure.ac"
53+ "doc/docbook-xml.mk"
54+ "doc/fptools.css"
55+ "doc/happy.1.in"
56+ "doc/happy.xml"
57+ "examples/glr/nlp/Main.lhs"
58+ "examples/glr/nlp/Makefile"
59+ "examples/glr/nlp/README"
60+ "examples/glr/nlp/English.y"
61+ "examples/glr/nlp/Hugs.lhs"
62+ "examples/glr/Makefile"
63+ "examples/glr/Makefile.defs"
64+ "examples/glr/expr-eval/Main.lhs"
65+ "examples/glr/expr-eval/Makefile"
66+ "examples/glr/expr-eval/Expr.y"
67+ "examples/glr/expr-eval/README"
68+ "examples/glr/expr-eval/Hugs.lhs"
69+ "examples/glr/expr-tree/Main.lhs"
70+ "examples/glr/expr-tree/Makefile"
71+ "examples/glr/expr-tree/Expr.y"
72+ "examples/glr/expr-tree/README"
73+ "examples/glr/expr-tree/Tree.lhs"
74+ "examples/glr/expr-tree/Hugs.lhs"
75+ "examples/glr/highly-ambiguous/Main.lhs"
76+ "examples/glr/highly-ambiguous/Makefile"
77+ "examples/glr/highly-ambiguous/Expr.y"
78+ "examples/glr/highly-ambiguous/README"
79+ "examples/glr/highly-ambiguous/Hugs.lhs"
80+ "examples/glr/hidden-leftrec/Main.lhs"
81+ "examples/glr/hidden-leftrec/Makefile"
82+ "examples/glr/hidden-leftrec/Expr.y"
83+ "examples/glr/hidden-leftrec/README"
84+ "examples/glr/hidden-leftrec/Hugs.lhs"
85+ "examples/glr/expr-monad/Main.lhs"
86+ "examples/glr/expr-monad/Makefile"
87+ "examples/glr/expr-monad/Expr.y"
88+ "examples/glr/expr-monad/README"
89+ "examples/glr/expr-monad/Hugs.lhs"
90+ "examples/glr/bio-eg/Main.lhs"
91+ "examples/glr/bio-eg/Makefile"
92+ "examples/glr/bio-eg/Bio.y"
93+ "examples/glr/bio-eg/README"
94+ "examples/glr/bio-eg/1-1200.dna"
95+ "examples/glr/bio-eg/1-600.dna"
96+ "examples/glr/common/DV_lhs"
97+ "examples/glr/common/DaVinciTypes.hs"
98+ "examples/glr/packing/Main.lhs"
99+ "examples/glr/packing/Makefile"
100+ "examples/glr/packing/Expr.y"
101+ "examples/glr/packing/README"
102+ "examples/glr/packing/Hugs.lhs"
103+ "examples/PgnParser.ly"
104+ "examples/MonadTest.ly"
105+ "examples/igloo/ParserM.hs"
106+ "examples/igloo/Makefile"
107+ "examples/igloo/Parser.y"
108+ "examples/igloo/Foo.hs"
109+ "examples/igloo/README"
110+ "examples/igloo/Lexer.x"
111+ "examples/README"
112+ "examples/Calc.ly"
113+ "examples/DavesExample.ly"
114+ "examples/ErrorTest.ly"
115+ "examples/ErlParser.ly"
116+ "examples/SimonsExample.ly"
117+ "examples/LexerTest.ly"
118+ "happy.spec"
119+ "src/ARRAY-NOTES"
120+ "tests/AttrGrammar001.y"
121+ "tests/AttrGrammar002.y"
122+ "tests/Makefile"
123+ "tests/Partial.ly"
124+ "tests/Test.ly"
125+ "tests/TestMulti.ly"
126+ "tests/TestPrecedence.ly"
127+ "tests/bogus-token.y"
128+ "tests/bug001.ly"
129+ "tests/bug002.y"
130+ "tests/error001.stderr"
131+ "tests/error001.stdout"
132+ "tests/error001.y"
133+ "tests/monad001.y"
134+ "tests/monad002.ly"
135+ "tests/monaderror.y"
136+ "tests/precedence001.ly"
137+ "tests/precedence002.y"
138+ "tests/test_rules.y"
139+ "tests/issue91.y"
140+ "tests/issue93.y"
141+ "tests/issue94.y"
142+ "tests/issue95.y"
143+ "tests/monaderror-explist.y"
144+ "tests/typeclass_monad001.y"
145+ "tests/typeclass_monad002.ly"
146+ "tests/typeclass_monad_lexer.y"
147+ "tests/rank2.y"
148+ ];
149+ extraTmpFiles = [];
150+ extraDocFiles = [];
151+ };
152+ components = {
153+ exes = {
154+ "happy" = {
155+ depends = [
156+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
157+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
158+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
159+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
160+ ];
161+ buildable = true;
162+ modules = [
163+ "Paths_happy"
164+ "AbsSyn"
165+ "First"
166+ "GenUtils"
167+ "Grammar"
168+ "Info"
169+ "LALR"
170+ "Lexer"
171+ "ParseMonad"
172+ "Parser"
173+ "ProduceCode"
174+ "ProduceGLRCode"
175+ "NameSet"
176+ "Target"
177+ "AttrGrammar"
178+ "AttrGrammarParser"
179+ "ParamRules"
180+ "PrettyGrammar"
181+ ];
182+ hsSourceDirs = [ "src" ];
183+ mainPath = [ "Main.lhs" ];
184+ };
185+ };
186+ tests = {
187+ "tests" = {
188+ depends = [
189+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
190+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
191+ ];
192+ build-tools = [
193+ (hsPkgs.buildPackages.happy.components.exes.happy or (pkgs.buildPackages.happy or (errorHandler.buildToolDepError "happy:happy")))
194+ ];
195+ buildable = true;
196+ mainPath = [ "test.hs" ];
197+ };
198+ };
199+ };
200+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc8107/happy-1.19.12/default.nixnew file+75
@@ -0,0 +1,75 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default;
8+ "process".revision = (((hackage."process")."1.6.13.2").revisions).default;
9+ "base".revision = (((hackage."base")."4.14.3.0").revisions).default;
10+ "rts".revision = (((hackage."rts")."1.0.1").revisions).default;
11+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
12+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
13+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
14+ "bytestring".revision = (((hackage."bytestring")."0.10.12.0").revisions).default;
15+ "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default;
16+ "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default;
17+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
18+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
19+ "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default;
20+ };
21+ compiler = {
22+ version = "8.10.7";
23+ nix-name = "ghc8107";
24+ packages = {
25+ "ghc-prim" = "0.6.1";
26+ "array" = "0.5.4.0";
27+ "integer-gmp" = "1.0.3.0";
28+ "process" = "1.6.13.2";
29+ "base" = "4.14.3.0";
30+ "rts" = "1.0.1";
31+ "mtl" = "2.2.2";
32+ "time" = "1.9.3";
33+ "unix" = "2.7.2.2";
34+ "bytestring" = "0.10.12.0";
35+ "containers" = "0.6.5.1";
36+ "directory" = "1.3.6.0";
37+ "filepath" = "1.4.2.1";
38+ "deepseq" = "1.4.4.0";
39+ "transformers" = "0.5.6.2";
40+ };
41+ };
42+ };
43+ extras = hackage:
44+ { packages = { happy = ./.plan.nix/happy.nix; }; };
45+ modules = [
46+ ({ lib, ... }:
47+ {
48+ packages = {
49+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
50+ };
51+ })
52+ ({ lib, ... }:
53+ {
54+ packages = {
55+ "containers".components.library.planned = lib.mkOverride 900 true;
56+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
57+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
58+ "transformers".components.library.planned = lib.mkOverride 900 true;
59+ "process".components.library.planned = lib.mkOverride 900 true;
60+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
61+ "array".components.library.planned = lib.mkOverride 900 true;
62+ "bytestring".components.library.planned = lib.mkOverride 900 true;
63+ "unix".components.library.planned = lib.mkOverride 900 true;
64+ "base".components.library.planned = lib.mkOverride 900 true;
65+ "rts".components.library.planned = lib.mkOverride 900 true;
66+ "mtl".components.library.planned = lib.mkOverride 900 true;
67+ "time".components.library.planned = lib.mkOverride 900 true;
68+ "deepseq".components.library.planned = lib.mkOverride 900 true;
69+ "filepath".components.library.planned = lib.mkOverride 900 true;
70+ "happy".components.tests."tests".planned = lib.mkOverride 900 true;
71+ "directory".components.library.planned = lib.mkOverride 900 true;
72+ };
73+ })
74+ ];
75+ }
materialized/bootstrap/ghc8107/hscolour/.plan.nix/hscolour.nixnew file+70
@@ -0,0 +1,70 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = {};
12+ package = {
13+ specVersion = "1.6";
14+ identifier = { name = "hscolour"; version = "1.24.4"; };
15+ license = "LicenseRef-LGPL";
16+ copyright = "2003-2017 Malcolm Wallace; 2006 Bjorn Bringert";
17+ maintainer = "Malcolm Wallace";
18+ author = "Malcolm Wallace";
19+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
20+ url = "";
21+ synopsis = "Colourise Haskell code.";
22+ description = "hscolour is a small Haskell script to colourise Haskell code. It currently\nhas six output formats:\nANSI terminal codes (optionally XTerm-256colour codes),\nHTML 3.2 with <font> tags,\nHTML 4.01 with CSS,\nHTML 4.01 with CSS and mouseover annotations,\nXHTML 1.0 with inline CSS styling,\nLaTeX,\nand mIRC chat codes.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENCE-LGPL" ];
27+ dataDir = ".";
28+ dataFiles = [ "hscolour.css" "data/rgb24-example-.hscolour" ];
29+ extraSrcFiles = [];
30+ extraTmpFiles = [];
31+ extraDocFiles = [];
32+ };
33+ components = {
34+ "library" = {
35+ depends = [
36+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
37+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
38+ ];
39+ buildable = true;
40+ modules = [
41+ "Language/Haskell/HsColour"
42+ "Language/Haskell/HsColour/ANSI"
43+ "Language/Haskell/HsColour/Anchors"
44+ "Language/Haskell/HsColour/ACSS"
45+ "Language/Haskell/HsColour/CSS"
46+ "Language/Haskell/HsColour/Classify"
47+ "Language/Haskell/HsColour/ColourHighlight"
48+ "Language/Haskell/HsColour/Colourise"
49+ "Language/Haskell/HsColour/General"
50+ "Language/Haskell/HsColour/HTML"
51+ "Language/Haskell/HsColour/InlineCSS"
52+ "Language/Haskell/HsColour/LaTeX"
53+ "Language/Haskell/HsColour/MIRC"
54+ "Language/Haskell/HsColour/Options"
55+ "Language/Haskell/HsColour/Output"
56+ "Language/Haskell/HsColour/TTY"
57+ ];
58+ };
59+ exes = {
60+ "HsColour" = {
61+ depends = [
62+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
63+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
64+ ];
65+ buildable = true;
66+ mainPath = [ "HsColour.hs" ];
67+ };
68+ };
69+ };
70+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc8107/hscolour/default.nixnew file+47
@@ -0,0 +1,47 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default;
8+ "base".revision = (((hackage."base")."4.14.3.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0.1").revisions).default;
10+ "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default;
11+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
12+ };
13+ compiler = {
14+ version = "8.10.7";
15+ nix-name = "ghc8107";
16+ packages = {
17+ "ghc-prim" = "0.6.1";
18+ "array" = "0.5.4.0";
19+ "integer-gmp" = "1.0.3.0";
20+ "base" = "4.14.3.0";
21+ "rts" = "1.0.1";
22+ "containers" = "0.6.5.1";
23+ "deepseq" = "1.4.4.0";
24+ };
25+ };
26+ };
27+ extras = hackage:
28+ { packages = { hscolour = ./.plan.nix/hscolour.nix; }; };
29+ modules = [
30+ ({ lib, ... }:
31+ { packages = { "hscolour" = { flags = {}; }; }; })
32+ ({ lib, ... }:
33+ {
34+ packages = {
35+ "containers".components.library.planned = lib.mkOverride 900 true;
36+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
37+ "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true;
38+ "hscolour".components.library.planned = lib.mkOverride 900 true;
39+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
40+ "array".components.library.planned = lib.mkOverride 900 true;
41+ "base".components.library.planned = lib.mkOverride 900 true;
42+ "rts".components.library.planned = lib.mkOverride 900 true;
43+ "deepseq".components.library.planned = lib.mkOverride 900 true;
44+ };
45+ })
46+ ];
47+ }
materialized/bootstrap/ghc844/alex/.plan.nix/alex.nixnew file+160
@@ -0,0 +1,160 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "alex"; version = "3.2.4"; };
15+ license = "BSD-3-Clause";
16+ copyright = "(c) Chis Dornan, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Chris Dornan and Simon Marlow";
19+ homepage = "http://www.haskell.org/alex/";
20+ url = "";
21+ synopsis = "Alex is a tool for generating lexical analysers in Haskell";
22+ description = "Alex is a tool for generating lexical analysers in Haskell.\nIt takes a description of tokens based on regular\nexpressions and generates a Haskell module containing code\nfor scanning text efficiently. It is similar to the tool\nlex or flex for C/C++.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "AlexTemplate"
30+ "AlexTemplate-ghc"
31+ "AlexTemplate-ghc-nopred"
32+ "AlexTemplate-ghc-debug"
33+ "AlexTemplate-debug"
34+ "AlexWrapper-basic"
35+ "AlexWrapper-basic-bytestring"
36+ "AlexWrapper-strict-bytestring"
37+ "AlexWrapper-posn"
38+ "AlexWrapper-posn-bytestring"
39+ "AlexWrapper-monad"
40+ "AlexWrapper-monad-bytestring"
41+ "AlexWrapper-monadUserState"
42+ "AlexWrapper-monadUserState-bytestring"
43+ "AlexWrapper-gscan"
44+ ];
45+ extraSrcFiles = [
46+ "CHANGELOG.md"
47+ "README.md"
48+ "TODO"
49+ "alex.spec"
50+ "doc/Makefile"
51+ "doc/aclocal.m4"
52+ "doc/alex.1.in"
53+ "doc/alex.xml"
54+ "doc/config.mk.in"
55+ "doc/configure.ac"
56+ "doc/docbook-xml.mk"
57+ "doc/fptools.css"
58+ "examples/Makefile"
59+ "examples/Tokens.x"
60+ "examples/Tokens_gscan.x"
61+ "examples/Tokens_posn.x"
62+ "examples/examples.x"
63+ "examples/haskell.x"
64+ "examples/lit.x"
65+ "examples/pp.x"
66+ "examples/state.x"
67+ "examples/tiny.y"
68+ "examples/words.x"
69+ "examples/words_monad.x"
70+ "examples/words_posn.x"
71+ "src/Parser.y.boot"
72+ "src/Scan.x.boot"
73+ "src/ghc_hooks.c"
74+ "templates/GenericTemplate.hs"
75+ "templates/wrappers.hs"
76+ "tests/Makefile"
77+ "tests/simple.x"
78+ "tests/null.x"
79+ "tests/tokens.x"
80+ "tests/tokens_gscan.x"
81+ "tests/tokens_posn.x"
82+ "tests/tokens_bytestring.x"
83+ "tests/tokens_posn_bytestring.x"
84+ "tests/tokens_scan_user.x"
85+ "tests/tokens_strict_bytestring.x"
86+ "tests/tokens_monad_bytestring.x"
87+ "tests/tokens_monadUserState_bytestring.x"
88+ "tests/tokens_bytestring_unicode.x"
89+ "tests/basic_typeclass.x"
90+ "tests/basic_typeclass_bytestring.x"
91+ "tests/default_typeclass.x"
92+ "tests/gscan_typeclass.x"
93+ "tests/posn_typeclass.x"
94+ "tests/monad_typeclass.x"
95+ "tests/monad_typeclass_bytestring.x"
96+ "tests/monadUserState_typeclass.x"
97+ "tests/monadUserState_typeclass_bytestring.x"
98+ "tests/posn_typeclass_bytestring.x"
99+ "tests/strict_typeclass.x"
100+ "tests/unicode.x"
101+ ];
102+ extraTmpFiles = [];
103+ extraDocFiles = [];
104+ };
105+ components = {
106+ exes = {
107+ "alex" = {
108+ depends = [
109+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
110+ ] ++ (if flags.small_base
111+ then [
112+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
113+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
114+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
115+ (hsPkgs."directory" or (errorHandler.buildDepError "directory"))
116+ ]
117+ else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]);
118+ buildable = true;
119+ modules = [
120+ "AbsSyn"
121+ "CharSet"
122+ "DFA"
123+ "DFAMin"
124+ "DFS"
125+ "Info"
126+ "Map"
127+ "NFA"
128+ "Output"
129+ "Paths_alex"
130+ "Parser"
131+ "ParseMonad"
132+ "Scan"
133+ "Set"
134+ "Sort"
135+ "Util"
136+ "UTF8"
137+ "Data/Ranged"
138+ "Data/Ranged/Boundaries"
139+ "Data/Ranged/RangedSet"
140+ "Data/Ranged/Ranges"
141+ ];
142+ hsSourceDirs = [ "src" ];
143+ mainPath = [ "Main.hs" ] ++ [ "" ];
144+ };
145+ };
146+ tests = {
147+ "tests" = {
148+ depends = [
149+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
150+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
151+ ];
152+ build-tools = [
153+ (hsPkgs.buildPackages.alex.components.exes.alex or (pkgs.buildPackages.alex or (errorHandler.buildToolDepError "alex:alex")))
154+ ];
155+ buildable = true;
156+ mainPath = [ "test.hs" ];
157+ };
158+ };
159+ };
160+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc844/alex/default.nixnew file+65
@@ -0,0 +1,65 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.2.0").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.2.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "base".revision = (((hackage."base")."4.11.1.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "time".revision = (((hackage."time")."1.8.0.2").revisions).default;
11+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
12+ "bytestring".revision = (((hackage."bytestring")."0.10.8.2").revisions).default;
13+ "containers".revision = (((hackage."containers")."0.5.11.0").revisions).default;
14+ "directory".revision = (((hackage."directory")."1.3.1.5").revisions).default;
15+ "filepath".revision = (((hackage."filepath")."1.4.2").revisions).default;
16+ "deepseq".revision = (((hackage."deepseq")."1.4.3.0").revisions).default;
17+ };
18+ compiler = {
19+ version = "8.4.4";
20+ nix-name = "ghc844";
21+ packages = {
22+ "ghc-prim" = "0.5.2.0";
23+ "array" = "0.5.2.0";
24+ "integer-gmp" = "1.0.2.0";
25+ "base" = "4.11.1.0";
26+ "rts" = "1.0";
27+ "time" = "1.8.0.2";
28+ "unix" = "2.7.2.2";
29+ "bytestring" = "0.10.8.2";
30+ "containers" = "0.5.11.0";
31+ "directory" = "1.3.1.5";
32+ "filepath" = "1.4.2";
33+ "deepseq" = "1.4.3.0";
34+ };
35+ };
36+ };
37+ extras = hackage:
38+ { packages = { alex = ./.plan.nix/alex.nix; }; };
39+ modules = [
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
44+ };
45+ })
46+ ({ lib, ... }:
47+ {
48+ packages = {
49+ "containers".components.library.planned = lib.mkOverride 900 true;
50+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
51+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
52+ "array".components.library.planned = lib.mkOverride 900 true;
53+ "bytestring".components.library.planned = lib.mkOverride 900 true;
54+ "unix".components.library.planned = lib.mkOverride 900 true;
55+ "alex".components.exes."alex".planned = lib.mkOverride 900 true;
56+ "base".components.library.planned = lib.mkOverride 900 true;
57+ "rts".components.library.planned = lib.mkOverride 900 true;
58+ "time".components.library.planned = lib.mkOverride 900 true;
59+ "deepseq".components.library.planned = lib.mkOverride 900 true;
60+ "filepath".components.library.planned = lib.mkOverride 900 true;
61+ "directory".components.library.planned = lib.mkOverride 900 true;
62+ };
63+ })
64+ ];
65+ }
materialized/bootstrap/ghc844/happy-1.19.11/.plan.nix/happy.nixnew file+192
@@ -0,0 +1,192 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.11"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Custom";
24+ isLocal = true;
25+ setup-depends = [
26+ (hsPkgs.buildPackages.Cabal or (pkgs.buildPackages.Cabal or (errorHandler.setupDepError "Cabal")))
27+ (hsPkgs.buildPackages.base or (pkgs.buildPackages.base or (errorHandler.setupDepError "base")))
28+ (hsPkgs.buildPackages.directory or (pkgs.buildPackages.directory or (errorHandler.setupDepError "directory")))
29+ (hsPkgs.buildPackages.filepath or (pkgs.buildPackages.filepath or (errorHandler.setupDepError "filepath")))
30+ ];
31+ detailLevel = "FullDetails";
32+ licenseFiles = [ "LICENSE" ];
33+ dataDir = ".";
34+ dataFiles = [];
35+ extraSrcFiles = [
36+ "ANNOUNCE"
37+ "CHANGES"
38+ "Makefile"
39+ "README.md"
40+ "TODO"
41+ "doc/Makefile"
42+ "doc/aclocal.m4"
43+ "doc/config.mk.in"
44+ "doc/configure.ac"
45+ "doc/docbook-xml.mk"
46+ "doc/fptools.css"
47+ "doc/happy.1.in"
48+ "doc/happy.xml"
49+ "examples/glr/nlp/Main.lhs"
50+ "examples/glr/nlp/Makefile"
51+ "examples/glr/nlp/README"
52+ "examples/glr/nlp/English.y"
53+ "examples/glr/nlp/Hugs.lhs"
54+ "examples/glr/Makefile"
55+ "examples/glr/Makefile.defs"
56+ "examples/glr/expr-eval/Main.lhs"
57+ "examples/glr/expr-eval/Makefile"
58+ "examples/glr/expr-eval/Expr.y"
59+ "examples/glr/expr-eval/README"
60+ "examples/glr/expr-eval/Hugs.lhs"
61+ "examples/glr/expr-tree/Main.lhs"
62+ "examples/glr/expr-tree/Makefile"
63+ "examples/glr/expr-tree/Expr.y"
64+ "examples/glr/expr-tree/README"
65+ "examples/glr/expr-tree/Tree.lhs"
66+ "examples/glr/expr-tree/Hugs.lhs"
67+ "examples/glr/highly-ambiguous/Main.lhs"
68+ "examples/glr/highly-ambiguous/Makefile"
69+ "examples/glr/highly-ambiguous/Expr.y"
70+ "examples/glr/highly-ambiguous/README"
71+ "examples/glr/highly-ambiguous/Hugs.lhs"
72+ "examples/glr/hidden-leftrec/Main.lhs"
73+ "examples/glr/hidden-leftrec/Makefile"
74+ "examples/glr/hidden-leftrec/Expr.y"
75+ "examples/glr/hidden-leftrec/README"
76+ "examples/glr/hidden-leftrec/Hugs.lhs"
77+ "examples/glr/expr-monad/Main.lhs"
78+ "examples/glr/expr-monad/Makefile"
79+ "examples/glr/expr-monad/Expr.y"
80+ "examples/glr/expr-monad/README"
81+ "examples/glr/expr-monad/Hugs.lhs"
82+ "examples/glr/bio-eg/Main.lhs"
83+ "examples/glr/bio-eg/Makefile"
84+ "examples/glr/bio-eg/Bio.y"
85+ "examples/glr/bio-eg/README"
86+ "examples/glr/bio-eg/1-1200.dna"
87+ "examples/glr/bio-eg/1-600.dna"
88+ "examples/glr/common/DV_lhs"
89+ "examples/glr/common/DaVinciTypes.hs"
90+ "examples/glr/packing/Main.lhs"
91+ "examples/glr/packing/Makefile"
92+ "examples/glr/packing/Expr.y"
93+ "examples/glr/packing/README"
94+ "examples/glr/packing/Hugs.lhs"
95+ "examples/PgnParser.ly"
96+ "examples/MonadTest.ly"
97+ "examples/igloo/ParserM.hs"
98+ "examples/igloo/Makefile"
99+ "examples/igloo/Parser.y"
100+ "examples/igloo/Foo.hs"
101+ "examples/igloo/README"
102+ "examples/igloo/Lexer.x"
103+ "examples/README"
104+ "examples/Calc.ly"
105+ "examples/DavesExample.ly"
106+ "examples/ErrorTest.ly"
107+ "examples/ErlParser.ly"
108+ "examples/SimonsExample.ly"
109+ "examples/LexerTest.ly"
110+ "happy.spec"
111+ "src/ARRAY-NOTES"
112+ "templates/GLR_Base.hs"
113+ "templates/GenericTemplate.hs"
114+ "templates/GLR_Lib.hs"
115+ "tests/AttrGrammar001.y"
116+ "tests/AttrGrammar002.y"
117+ "tests/Makefile"
118+ "tests/Partial.ly"
119+ "tests/Test.ly"
120+ "tests/TestMulti.ly"
121+ "tests/TestPrecedence.ly"
122+ "tests/bogus-token.y"
123+ "tests/bug001.ly"
124+ "tests/bug002.y"
125+ "tests/error001.stderr"
126+ "tests/error001.stdout"
127+ "tests/error001.y"
128+ "tests/monad001.y"
129+ "tests/monad002.ly"
130+ "tests/monaderror.y"
131+ "tests/precedence001.ly"
132+ "tests/precedence002.y"
133+ "tests/test_rules.y"
134+ "tests/issue91.y"
135+ "tests/issue93.y"
136+ "tests/issue94.y"
137+ "tests/issue95.y"
138+ "tests/monaderror-explist.y"
139+ "tests/typeclass_monad001.y"
140+ "tests/typeclass_monad002.ly"
141+ "tests/typeclass_monad_lexer.y"
142+ "tests/rank2.y"
143+ ];
144+ extraTmpFiles = [];
145+ extraDocFiles = [];
146+ };
147+ components = {
148+ exes = {
149+ "happy" = {
150+ depends = [
151+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
152+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
153+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
154+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
155+ ];
156+ buildable = true;
157+ modules = [
158+ "Paths_happy"
159+ "AbsSyn"
160+ "First"
161+ "GenUtils"
162+ "Grammar"
163+ "Info"
164+ "LALR"
165+ "Lexer"
166+ "ParseMonad"
167+ "Parser"
168+ "ProduceCode"
169+ "ProduceGLRCode"
170+ "NameSet"
171+ "Target"
172+ "AttrGrammar"
173+ "AttrGrammarParser"
174+ "ParamRules"
175+ "PrettyGrammar"
176+ ];
177+ hsSourceDirs = [ "src" ];
178+ mainPath = [ "Main.lhs" ];
179+ };
180+ };
181+ tests = {
182+ "tests" = {
183+ depends = [
184+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
185+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
186+ ];
187+ buildable = true;
188+ mainPath = [ "test.hs" ];
189+ };
190+ };
191+ };
192+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc844/happy-1.19.11/default.nixnew file+90
@@ -0,0 +1,90 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "binary".revision = (((hackage."binary")."0.8.5.1").revisions).default;
6+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.2.0").revisions).default;
7+ "array".revision = (((hackage."array")."0.5.2.0").revisions).default;
8+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
9+ "pretty".revision = (((hackage."pretty")."1.1.3.6").revisions).default;
10+ "process".revision = (((hackage."process")."1.6.3.0").revisions).default;
11+ "base".revision = (((hackage."base")."4.11.1.0").revisions).default;
12+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
13+ "text".revision = (((hackage."text")."1.2.3.1").revisions).default;
14+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
15+ "time".revision = (((hackage."time")."1.8.0.2").revisions).default;
16+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
17+ "bytestring".revision = (((hackage."bytestring")."0.10.8.2").revisions).default;
18+ "containers".revision = (((hackage."containers")."0.5.11.0").revisions).default;
19+ "directory".revision = (((hackage."directory")."1.3.1.5").revisions).default;
20+ "parsec".revision = (((hackage."parsec")."3.1.13.0").revisions).default;
21+ "filepath".revision = (((hackage."filepath")."1.4.2").revisions).default;
22+ "deepseq".revision = (((hackage."deepseq")."1.4.3.0").revisions).default;
23+ "transformers".revision = (((hackage."transformers")."0.5.5.0").revisions).default;
24+ "Cabal".revision = (((hackage."Cabal")."2.2.0.1").revisions).default;
25+ };
26+ compiler = {
27+ version = "8.4.4";
28+ nix-name = "ghc844";
29+ packages = {
30+ "binary" = "0.8.5.1";
31+ "ghc-prim" = "0.5.2.0";
32+ "array" = "0.5.2.0";
33+ "integer-gmp" = "1.0.2.0";
34+ "pretty" = "1.1.3.6";
35+ "process" = "1.6.3.0";
36+ "base" = "4.11.1.0";
37+ "rts" = "1.0";
38+ "text" = "1.2.3.1";
39+ "mtl" = "2.2.2";
40+ "time" = "1.8.0.2";
41+ "unix" = "2.7.2.2";
42+ "bytestring" = "0.10.8.2";
43+ "containers" = "0.5.11.0";
44+ "directory" = "1.3.1.5";
45+ "parsec" = "3.1.13.0";
46+ "filepath" = "1.4.2";
47+ "deepseq" = "1.4.3.0";
48+ "transformers" = "0.5.5.0";
49+ "Cabal" = "2.2.0.1";
50+ };
51+ };
52+ };
53+ extras = hackage:
54+ { packages = { happy = ./.plan.nix/happy.nix; }; };
55+ modules = [
56+ ({ lib, ... }:
57+ {
58+ packages = {
59+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
60+ };
61+ })
62+ ({ lib, ... }:
63+ {
64+ packages = {
65+ "containers".components.library.planned = lib.mkOverride 900 true;
66+ "binary".components.library.planned = lib.mkOverride 900 true;
67+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
68+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
69+ "Cabal".components.library.planned = lib.mkOverride 900 true;
70+ "transformers".components.library.planned = lib.mkOverride 900 true;
71+ "process".components.library.planned = lib.mkOverride 900 true;
72+ "pretty".components.library.planned = lib.mkOverride 900 true;
73+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
74+ "array".components.library.planned = lib.mkOverride 900 true;
75+ "bytestring".components.library.planned = lib.mkOverride 900 true;
76+ "unix".components.library.planned = lib.mkOverride 900 true;
77+ "text".components.library.planned = lib.mkOverride 900 true;
78+ "base".components.library.planned = lib.mkOverride 900 true;
79+ "rts".components.library.planned = lib.mkOverride 900 true;
80+ "mtl".components.library.planned = lib.mkOverride 900 true;
81+ "time".components.library.planned = lib.mkOverride 900 true;
82+ "happy".components.setup.planned = lib.mkOverride 900 true;
83+ "deepseq".components.library.planned = lib.mkOverride 900 true;
84+ "filepath".components.library.planned = lib.mkOverride 900 true;
85+ "parsec".components.library.planned = lib.mkOverride 900 true;
86+ "directory".components.library.planned = lib.mkOverride 900 true;
87+ };
88+ })
89+ ];
90+ }
materialized/bootstrap/ghc844/happy-1.19.12/.plan.nix/happy.nixnew file+200
@@ -0,0 +1,200 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.12"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "HappyTemplate"
30+ "HappyTemplate-arrays"
31+ "HappyTemplate-arrays-coerce"
32+ "HappyTemplate-arrays-coerce-debug"
33+ "HappyTemplate-arrays-debug"
34+ "HappyTemplate-arrays-ghc"
35+ "HappyTemplate-arrays-ghc-debug"
36+ "HappyTemplate-coerce"
37+ "HappyTemplate-ghc"
38+ "GLR_Base"
39+ "GLR_Lib"
40+ "GLR_Lib-ghc"
41+ "GLR_Lib-ghc-debug"
42+ ];
43+ extraSrcFiles = [
44+ "ANNOUNCE"
45+ "CHANGES"
46+ "Makefile"
47+ "README.md"
48+ "TODO"
49+ "doc/Makefile"
50+ "doc/aclocal.m4"
51+ "doc/config.mk.in"
52+ "doc/configure.ac"
53+ "doc/docbook-xml.mk"
54+ "doc/fptools.css"
55+ "doc/happy.1.in"
56+ "doc/happy.xml"
57+ "examples/glr/nlp/Main.lhs"
58+ "examples/glr/nlp/Makefile"
59+ "examples/glr/nlp/README"
60+ "examples/glr/nlp/English.y"
61+ "examples/glr/nlp/Hugs.lhs"
62+ "examples/glr/Makefile"
63+ "examples/glr/Makefile.defs"
64+ "examples/glr/expr-eval/Main.lhs"
65+ "examples/glr/expr-eval/Makefile"
66+ "examples/glr/expr-eval/Expr.y"
67+ "examples/glr/expr-eval/README"
68+ "examples/glr/expr-eval/Hugs.lhs"
69+ "examples/glr/expr-tree/Main.lhs"
70+ "examples/glr/expr-tree/Makefile"
71+ "examples/glr/expr-tree/Expr.y"
72+ "examples/glr/expr-tree/README"
73+ "examples/glr/expr-tree/Tree.lhs"
74+ "examples/glr/expr-tree/Hugs.lhs"
75+ "examples/glr/highly-ambiguous/Main.lhs"
76+ "examples/glr/highly-ambiguous/Makefile"
77+ "examples/glr/highly-ambiguous/Expr.y"
78+ "examples/glr/highly-ambiguous/README"
79+ "examples/glr/highly-ambiguous/Hugs.lhs"
80+ "examples/glr/hidden-leftrec/Main.lhs"
81+ "examples/glr/hidden-leftrec/Makefile"
82+ "examples/glr/hidden-leftrec/Expr.y"
83+ "examples/glr/hidden-leftrec/README"
84+ "examples/glr/hidden-leftrec/Hugs.lhs"
85+ "examples/glr/expr-monad/Main.lhs"
86+ "examples/glr/expr-monad/Makefile"
87+ "examples/glr/expr-monad/Expr.y"
88+ "examples/glr/expr-monad/README"
89+ "examples/glr/expr-monad/Hugs.lhs"
90+ "examples/glr/bio-eg/Main.lhs"
91+ "examples/glr/bio-eg/Makefile"
92+ "examples/glr/bio-eg/Bio.y"
93+ "examples/glr/bio-eg/README"
94+ "examples/glr/bio-eg/1-1200.dna"
95+ "examples/glr/bio-eg/1-600.dna"
96+ "examples/glr/common/DV_lhs"
97+ "examples/glr/common/DaVinciTypes.hs"
98+ "examples/glr/packing/Main.lhs"
99+ "examples/glr/packing/Makefile"
100+ "examples/glr/packing/Expr.y"
101+ "examples/glr/packing/README"
102+ "examples/glr/packing/Hugs.lhs"
103+ "examples/PgnParser.ly"
104+ "examples/MonadTest.ly"
105+ "examples/igloo/ParserM.hs"
106+ "examples/igloo/Makefile"
107+ "examples/igloo/Parser.y"
108+ "examples/igloo/Foo.hs"
109+ "examples/igloo/README"
110+ "examples/igloo/Lexer.x"
111+ "examples/README"
112+ "examples/Calc.ly"
113+ "examples/DavesExample.ly"
114+ "examples/ErrorTest.ly"
115+ "examples/ErlParser.ly"
116+ "examples/SimonsExample.ly"
117+ "examples/LexerTest.ly"
118+ "happy.spec"
119+ "src/ARRAY-NOTES"
120+ "tests/AttrGrammar001.y"
121+ "tests/AttrGrammar002.y"
122+ "tests/Makefile"
123+ "tests/Partial.ly"
124+ "tests/Test.ly"
125+ "tests/TestMulti.ly"
126+ "tests/TestPrecedence.ly"
127+ "tests/bogus-token.y"
128+ "tests/bug001.ly"
129+ "tests/bug002.y"
130+ "tests/error001.stderr"
131+ "tests/error001.stdout"
132+ "tests/error001.y"
133+ "tests/monad001.y"
134+ "tests/monad002.ly"
135+ "tests/monaderror.y"
136+ "tests/precedence001.ly"
137+ "tests/precedence002.y"
138+ "tests/test_rules.y"
139+ "tests/issue91.y"
140+ "tests/issue93.y"
141+ "tests/issue94.y"
142+ "tests/issue95.y"
143+ "tests/monaderror-explist.y"
144+ "tests/typeclass_monad001.y"
145+ "tests/typeclass_monad002.ly"
146+ "tests/typeclass_monad_lexer.y"
147+ "tests/rank2.y"
148+ ];
149+ extraTmpFiles = [];
150+ extraDocFiles = [];
151+ };
152+ components = {
153+ exes = {
154+ "happy" = {
155+ depends = [
156+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
157+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
158+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
159+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
160+ ];
161+ buildable = true;
162+ modules = [
163+ "Paths_happy"
164+ "AbsSyn"
165+ "First"
166+ "GenUtils"
167+ "Grammar"
168+ "Info"
169+ "LALR"
170+ "Lexer"
171+ "ParseMonad"
172+ "Parser"
173+ "ProduceCode"
174+ "ProduceGLRCode"
175+ "NameSet"
176+ "Target"
177+ "AttrGrammar"
178+ "AttrGrammarParser"
179+ "ParamRules"
180+ "PrettyGrammar"
181+ ];
182+ hsSourceDirs = [ "src" ];
183+ mainPath = [ "Main.lhs" ];
184+ };
185+ };
186+ tests = {
187+ "tests" = {
188+ depends = [
189+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
190+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
191+ ];
192+ build-tools = [
193+ (hsPkgs.buildPackages.happy.components.exes.happy or (pkgs.buildPackages.happy or (errorHandler.buildToolDepError "happy:happy")))
194+ ];
195+ buildable = true;
196+ mainPath = [ "test.hs" ];
197+ };
198+ };
199+ };
200+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc844/happy-1.19.12/default.nixnew file+56
@@ -0,0 +1,56 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.2.0").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.2.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "base".revision = (((hackage."base")."4.11.1.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
11+ "containers".revision = (((hackage."containers")."0.5.11.0").revisions).default;
12+ "deepseq".revision = (((hackage."deepseq")."1.4.3.0").revisions).default;
13+ "transformers".revision = (((hackage."transformers")."0.5.5.0").revisions).default;
14+ };
15+ compiler = {
16+ version = "8.4.4";
17+ nix-name = "ghc844";
18+ packages = {
19+ "ghc-prim" = "0.5.2.0";
20+ "array" = "0.5.2.0";
21+ "integer-gmp" = "1.0.2.0";
22+ "base" = "4.11.1.0";
23+ "rts" = "1.0";
24+ "mtl" = "2.2.2";
25+ "containers" = "0.5.11.0";
26+ "deepseq" = "1.4.3.0";
27+ "transformers" = "0.5.5.0";
28+ };
29+ };
30+ };
31+ extras = hackage:
32+ { packages = { happy = ./.plan.nix/happy.nix; }; };
33+ modules = [
34+ ({ lib, ... }:
35+ {
36+ packages = {
37+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
38+ };
39+ })
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "containers".components.library.planned = lib.mkOverride 900 true;
44+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
45+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
46+ "transformers".components.library.planned = lib.mkOverride 900 true;
47+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
48+ "array".components.library.planned = lib.mkOverride 900 true;
49+ "base".components.library.planned = lib.mkOverride 900 true;
50+ "rts".components.library.planned = lib.mkOverride 900 true;
51+ "mtl".components.library.planned = lib.mkOverride 900 true;
52+ "deepseq".components.library.planned = lib.mkOverride 900 true;
53+ };
54+ })
55+ ];
56+ }
materialized/bootstrap/ghc844/hscolour/.plan.nix/hscolour.nixnew file+70
@@ -0,0 +1,70 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = {};
12+ package = {
13+ specVersion = "1.6";
14+ identifier = { name = "hscolour"; version = "1.24.4"; };
15+ license = "LicenseRef-LGPL";
16+ copyright = "2003-2017 Malcolm Wallace; 2006 Bjorn Bringert";
17+ maintainer = "Malcolm Wallace";
18+ author = "Malcolm Wallace";
19+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
20+ url = "";
21+ synopsis = "Colourise Haskell code.";
22+ description = "hscolour is a small Haskell script to colourise Haskell code. It currently\nhas six output formats:\nANSI terminal codes (optionally XTerm-256colour codes),\nHTML 3.2 with <font> tags,\nHTML 4.01 with CSS,\nHTML 4.01 with CSS and mouseover annotations,\nXHTML 1.0 with inline CSS styling,\nLaTeX,\nand mIRC chat codes.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENCE-LGPL" ];
27+ dataDir = ".";
28+ dataFiles = [ "hscolour.css" "data/rgb24-example-.hscolour" ];
29+ extraSrcFiles = [];
30+ extraTmpFiles = [];
31+ extraDocFiles = [];
32+ };
33+ components = {
34+ "library" = {
35+ depends = [
36+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
37+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
38+ ];
39+ buildable = true;
40+ modules = [
41+ "Language/Haskell/HsColour"
42+ "Language/Haskell/HsColour/ANSI"
43+ "Language/Haskell/HsColour/Anchors"
44+ "Language/Haskell/HsColour/ACSS"
45+ "Language/Haskell/HsColour/CSS"
46+ "Language/Haskell/HsColour/Classify"
47+ "Language/Haskell/HsColour/ColourHighlight"
48+ "Language/Haskell/HsColour/Colourise"
49+ "Language/Haskell/HsColour/General"
50+ "Language/Haskell/HsColour/HTML"
51+ "Language/Haskell/HsColour/InlineCSS"
52+ "Language/Haskell/HsColour/LaTeX"
53+ "Language/Haskell/HsColour/MIRC"
54+ "Language/Haskell/HsColour/Options"
55+ "Language/Haskell/HsColour/Output"
56+ "Language/Haskell/HsColour/TTY"
57+ ];
58+ };
59+ exes = {
60+ "HsColour" = {
61+ depends = [
62+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
63+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
64+ ];
65+ buildable = true;
66+ mainPath = [ "HsColour.hs" ];
67+ };
68+ };
69+ };
70+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc844/hscolour/default.nixnew file+47
@@ -0,0 +1,47 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.2.0").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.2.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "base".revision = (((hackage."base")."4.11.1.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "containers".revision = (((hackage."containers")."0.5.11.0").revisions).default;
11+ "deepseq".revision = (((hackage."deepseq")."1.4.3.0").revisions).default;
12+ };
13+ compiler = {
14+ version = "8.4.4";
15+ nix-name = "ghc844";
16+ packages = {
17+ "ghc-prim" = "0.5.2.0";
18+ "array" = "0.5.2.0";
19+ "integer-gmp" = "1.0.2.0";
20+ "base" = "4.11.1.0";
21+ "rts" = "1.0";
22+ "containers" = "0.5.11.0";
23+ "deepseq" = "1.4.3.0";
24+ };
25+ };
26+ };
27+ extras = hackage:
28+ { packages = { hscolour = ./.plan.nix/hscolour.nix; }; };
29+ modules = [
30+ ({ lib, ... }:
31+ { packages = { "hscolour" = { flags = {}; }; }; })
32+ ({ lib, ... }:
33+ {
34+ packages = {
35+ "containers".components.library.planned = lib.mkOverride 900 true;
36+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
37+ "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true;
38+ "hscolour".components.library.planned = lib.mkOverride 900 true;
39+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
40+ "array".components.library.planned = lib.mkOverride 900 true;
41+ "base".components.library.planned = lib.mkOverride 900 true;
42+ "rts".components.library.planned = lib.mkOverride 900 true;
43+ "deepseq".components.library.planned = lib.mkOverride 900 true;
44+ };
45+ })
46+ ];
47+ }
materialized/bootstrap/ghc882/alex/.plan.nix/alex.nixnew file+160
@@ -0,0 +1,160 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "alex"; version = "3.2.4"; };
15+ license = "BSD-3-Clause";
16+ copyright = "(c) Chis Dornan, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Chris Dornan and Simon Marlow";
19+ homepage = "http://www.haskell.org/alex/";
20+ url = "";
21+ synopsis = "Alex is a tool for generating lexical analysers in Haskell";
22+ description = "Alex is a tool for generating lexical analysers in Haskell.\nIt takes a description of tokens based on regular\nexpressions and generates a Haskell module containing code\nfor scanning text efficiently. It is similar to the tool\nlex or flex for C/C++.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "AlexTemplate"
30+ "AlexTemplate-ghc"
31+ "AlexTemplate-ghc-nopred"
32+ "AlexTemplate-ghc-debug"
33+ "AlexTemplate-debug"
34+ "AlexWrapper-basic"
35+ "AlexWrapper-basic-bytestring"
36+ "AlexWrapper-strict-bytestring"
37+ "AlexWrapper-posn"
38+ "AlexWrapper-posn-bytestring"
39+ "AlexWrapper-monad"
40+ "AlexWrapper-monad-bytestring"
41+ "AlexWrapper-monadUserState"
42+ "AlexWrapper-monadUserState-bytestring"
43+ "AlexWrapper-gscan"
44+ ];
45+ extraSrcFiles = [
46+ "CHANGELOG.md"
47+ "README.md"
48+ "TODO"
49+ "alex.spec"
50+ "doc/Makefile"
51+ "doc/aclocal.m4"
52+ "doc/alex.1.in"
53+ "doc/alex.xml"
54+ "doc/config.mk.in"
55+ "doc/configure.ac"
56+ "doc/docbook-xml.mk"
57+ "doc/fptools.css"
58+ "examples/Makefile"
59+ "examples/Tokens.x"
60+ "examples/Tokens_gscan.x"
61+ "examples/Tokens_posn.x"
62+ "examples/examples.x"
63+ "examples/haskell.x"
64+ "examples/lit.x"
65+ "examples/pp.x"
66+ "examples/state.x"
67+ "examples/tiny.y"
68+ "examples/words.x"
69+ "examples/words_monad.x"
70+ "examples/words_posn.x"
71+ "src/Parser.y.boot"
72+ "src/Scan.x.boot"
73+ "src/ghc_hooks.c"
74+ "templates/GenericTemplate.hs"
75+ "templates/wrappers.hs"
76+ "tests/Makefile"
77+ "tests/simple.x"
78+ "tests/null.x"
79+ "tests/tokens.x"
80+ "tests/tokens_gscan.x"
81+ "tests/tokens_posn.x"
82+ "tests/tokens_bytestring.x"
83+ "tests/tokens_posn_bytestring.x"
84+ "tests/tokens_scan_user.x"
85+ "tests/tokens_strict_bytestring.x"
86+ "tests/tokens_monad_bytestring.x"
87+ "tests/tokens_monadUserState_bytestring.x"
88+ "tests/tokens_bytestring_unicode.x"
89+ "tests/basic_typeclass.x"
90+ "tests/basic_typeclass_bytestring.x"
91+ "tests/default_typeclass.x"
92+ "tests/gscan_typeclass.x"
93+ "tests/posn_typeclass.x"
94+ "tests/monad_typeclass.x"
95+ "tests/monad_typeclass_bytestring.x"
96+ "tests/monadUserState_typeclass.x"
97+ "tests/monadUserState_typeclass_bytestring.x"
98+ "tests/posn_typeclass_bytestring.x"
99+ "tests/strict_typeclass.x"
100+ "tests/unicode.x"
101+ ];
102+ extraTmpFiles = [];
103+ extraDocFiles = [];
104+ };
105+ components = {
106+ exes = {
107+ "alex" = {
108+ depends = [
109+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
110+ ] ++ (if flags.small_base
111+ then [
112+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
113+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
114+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
115+ (hsPkgs."directory" or (errorHandler.buildDepError "directory"))
116+ ]
117+ else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]);
118+ buildable = true;
119+ modules = [
120+ "AbsSyn"
121+ "CharSet"
122+ "DFA"
123+ "DFAMin"
124+ "DFS"
125+ "Info"
126+ "Map"
127+ "NFA"
128+ "Output"
129+ "Paths_alex"
130+ "Parser"
131+ "ParseMonad"
132+ "Scan"
133+ "Set"
134+ "Sort"
135+ "Util"
136+ "UTF8"
137+ "Data/Ranged"
138+ "Data/Ranged/Boundaries"
139+ "Data/Ranged/RangedSet"
140+ "Data/Ranged/Ranges"
141+ ];
142+ hsSourceDirs = [ "src" ];
143+ mainPath = [ "Main.hs" ] ++ [ "" ];
144+ };
145+ };
146+ tests = {
147+ "tests" = {
148+ depends = [
149+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
150+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
151+ ];
152+ build-tools = [
153+ (hsPkgs.buildPackages.alex.components.exes.alex or (pkgs.buildPackages.alex or (errorHandler.buildToolDepError "alex:alex")))
154+ ];
155+ buildable = true;
156+ mainPath = [ "test.hs" ];
157+ };
158+ };
159+ };
160+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc882/alex/default.nixnew file+69
@@ -0,0 +1,69 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "process".revision = (((hackage."process")."1.6.7.0").revisions).default;
9+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
10+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
11+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
12+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
13+ "bytestring".revision = (((hackage."bytestring")."0.10.10.0").revisions).default;
14+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
15+ "directory".revision = (((hackage."directory")."1.3.4.0").revisions).default;
16+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
17+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
18+ };
19+ compiler = {
20+ version = "8.8.2";
21+ nix-name = "ghc882";
22+ packages = {
23+ "ghc-prim" = "0.5.3";
24+ "array" = "0.5.4.0";
25+ "integer-gmp" = "1.0.2.0";
26+ "process" = "1.6.7.0";
27+ "base" = "4.13.0.0";
28+ "rts" = "1.0";
29+ "time" = "1.9.3";
30+ "unix" = "2.7.2.2";
31+ "bytestring" = "0.10.10.0";
32+ "containers" = "0.6.2.1";
33+ "directory" = "1.3.4.0";
34+ "filepath" = "1.4.2.1";
35+ "deepseq" = "1.4.4.0";
36+ };
37+ };
38+ };
39+ extras = hackage:
40+ { packages = { alex = ./.plan.nix/alex.nix; }; };
41+ modules = [
42+ ({ lib, ... }:
43+ {
44+ packages = {
45+ "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
46+ };
47+ })
48+ ({ lib, ... }:
49+ {
50+ packages = {
51+ "containers".components.library.planned = lib.mkOverride 900 true;
52+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
53+ "process".components.library.planned = lib.mkOverride 900 true;
54+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
55+ "array".components.library.planned = lib.mkOverride 900 true;
56+ "bytestring".components.library.planned = lib.mkOverride 900 true;
57+ "unix".components.library.planned = lib.mkOverride 900 true;
58+ "alex".components.exes."alex".planned = lib.mkOverride 900 true;
59+ "base".components.library.planned = lib.mkOverride 900 true;
60+ "rts".components.library.planned = lib.mkOverride 900 true;
61+ "time".components.library.planned = lib.mkOverride 900 true;
62+ "deepseq".components.library.planned = lib.mkOverride 900 true;
63+ "filepath".components.library.planned = lib.mkOverride 900 true;
64+ "directory".components.library.planned = lib.mkOverride 900 true;
65+ "alex".components.tests."tests".planned = lib.mkOverride 900 true;
66+ };
67+ })
68+ ];
69+ }
materialized/bootstrap/ghc882/happy-1.19.12/.plan.nix/happy.nixnew file+200
@@ -0,0 +1,200 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.12"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "HappyTemplate"
30+ "HappyTemplate-arrays"
31+ "HappyTemplate-arrays-coerce"
32+ "HappyTemplate-arrays-coerce-debug"
33+ "HappyTemplate-arrays-debug"
34+ "HappyTemplate-arrays-ghc"
35+ "HappyTemplate-arrays-ghc-debug"
36+ "HappyTemplate-coerce"
37+ "HappyTemplate-ghc"
38+ "GLR_Base"
39+ "GLR_Lib"
40+ "GLR_Lib-ghc"
41+ "GLR_Lib-ghc-debug"
42+ ];
43+ extraSrcFiles = [
44+ "ANNOUNCE"
45+ "CHANGES"
46+ "Makefile"
47+ "README.md"
48+ "TODO"
49+ "doc/Makefile"
50+ "doc/aclocal.m4"
51+ "doc/config.mk.in"
52+ "doc/configure.ac"
53+ "doc/docbook-xml.mk"
54+ "doc/fptools.css"
55+ "doc/happy.1.in"
56+ "doc/happy.xml"
57+ "examples/glr/nlp/Main.lhs"
58+ "examples/glr/nlp/Makefile"
59+ "examples/glr/nlp/README"
60+ "examples/glr/nlp/English.y"
61+ "examples/glr/nlp/Hugs.lhs"
62+ "examples/glr/Makefile"
63+ "examples/glr/Makefile.defs"
64+ "examples/glr/expr-eval/Main.lhs"
65+ "examples/glr/expr-eval/Makefile"
66+ "examples/glr/expr-eval/Expr.y"
67+ "examples/glr/expr-eval/README"
68+ "examples/glr/expr-eval/Hugs.lhs"
69+ "examples/glr/expr-tree/Main.lhs"
70+ "examples/glr/expr-tree/Makefile"
71+ "examples/glr/expr-tree/Expr.y"
72+ "examples/glr/expr-tree/README"
73+ "examples/glr/expr-tree/Tree.lhs"
74+ "examples/glr/expr-tree/Hugs.lhs"
75+ "examples/glr/highly-ambiguous/Main.lhs"
76+ "examples/glr/highly-ambiguous/Makefile"
77+ "examples/glr/highly-ambiguous/Expr.y"
78+ "examples/glr/highly-ambiguous/README"
79+ "examples/glr/highly-ambiguous/Hugs.lhs"
80+ "examples/glr/hidden-leftrec/Main.lhs"
81+ "examples/glr/hidden-leftrec/Makefile"
82+ "examples/glr/hidden-leftrec/Expr.y"
83+ "examples/glr/hidden-leftrec/README"
84+ "examples/glr/hidden-leftrec/Hugs.lhs"
85+ "examples/glr/expr-monad/Main.lhs"
86+ "examples/glr/expr-monad/Makefile"
87+ "examples/glr/expr-monad/Expr.y"
88+ "examples/glr/expr-monad/README"
89+ "examples/glr/expr-monad/Hugs.lhs"
90+ "examples/glr/bio-eg/Main.lhs"
91+ "examples/glr/bio-eg/Makefile"
92+ "examples/glr/bio-eg/Bio.y"
93+ "examples/glr/bio-eg/README"
94+ "examples/glr/bio-eg/1-1200.dna"
95+ "examples/glr/bio-eg/1-600.dna"
96+ "examples/glr/common/DV_lhs"
97+ "examples/glr/common/DaVinciTypes.hs"
98+ "examples/glr/packing/Main.lhs"
99+ "examples/glr/packing/Makefile"
100+ "examples/glr/packing/Expr.y"
101+ "examples/glr/packing/README"
102+ "examples/glr/packing/Hugs.lhs"
103+ "examples/PgnParser.ly"
104+ "examples/MonadTest.ly"
105+ "examples/igloo/ParserM.hs"
106+ "examples/igloo/Makefile"
107+ "examples/igloo/Parser.y"
108+ "examples/igloo/Foo.hs"
109+ "examples/igloo/README"
110+ "examples/igloo/Lexer.x"
111+ "examples/README"
112+ "examples/Calc.ly"
113+ "examples/DavesExample.ly"
114+ "examples/ErrorTest.ly"
115+ "examples/ErlParser.ly"
116+ "examples/SimonsExample.ly"
117+ "examples/LexerTest.ly"
118+ "happy.spec"
119+ "src/ARRAY-NOTES"
120+ "tests/AttrGrammar001.y"
121+ "tests/AttrGrammar002.y"
122+ "tests/Makefile"
123+ "tests/Partial.ly"
124+ "tests/Test.ly"
125+ "tests/TestMulti.ly"
126+ "tests/TestPrecedence.ly"
127+ "tests/bogus-token.y"
128+ "tests/bug001.ly"
129+ "tests/bug002.y"
130+ "tests/error001.stderr"
131+ "tests/error001.stdout"
132+ "tests/error001.y"
133+ "tests/monad001.y"
134+ "tests/monad002.ly"
135+ "tests/monaderror.y"
136+ "tests/precedence001.ly"
137+ "tests/precedence002.y"
138+ "tests/test_rules.y"
139+ "tests/issue91.y"
140+ "tests/issue93.y"
141+ "tests/issue94.y"
142+ "tests/issue95.y"
143+ "tests/monaderror-explist.y"
144+ "tests/typeclass_monad001.y"
145+ "tests/typeclass_monad002.ly"
146+ "tests/typeclass_monad_lexer.y"
147+ "tests/rank2.y"
148+ ];
149+ extraTmpFiles = [];
150+ extraDocFiles = [];
151+ };
152+ components = {
153+ exes = {
154+ "happy" = {
155+ depends = [
156+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
157+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
158+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
159+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
160+ ];
161+ buildable = true;
162+ modules = [
163+ "Paths_happy"
164+ "AbsSyn"
165+ "First"
166+ "GenUtils"
167+ "Grammar"
168+ "Info"
169+ "LALR"
170+ "Lexer"
171+ "ParseMonad"
172+ "Parser"
173+ "ProduceCode"
174+ "ProduceGLRCode"
175+ "NameSet"
176+ "Target"
177+ "AttrGrammar"
178+ "AttrGrammarParser"
179+ "ParamRules"
180+ "PrettyGrammar"
181+ ];
182+ hsSourceDirs = [ "src" ];
183+ mainPath = [ "Main.lhs" ];
184+ };
185+ };
186+ tests = {
187+ "tests" = {
188+ depends = [
189+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
190+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
191+ ];
192+ build-tools = [
193+ (hsPkgs.buildPackages.happy.components.exes.happy or (pkgs.buildPackages.happy or (errorHandler.buildToolDepError "happy:happy")))
194+ ];
195+ buildable = true;
196+ mainPath = [ "test.hs" ];
197+ };
198+ };
199+ };
200+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc882/happy-1.19.12/default.nixnew file+75
@@ -0,0 +1,75 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "process".revision = (((hackage."process")."1.6.7.0").revisions).default;
9+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
10+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
11+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
12+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
13+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
14+ "bytestring".revision = (((hackage."bytestring")."0.10.10.0").revisions).default;
15+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
16+ "directory".revision = (((hackage."directory")."1.3.4.0").revisions).default;
17+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
18+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
19+ "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default;
20+ };
21+ compiler = {
22+ version = "8.8.2";
23+ nix-name = "ghc882";
24+ packages = {
25+ "ghc-prim" = "0.5.3";
26+ "array" = "0.5.4.0";
27+ "integer-gmp" = "1.0.2.0";
28+ "process" = "1.6.7.0";
29+ "base" = "4.13.0.0";
30+ "rts" = "1.0";
31+ "mtl" = "2.2.2";
32+ "time" = "1.9.3";
33+ "unix" = "2.7.2.2";
34+ "bytestring" = "0.10.10.0";
35+ "containers" = "0.6.2.1";
36+ "directory" = "1.3.4.0";
37+ "filepath" = "1.4.2.1";
38+ "deepseq" = "1.4.4.0";
39+ "transformers" = "0.5.6.2";
40+ };
41+ };
42+ };
43+ extras = hackage:
44+ { packages = { happy = ./.plan.nix/happy.nix; }; };
45+ modules = [
46+ ({ lib, ... }:
47+ {
48+ packages = {
49+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
50+ };
51+ })
52+ ({ lib, ... }:
53+ {
54+ packages = {
55+ "containers".components.library.planned = lib.mkOverride 900 true;
56+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
57+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
58+ "transformers".components.library.planned = lib.mkOverride 900 true;
59+ "process".components.library.planned = lib.mkOverride 900 true;
60+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
61+ "array".components.library.planned = lib.mkOverride 900 true;
62+ "bytestring".components.library.planned = lib.mkOverride 900 true;
63+ "unix".components.library.planned = lib.mkOverride 900 true;
64+ "base".components.library.planned = lib.mkOverride 900 true;
65+ "rts".components.library.planned = lib.mkOverride 900 true;
66+ "mtl".components.library.planned = lib.mkOverride 900 true;
67+ "time".components.library.planned = lib.mkOverride 900 true;
68+ "deepseq".components.library.planned = lib.mkOverride 900 true;
69+ "filepath".components.library.planned = lib.mkOverride 900 true;
70+ "happy".components.tests."tests".planned = lib.mkOverride 900 true;
71+ "directory".components.library.planned = lib.mkOverride 900 true;
72+ };
73+ })
74+ ];
75+ }
materialized/bootstrap/ghc882/hscolour/.plan.nix/hscolour.nixnew file+70
@@ -0,0 +1,70 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = {};
12+ package = {
13+ specVersion = "1.6";
14+ identifier = { name = "hscolour"; version = "1.24.4"; };
15+ license = "LicenseRef-LGPL";
16+ copyright = "2003-2017 Malcolm Wallace; 2006 Bjorn Bringert";
17+ maintainer = "Malcolm Wallace";
18+ author = "Malcolm Wallace";
19+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
20+ url = "";
21+ synopsis = "Colourise Haskell code.";
22+ description = "hscolour is a small Haskell script to colourise Haskell code. It currently\nhas six output formats:\nANSI terminal codes (optionally XTerm-256colour codes),\nHTML 3.2 with <font> tags,\nHTML 4.01 with CSS,\nHTML 4.01 with CSS and mouseover annotations,\nXHTML 1.0 with inline CSS styling,\nLaTeX,\nand mIRC chat codes.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENCE-LGPL" ];
27+ dataDir = ".";
28+ dataFiles = [ "hscolour.css" "data/rgb24-example-.hscolour" ];
29+ extraSrcFiles = [];
30+ extraTmpFiles = [];
31+ extraDocFiles = [];
32+ };
33+ components = {
34+ "library" = {
35+ depends = [
36+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
37+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
38+ ];
39+ buildable = true;
40+ modules = [
41+ "Language/Haskell/HsColour"
42+ "Language/Haskell/HsColour/ANSI"
43+ "Language/Haskell/HsColour/Anchors"
44+ "Language/Haskell/HsColour/ACSS"
45+ "Language/Haskell/HsColour/CSS"
46+ "Language/Haskell/HsColour/Classify"
47+ "Language/Haskell/HsColour/ColourHighlight"
48+ "Language/Haskell/HsColour/Colourise"
49+ "Language/Haskell/HsColour/General"
50+ "Language/Haskell/HsColour/HTML"
51+ "Language/Haskell/HsColour/InlineCSS"
52+ "Language/Haskell/HsColour/LaTeX"
53+ "Language/Haskell/HsColour/MIRC"
54+ "Language/Haskell/HsColour/Options"
55+ "Language/Haskell/HsColour/Output"
56+ "Language/Haskell/HsColour/TTY"
57+ ];
58+ };
59+ exes = {
60+ "HsColour" = {
61+ depends = [
62+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
63+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
64+ ];
65+ buildable = true;
66+ mainPath = [ "HsColour.hs" ];
67+ };
68+ };
69+ };
70+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc882/hscolour/default.nixnew file+47
@@ -0,0 +1,47 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
6+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
7+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
8+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
11+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
12+ };
13+ compiler = {
14+ version = "8.8.2";
15+ nix-name = "ghc882";
16+ packages = {
17+ "ghc-prim" = "0.5.3";
18+ "array" = "0.5.4.0";
19+ "integer-gmp" = "1.0.2.0";
20+ "base" = "4.13.0.0";
21+ "rts" = "1.0";
22+ "containers" = "0.6.2.1";
23+ "deepseq" = "1.4.4.0";
24+ };
25+ };
26+ };
27+ extras = hackage:
28+ { packages = { hscolour = ./.plan.nix/hscolour.nix; }; };
29+ modules = [
30+ ({ lib, ... }:
31+ { packages = { "hscolour" = { flags = {}; }; }; })
32+ ({ lib, ... }:
33+ {
34+ packages = {
35+ "containers".components.library.planned = lib.mkOverride 900 true;
36+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
37+ "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true;
38+ "hscolour".components.library.planned = lib.mkOverride 900 true;
39+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
40+ "array".components.library.planned = lib.mkOverride 900 true;
41+ "base".components.library.planned = lib.mkOverride 900 true;
42+ "rts".components.library.planned = lib.mkOverride 900 true;
43+ "deepseq".components.library.planned = lib.mkOverride 900 true;
44+ };
45+ })
46+ ];
47+ }
materialized/bootstrap/ghc883/alex/.plan.nix/alex.nixnew file+160
@@ -0,0 +1,160 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "alex"; version = "3.2.4"; };
15+ license = "BSD-3-Clause";
16+ copyright = "(c) Chis Dornan, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Chris Dornan and Simon Marlow";
19+ homepage = "http://www.haskell.org/alex/";
20+ url = "";
21+ synopsis = "Alex is a tool for generating lexical analysers in Haskell";
22+ description = "Alex is a tool for generating lexical analysers in Haskell.\nIt takes a description of tokens based on regular\nexpressions and generates a Haskell module containing code\nfor scanning text efficiently. It is similar to the tool\nlex or flex for C/C++.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "AlexTemplate"
30+ "AlexTemplate-ghc"
31+ "AlexTemplate-ghc-nopred"
32+ "AlexTemplate-ghc-debug"
33+ "AlexTemplate-debug"
34+ "AlexWrapper-basic"
35+ "AlexWrapper-basic-bytestring"
36+ "AlexWrapper-strict-bytestring"
37+ "AlexWrapper-posn"
38+ "AlexWrapper-posn-bytestring"
39+ "AlexWrapper-monad"
40+ "AlexWrapper-monad-bytestring"
41+ "AlexWrapper-monadUserState"
42+ "AlexWrapper-monadUserState-bytestring"
43+ "AlexWrapper-gscan"
44+ ];
45+ extraSrcFiles = [
46+ "CHANGELOG.md"
47+ "README.md"
48+ "TODO"
49+ "alex.spec"
50+ "doc/Makefile"
51+ "doc/aclocal.m4"
52+ "doc/alex.1.in"
53+ "doc/alex.xml"
54+ "doc/config.mk.in"
55+ "doc/configure.ac"
56+ "doc/docbook-xml.mk"
57+ "doc/fptools.css"
58+ "examples/Makefile"
59+ "examples/Tokens.x"
60+ "examples/Tokens_gscan.x"
61+ "examples/Tokens_posn.x"
62+ "examples/examples.x"
63+ "examples/haskell.x"
64+ "examples/lit.x"
65+ "examples/pp.x"
66+ "examples/state.x"
67+ "examples/tiny.y"
68+ "examples/words.x"
69+ "examples/words_monad.x"
70+ "examples/words_posn.x"
71+ "src/Parser.y.boot"
72+ "src/Scan.x.boot"
73+ "src/ghc_hooks.c"
74+ "templates/GenericTemplate.hs"
75+ "templates/wrappers.hs"
76+ "tests/Makefile"
77+ "tests/simple.x"
78+ "tests/null.x"
79+ "tests/tokens.x"
80+ "tests/tokens_gscan.x"
81+ "tests/tokens_posn.x"
82+ "tests/tokens_bytestring.x"
83+ "tests/tokens_posn_bytestring.x"
84+ "tests/tokens_scan_user.x"
85+ "tests/tokens_strict_bytestring.x"
86+ "tests/tokens_monad_bytestring.x"
87+ "tests/tokens_monadUserState_bytestring.x"
88+ "tests/tokens_bytestring_unicode.x"
89+ "tests/basic_typeclass.x"
90+ "tests/basic_typeclass_bytestring.x"
91+ "tests/default_typeclass.x"
92+ "tests/gscan_typeclass.x"
93+ "tests/posn_typeclass.x"
94+ "tests/monad_typeclass.x"
95+ "tests/monad_typeclass_bytestring.x"
96+ "tests/monadUserState_typeclass.x"
97+ "tests/monadUserState_typeclass_bytestring.x"
98+ "tests/posn_typeclass_bytestring.x"
99+ "tests/strict_typeclass.x"
100+ "tests/unicode.x"
101+ ];
102+ extraTmpFiles = [];
103+ extraDocFiles = [];
104+ };
105+ components = {
106+ exes = {
107+ "alex" = {
108+ depends = [
109+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
110+ ] ++ (if flags.small_base
111+ then [
112+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
113+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
114+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
115+ (hsPkgs."directory" or (errorHandler.buildDepError "directory"))
116+ ]
117+ else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]);
118+ buildable = true;
119+ modules = [
120+ "AbsSyn"
121+ "CharSet"
122+ "DFA"
123+ "DFAMin"
124+ "DFS"
125+ "Info"
126+ "Map"
127+ "NFA"
128+ "Output"
129+ "Paths_alex"
130+ "Parser"
131+ "ParseMonad"
132+ "Scan"
133+ "Set"
134+ "Sort"
135+ "Util"
136+ "UTF8"
137+ "Data/Ranged"
138+ "Data/Ranged/Boundaries"
139+ "Data/Ranged/RangedSet"
140+ "Data/Ranged/Ranges"
141+ ];
142+ hsSourceDirs = [ "src" ];
143+ mainPath = [ "Main.hs" ] ++ [ "" ];
144+ };
145+ };
146+ tests = {
147+ "tests" = {
148+ depends = [
149+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
150+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
151+ ];
152+ build-tools = [
153+ (hsPkgs.buildPackages.alex.components.exes.alex or (pkgs.buildPackages.alex or (errorHandler.buildToolDepError "alex:alex")))
154+ ];
155+ buildable = true;
156+ mainPath = [ "test.hs" ];
157+ };
158+ };
159+ };
160+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc883/alex/default.nixnew file+65
@@ -0,0 +1,65 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "bytestring".revision = (((hackage."bytestring")."0.10.10.0").revisions).default;
7+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
8+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
9+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
10+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
11+ "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default;
12+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
13+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
14+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
15+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
16+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
17+ };
18+ compiler = {
19+ version = "8.8.3";
20+ nix-name = "ghc883";
21+ packages = {
22+ "array" = "0.5.4.0";
23+ "bytestring" = "0.10.10.0";
24+ "filepath" = "1.4.2.1";
25+ "ghc-prim" = "0.5.3";
26+ "base" = "4.13.0.0";
27+ "time" = "1.9.3";
28+ "directory" = "1.3.6.0";
29+ "rts" = "1.0";
30+ "deepseq" = "1.4.4.0";
31+ "unix" = "2.7.2.2";
32+ "integer-gmp" = "1.0.2.0";
33+ "containers" = "0.6.2.1";
34+ };
35+ };
36+ };
37+ extras = hackage:
38+ { packages = { alex = ./.plan.nix/alex.nix; }; };
39+ modules = [
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
44+ };
45+ })
46+ ({ lib, ... }:
47+ {
48+ packages = {
49+ "filepath".components.library.planned = lib.mkOverride 900 true;
50+ "bytestring".components.library.planned = lib.mkOverride 900 true;
51+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
52+ "array".components.library.planned = lib.mkOverride 900 true;
53+ "rts".components.library.planned = lib.mkOverride 900 true;
54+ "unix".components.library.planned = lib.mkOverride 900 true;
55+ "directory".components.library.planned = lib.mkOverride 900 true;
56+ "time".components.library.planned = lib.mkOverride 900 true;
57+ "alex".components.exes."alex".planned = lib.mkOverride 900 true;
58+ "deepseq".components.library.planned = lib.mkOverride 900 true;
59+ "base".components.library.planned = lib.mkOverride 900 true;
60+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
61+ "containers".components.library.planned = lib.mkOverride 900 true;
62+ };
63+ })
64+ ];
65+ }
materialized/bootstrap/ghc883/happy-1.19.12/.plan.nix/happy.nixnew file+200
@@ -0,0 +1,200 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.12"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "HappyTemplate"
30+ "HappyTemplate-arrays"
31+ "HappyTemplate-arrays-coerce"
32+ "HappyTemplate-arrays-coerce-debug"
33+ "HappyTemplate-arrays-debug"
34+ "HappyTemplate-arrays-ghc"
35+ "HappyTemplate-arrays-ghc-debug"
36+ "HappyTemplate-coerce"
37+ "HappyTemplate-ghc"
38+ "GLR_Base"
39+ "GLR_Lib"
40+ "GLR_Lib-ghc"
41+ "GLR_Lib-ghc-debug"
42+ ];
43+ extraSrcFiles = [
44+ "ANNOUNCE"
45+ "CHANGES"
46+ "Makefile"
47+ "README.md"
48+ "TODO"
49+ "doc/Makefile"
50+ "doc/aclocal.m4"
51+ "doc/config.mk.in"
52+ "doc/configure.ac"
53+ "doc/docbook-xml.mk"
54+ "doc/fptools.css"
55+ "doc/happy.1.in"
56+ "doc/happy.xml"
57+ "examples/glr/nlp/Main.lhs"
58+ "examples/glr/nlp/Makefile"
59+ "examples/glr/nlp/README"
60+ "examples/glr/nlp/English.y"
61+ "examples/glr/nlp/Hugs.lhs"
62+ "examples/glr/Makefile"
63+ "examples/glr/Makefile.defs"
64+ "examples/glr/expr-eval/Main.lhs"
65+ "examples/glr/expr-eval/Makefile"
66+ "examples/glr/expr-eval/Expr.y"
67+ "examples/glr/expr-eval/README"
68+ "examples/glr/expr-eval/Hugs.lhs"
69+ "examples/glr/expr-tree/Main.lhs"
70+ "examples/glr/expr-tree/Makefile"
71+ "examples/glr/expr-tree/Expr.y"
72+ "examples/glr/expr-tree/README"
73+ "examples/glr/expr-tree/Tree.lhs"
74+ "examples/glr/expr-tree/Hugs.lhs"
75+ "examples/glr/highly-ambiguous/Main.lhs"
76+ "examples/glr/highly-ambiguous/Makefile"
77+ "examples/glr/highly-ambiguous/Expr.y"
78+ "examples/glr/highly-ambiguous/README"
79+ "examples/glr/highly-ambiguous/Hugs.lhs"
80+ "examples/glr/hidden-leftrec/Main.lhs"
81+ "examples/glr/hidden-leftrec/Makefile"
82+ "examples/glr/hidden-leftrec/Expr.y"
83+ "examples/glr/hidden-leftrec/README"
84+ "examples/glr/hidden-leftrec/Hugs.lhs"
85+ "examples/glr/expr-monad/Main.lhs"
86+ "examples/glr/expr-monad/Makefile"
87+ "examples/glr/expr-monad/Expr.y"
88+ "examples/glr/expr-monad/README"
89+ "examples/glr/expr-monad/Hugs.lhs"
90+ "examples/glr/bio-eg/Main.lhs"
91+ "examples/glr/bio-eg/Makefile"
92+ "examples/glr/bio-eg/Bio.y"
93+ "examples/glr/bio-eg/README"
94+ "examples/glr/bio-eg/1-1200.dna"
95+ "examples/glr/bio-eg/1-600.dna"
96+ "examples/glr/common/DV_lhs"
97+ "examples/glr/common/DaVinciTypes.hs"
98+ "examples/glr/packing/Main.lhs"
99+ "examples/glr/packing/Makefile"
100+ "examples/glr/packing/Expr.y"
101+ "examples/glr/packing/README"
102+ "examples/glr/packing/Hugs.lhs"
103+ "examples/PgnParser.ly"
104+ "examples/MonadTest.ly"
105+ "examples/igloo/ParserM.hs"
106+ "examples/igloo/Makefile"
107+ "examples/igloo/Parser.y"
108+ "examples/igloo/Foo.hs"
109+ "examples/igloo/README"
110+ "examples/igloo/Lexer.x"
111+ "examples/README"
112+ "examples/Calc.ly"
113+ "examples/DavesExample.ly"
114+ "examples/ErrorTest.ly"
115+ "examples/ErlParser.ly"
116+ "examples/SimonsExample.ly"
117+ "examples/LexerTest.ly"
118+ "happy.spec"
119+ "src/ARRAY-NOTES"
120+ "tests/AttrGrammar001.y"
121+ "tests/AttrGrammar002.y"
122+ "tests/Makefile"
123+ "tests/Partial.ly"
124+ "tests/Test.ly"
125+ "tests/TestMulti.ly"
126+ "tests/TestPrecedence.ly"
127+ "tests/bogus-token.y"
128+ "tests/bug001.ly"
129+ "tests/bug002.y"
130+ "tests/error001.stderr"
131+ "tests/error001.stdout"
132+ "tests/error001.y"
133+ "tests/monad001.y"
134+ "tests/monad002.ly"
135+ "tests/monaderror.y"
136+ "tests/precedence001.ly"
137+ "tests/precedence002.y"
138+ "tests/test_rules.y"
139+ "tests/issue91.y"
140+ "tests/issue93.y"
141+ "tests/issue94.y"
142+ "tests/issue95.y"
143+ "tests/monaderror-explist.y"
144+ "tests/typeclass_monad001.y"
145+ "tests/typeclass_monad002.ly"
146+ "tests/typeclass_monad_lexer.y"
147+ "tests/rank2.y"
148+ ];
149+ extraTmpFiles = [];
150+ extraDocFiles = [];
151+ };
152+ components = {
153+ exes = {
154+ "happy" = {
155+ depends = [
156+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
157+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
158+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
159+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
160+ ];
161+ buildable = true;
162+ modules = [
163+ "Paths_happy"
164+ "AbsSyn"
165+ "First"
166+ "GenUtils"
167+ "Grammar"
168+ "Info"
169+ "LALR"
170+ "Lexer"
171+ "ParseMonad"
172+ "Parser"
173+ "ProduceCode"
174+ "ProduceGLRCode"
175+ "NameSet"
176+ "Target"
177+ "AttrGrammar"
178+ "AttrGrammarParser"
179+ "ParamRules"
180+ "PrettyGrammar"
181+ ];
182+ hsSourceDirs = [ "src" ];
183+ mainPath = [ "Main.lhs" ];
184+ };
185+ };
186+ tests = {
187+ "tests" = {
188+ depends = [
189+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
190+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
191+ ];
192+ build-tools = [
193+ (hsPkgs.buildPackages.happy.components.exes.happy or (pkgs.buildPackages.happy or (errorHandler.buildToolDepError "happy:happy")))
194+ ];
195+ buildable = true;
196+ mainPath = [ "test.hs" ];
197+ };
198+ };
199+ };
200+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc883/happy-1.19.12/default.nixnew file+56
@@ -0,0 +1,56 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
7+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
8+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default;
11+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
12+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
13+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
14+ };
15+ compiler = {
16+ version = "8.8.3";
17+ nix-name = "ghc883";
18+ packages = {
19+ "array" = "0.5.4.0";
20+ "mtl" = "2.2.2";
21+ "ghc-prim" = "0.5.3";
22+ "base" = "4.13.0.0";
23+ "rts" = "1.0";
24+ "transformers" = "0.5.6.2";
25+ "deepseq" = "1.4.4.0";
26+ "integer-gmp" = "1.0.2.0";
27+ "containers" = "0.6.2.1";
28+ };
29+ };
30+ };
31+ extras = hackage:
32+ { packages = { happy = ./.plan.nix/happy.nix; }; };
33+ modules = [
34+ ({ lib, ... }:
35+ {
36+ packages = {
37+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
38+ };
39+ })
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
44+ "array".components.library.planned = lib.mkOverride 900 true;
45+ "rts".components.library.planned = lib.mkOverride 900 true;
46+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
47+ "mtl".components.library.planned = lib.mkOverride 900 true;
48+ "transformers".components.library.planned = lib.mkOverride 900 true;
49+ "deepseq".components.library.planned = lib.mkOverride 900 true;
50+ "base".components.library.planned = lib.mkOverride 900 true;
51+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
52+ "containers".components.library.planned = lib.mkOverride 900 true;
53+ };
54+ })
55+ ];
56+ }
materialized/bootstrap/ghc883/hscolour/.plan.nix/hscolour.nixnew file+70
@@ -0,0 +1,70 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = {};
12+ package = {
13+ specVersion = "1.6";
14+ identifier = { name = "hscolour"; version = "1.24.4"; };
15+ license = "LicenseRef-LGPL";
16+ copyright = "2003-2017 Malcolm Wallace; 2006 Bjorn Bringert";
17+ maintainer = "Malcolm Wallace";
18+ author = "Malcolm Wallace";
19+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
20+ url = "";
21+ synopsis = "Colourise Haskell code.";
22+ description = "hscolour is a small Haskell script to colourise Haskell code. It currently\nhas six output formats:\nANSI terminal codes (optionally XTerm-256colour codes),\nHTML 3.2 with <font> tags,\nHTML 4.01 with CSS,\nHTML 4.01 with CSS and mouseover annotations,\nXHTML 1.0 with inline CSS styling,\nLaTeX,\nand mIRC chat codes.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENCE-LGPL" ];
27+ dataDir = ".";
28+ dataFiles = [ "hscolour.css" "data/rgb24-example-.hscolour" ];
29+ extraSrcFiles = [];
30+ extraTmpFiles = [];
31+ extraDocFiles = [];
32+ };
33+ components = {
34+ "library" = {
35+ depends = [
36+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
37+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
38+ ];
39+ buildable = true;
40+ modules = [
41+ "Language/Haskell/HsColour"
42+ "Language/Haskell/HsColour/ANSI"
43+ "Language/Haskell/HsColour/Anchors"
44+ "Language/Haskell/HsColour/ACSS"
45+ "Language/Haskell/HsColour/CSS"
46+ "Language/Haskell/HsColour/Classify"
47+ "Language/Haskell/HsColour/ColourHighlight"
48+ "Language/Haskell/HsColour/Colourise"
49+ "Language/Haskell/HsColour/General"
50+ "Language/Haskell/HsColour/HTML"
51+ "Language/Haskell/HsColour/InlineCSS"
52+ "Language/Haskell/HsColour/LaTeX"
53+ "Language/Haskell/HsColour/MIRC"
54+ "Language/Haskell/HsColour/Options"
55+ "Language/Haskell/HsColour/Output"
56+ "Language/Haskell/HsColour/TTY"
57+ ];
58+ };
59+ exes = {
60+ "HsColour" = {
61+ depends = [
62+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
63+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
64+ ];
65+ buildable = true;
66+ mainPath = [ "HsColour.hs" ];
67+ };
68+ };
69+ };
70+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc883/hscolour/default.nixnew file+47
@@ -0,0 +1,47 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
7+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
8+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
9+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
10+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
11+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
12+ };
13+ compiler = {
14+ version = "8.8.3";
15+ nix-name = "ghc883";
16+ packages = {
17+ "array" = "0.5.4.0";
18+ "ghc-prim" = "0.5.3";
19+ "base" = "4.13.0.0";
20+ "rts" = "1.0";
21+ "deepseq" = "1.4.4.0";
22+ "integer-gmp" = "1.0.2.0";
23+ "containers" = "0.6.2.1";
24+ };
25+ };
26+ };
27+ extras = hackage:
28+ { packages = { hscolour = ./.plan.nix/hscolour.nix; }; };
29+ modules = [
30+ ({ lib, ... }:
31+ { packages = { "hscolour" = { flags = {}; }; }; })
32+ ({ lib, ... }:
33+ {
34+ packages = {
35+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
36+ "array".components.library.planned = lib.mkOverride 900 true;
37+ "rts".components.library.planned = lib.mkOverride 900 true;
38+ "hscolour".components.library.planned = lib.mkOverride 900 true;
39+ "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true;
40+ "deepseq".components.library.planned = lib.mkOverride 900 true;
41+ "base".components.library.planned = lib.mkOverride 900 true;
42+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
43+ "containers".components.library.planned = lib.mkOverride 900 true;
44+ };
45+ })
46+ ];
47+ }
materialized/bootstrap/ghc884/alex/.plan.nix/alex.nixnew file+160
@@ -0,0 +1,160 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "alex"; version = "3.2.4"; };
15+ license = "BSD-3-Clause";
16+ copyright = "(c) Chis Dornan, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Chris Dornan and Simon Marlow";
19+ homepage = "http://www.haskell.org/alex/";
20+ url = "";
21+ synopsis = "Alex is a tool for generating lexical analysers in Haskell";
22+ description = "Alex is a tool for generating lexical analysers in Haskell.\nIt takes a description of tokens based on regular\nexpressions and generates a Haskell module containing code\nfor scanning text efficiently. It is similar to the tool\nlex or flex for C/C++.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "AlexTemplate"
30+ "AlexTemplate-ghc"
31+ "AlexTemplate-ghc-nopred"
32+ "AlexTemplate-ghc-debug"
33+ "AlexTemplate-debug"
34+ "AlexWrapper-basic"
35+ "AlexWrapper-basic-bytestring"
36+ "AlexWrapper-strict-bytestring"
37+ "AlexWrapper-posn"
38+ "AlexWrapper-posn-bytestring"
39+ "AlexWrapper-monad"
40+ "AlexWrapper-monad-bytestring"
41+ "AlexWrapper-monadUserState"
42+ "AlexWrapper-monadUserState-bytestring"
43+ "AlexWrapper-gscan"
44+ ];
45+ extraSrcFiles = [
46+ "CHANGELOG.md"
47+ "README.md"
48+ "TODO"
49+ "alex.spec"
50+ "doc/Makefile"
51+ "doc/aclocal.m4"
52+ "doc/alex.1.in"
53+ "doc/alex.xml"
54+ "doc/config.mk.in"
55+ "doc/configure.ac"
56+ "doc/docbook-xml.mk"
57+ "doc/fptools.css"
58+ "examples/Makefile"
59+ "examples/Tokens.x"
60+ "examples/Tokens_gscan.x"
61+ "examples/Tokens_posn.x"
62+ "examples/examples.x"
63+ "examples/haskell.x"
64+ "examples/lit.x"
65+ "examples/pp.x"
66+ "examples/state.x"
67+ "examples/tiny.y"
68+ "examples/words.x"
69+ "examples/words_monad.x"
70+ "examples/words_posn.x"
71+ "src/Parser.y.boot"
72+ "src/Scan.x.boot"
73+ "src/ghc_hooks.c"
74+ "templates/GenericTemplate.hs"
75+ "templates/wrappers.hs"
76+ "tests/Makefile"
77+ "tests/simple.x"
78+ "tests/null.x"
79+ "tests/tokens.x"
80+ "tests/tokens_gscan.x"
81+ "tests/tokens_posn.x"
82+ "tests/tokens_bytestring.x"
83+ "tests/tokens_posn_bytestring.x"
84+ "tests/tokens_scan_user.x"
85+ "tests/tokens_strict_bytestring.x"
86+ "tests/tokens_monad_bytestring.x"
87+ "tests/tokens_monadUserState_bytestring.x"
88+ "tests/tokens_bytestring_unicode.x"
89+ "tests/basic_typeclass.x"
90+ "tests/basic_typeclass_bytestring.x"
91+ "tests/default_typeclass.x"
92+ "tests/gscan_typeclass.x"
93+ "tests/posn_typeclass.x"
94+ "tests/monad_typeclass.x"
95+ "tests/monad_typeclass_bytestring.x"
96+ "tests/monadUserState_typeclass.x"
97+ "tests/monadUserState_typeclass_bytestring.x"
98+ "tests/posn_typeclass_bytestring.x"
99+ "tests/strict_typeclass.x"
100+ "tests/unicode.x"
101+ ];
102+ extraTmpFiles = [];
103+ extraDocFiles = [];
104+ };
105+ components = {
106+ exes = {
107+ "alex" = {
108+ depends = [
109+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
110+ ] ++ (if flags.small_base
111+ then [
112+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
113+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
114+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
115+ (hsPkgs."directory" or (errorHandler.buildDepError "directory"))
116+ ]
117+ else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]);
118+ buildable = true;
119+ modules = [
120+ "AbsSyn"
121+ "CharSet"
122+ "DFA"
123+ "DFAMin"
124+ "DFS"
125+ "Info"
126+ "Map"
127+ "NFA"
128+ "Output"
129+ "Paths_alex"
130+ "Parser"
131+ "ParseMonad"
132+ "Scan"
133+ "Set"
134+ "Sort"
135+ "Util"
136+ "UTF8"
137+ "Data/Ranged"
138+ "Data/Ranged/Boundaries"
139+ "Data/Ranged/RangedSet"
140+ "Data/Ranged/Ranges"
141+ ];
142+ hsSourceDirs = [ "src" ];
143+ mainPath = [ "Main.hs" ] ++ [ "" ];
144+ };
145+ };
146+ tests = {
147+ "tests" = {
148+ depends = [
149+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
150+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
151+ ];
152+ build-tools = [
153+ (hsPkgs.buildPackages.alex.components.exes.alex or (pkgs.buildPackages.alex or (errorHandler.buildToolDepError "alex:alex")))
154+ ];
155+ buildable = true;
156+ mainPath = [ "test.hs" ];
157+ };
158+ };
159+ };
160+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc884/alex/default.nixnew file+65
@@ -0,0 +1,65 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "bytestring".revision = (((hackage."bytestring")."0.10.10.1").revisions).default;
7+ "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
8+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
9+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
10+ "time".revision = (((hackage."time")."1.9.3").revisions).default;
11+ "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default;
12+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
13+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
14+ "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
15+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
16+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
17+ };
18+ compiler = {
19+ version = "8.8.4";
20+ nix-name = "ghc884";
21+ packages = {
22+ "array" = "0.5.4.0";
23+ "bytestring" = "0.10.10.1";
24+ "filepath" = "1.4.2.1";
25+ "ghc-prim" = "0.5.3";
26+ "base" = "4.13.0.0";
27+ "time" = "1.9.3";
28+ "directory" = "1.3.6.0";
29+ "rts" = "1.0";
30+ "deepseq" = "1.4.4.0";
31+ "unix" = "2.7.2.2";
32+ "integer-gmp" = "1.0.2.0";
33+ "containers" = "0.6.2.1";
34+ };
35+ };
36+ };
37+ extras = hackage:
38+ { packages = { alex = ./.plan.nix/alex.nix; }; };
39+ modules = [
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
44+ };
45+ })
46+ ({ lib, ... }:
47+ {
48+ packages = {
49+ "filepath".components.library.planned = lib.mkOverride 900 true;
50+ "bytestring".components.library.planned = lib.mkOverride 900 true;
51+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
52+ "array".components.library.planned = lib.mkOverride 900 true;
53+ "rts".components.library.planned = lib.mkOverride 900 true;
54+ "unix".components.library.planned = lib.mkOverride 900 true;
55+ "directory".components.library.planned = lib.mkOverride 900 true;
56+ "time".components.library.planned = lib.mkOverride 900 true;
57+ "alex".components.exes."alex".planned = lib.mkOverride 900 true;
58+ "deepseq".components.library.planned = lib.mkOverride 900 true;
59+ "base".components.library.planned = lib.mkOverride 900 true;
60+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
61+ "containers".components.library.planned = lib.mkOverride 900 true;
62+ };
63+ })
64+ ];
65+ }
materialized/bootstrap/ghc884/happy-1.19.12/.plan.nix/happy.nixnew file+200
@@ -0,0 +1,200 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = { small_base = true; };
12+ package = {
13+ specVersion = "1.8";
14+ identifier = { name = "happy"; version = "1.19.12"; };
15+ license = "BSD-2-Clause";
16+ copyright = "(c) Andy Gill, Simon Marlow";
17+ maintainer = "Simon Marlow <marlowsd@gmail.com>";
18+ author = "Andy Gill and Simon Marlow";
19+ homepage = "https://www.haskell.org/happy/";
20+ url = "";
21+ synopsis = "Happy is a parser generator for Haskell";
22+ description = "Happy is a parser generator for Haskell. Given a grammar\nspecification in BNF, Happy generates Haskell code to parse the\ngrammar. Happy works in a similar way to the @yacc@ tool for C.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENSE" ];
27+ dataDir = "data/";
28+ dataFiles = [
29+ "HappyTemplate"
30+ "HappyTemplate-arrays"
31+ "HappyTemplate-arrays-coerce"
32+ "HappyTemplate-arrays-coerce-debug"
33+ "HappyTemplate-arrays-debug"
34+ "HappyTemplate-arrays-ghc"
35+ "HappyTemplate-arrays-ghc-debug"
36+ "HappyTemplate-coerce"
37+ "HappyTemplate-ghc"
38+ "GLR_Base"
39+ "GLR_Lib"
40+ "GLR_Lib-ghc"
41+ "GLR_Lib-ghc-debug"
42+ ];
43+ extraSrcFiles = [
44+ "ANNOUNCE"
45+ "CHANGES"
46+ "Makefile"
47+ "README.md"
48+ "TODO"
49+ "doc/Makefile"
50+ "doc/aclocal.m4"
51+ "doc/config.mk.in"
52+ "doc/configure.ac"
53+ "doc/docbook-xml.mk"
54+ "doc/fptools.css"
55+ "doc/happy.1.in"
56+ "doc/happy.xml"
57+ "examples/glr/nlp/Main.lhs"
58+ "examples/glr/nlp/Makefile"
59+ "examples/glr/nlp/README"
60+ "examples/glr/nlp/English.y"
61+ "examples/glr/nlp/Hugs.lhs"
62+ "examples/glr/Makefile"
63+ "examples/glr/Makefile.defs"
64+ "examples/glr/expr-eval/Main.lhs"
65+ "examples/glr/expr-eval/Makefile"
66+ "examples/glr/expr-eval/Expr.y"
67+ "examples/glr/expr-eval/README"
68+ "examples/glr/expr-eval/Hugs.lhs"
69+ "examples/glr/expr-tree/Main.lhs"
70+ "examples/glr/expr-tree/Makefile"
71+ "examples/glr/expr-tree/Expr.y"
72+ "examples/glr/expr-tree/README"
73+ "examples/glr/expr-tree/Tree.lhs"
74+ "examples/glr/expr-tree/Hugs.lhs"
75+ "examples/glr/highly-ambiguous/Main.lhs"
76+ "examples/glr/highly-ambiguous/Makefile"
77+ "examples/glr/highly-ambiguous/Expr.y"
78+ "examples/glr/highly-ambiguous/README"
79+ "examples/glr/highly-ambiguous/Hugs.lhs"
80+ "examples/glr/hidden-leftrec/Main.lhs"
81+ "examples/glr/hidden-leftrec/Makefile"
82+ "examples/glr/hidden-leftrec/Expr.y"
83+ "examples/glr/hidden-leftrec/README"
84+ "examples/glr/hidden-leftrec/Hugs.lhs"
85+ "examples/glr/expr-monad/Main.lhs"
86+ "examples/glr/expr-monad/Makefile"
87+ "examples/glr/expr-monad/Expr.y"
88+ "examples/glr/expr-monad/README"
89+ "examples/glr/expr-monad/Hugs.lhs"
90+ "examples/glr/bio-eg/Main.lhs"
91+ "examples/glr/bio-eg/Makefile"
92+ "examples/glr/bio-eg/Bio.y"
93+ "examples/glr/bio-eg/README"
94+ "examples/glr/bio-eg/1-1200.dna"
95+ "examples/glr/bio-eg/1-600.dna"
96+ "examples/glr/common/DV_lhs"
97+ "examples/glr/common/DaVinciTypes.hs"
98+ "examples/glr/packing/Main.lhs"
99+ "examples/glr/packing/Makefile"
100+ "examples/glr/packing/Expr.y"
101+ "examples/glr/packing/README"
102+ "examples/glr/packing/Hugs.lhs"
103+ "examples/PgnParser.ly"
104+ "examples/MonadTest.ly"
105+ "examples/igloo/ParserM.hs"
106+ "examples/igloo/Makefile"
107+ "examples/igloo/Parser.y"
108+ "examples/igloo/Foo.hs"
109+ "examples/igloo/README"
110+ "examples/igloo/Lexer.x"
111+ "examples/README"
112+ "examples/Calc.ly"
113+ "examples/DavesExample.ly"
114+ "examples/ErrorTest.ly"
115+ "examples/ErlParser.ly"
116+ "examples/SimonsExample.ly"
117+ "examples/LexerTest.ly"
118+ "happy.spec"
119+ "src/ARRAY-NOTES"
120+ "tests/AttrGrammar001.y"
121+ "tests/AttrGrammar002.y"
122+ "tests/Makefile"
123+ "tests/Partial.ly"
124+ "tests/Test.ly"
125+ "tests/TestMulti.ly"
126+ "tests/TestPrecedence.ly"
127+ "tests/bogus-token.y"
128+ "tests/bug001.ly"
129+ "tests/bug002.y"
130+ "tests/error001.stderr"
131+ "tests/error001.stdout"
132+ "tests/error001.y"
133+ "tests/monad001.y"
134+ "tests/monad002.ly"
135+ "tests/monaderror.y"
136+ "tests/precedence001.ly"
137+ "tests/precedence002.y"
138+ "tests/test_rules.y"
139+ "tests/issue91.y"
140+ "tests/issue93.y"
141+ "tests/issue94.y"
142+ "tests/issue95.y"
143+ "tests/monaderror-explist.y"
144+ "tests/typeclass_monad001.y"
145+ "tests/typeclass_monad002.ly"
146+ "tests/typeclass_monad_lexer.y"
147+ "tests/rank2.y"
148+ ];
149+ extraTmpFiles = [];
150+ extraDocFiles = [];
151+ };
152+ components = {
153+ exes = {
154+ "happy" = {
155+ depends = [
156+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
157+ (hsPkgs."array" or (errorHandler.buildDepError "array"))
158+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
159+ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl"))
160+ ];
161+ buildable = true;
162+ modules = [
163+ "Paths_happy"
164+ "AbsSyn"
165+ "First"
166+ "GenUtils"
167+ "Grammar"
168+ "Info"
169+ "LALR"
170+ "Lexer"
171+ "ParseMonad"
172+ "Parser"
173+ "ProduceCode"
174+ "ProduceGLRCode"
175+ "NameSet"
176+ "Target"
177+ "AttrGrammar"
178+ "AttrGrammarParser"
179+ "ParamRules"
180+ "PrettyGrammar"
181+ ];
182+ hsSourceDirs = [ "src" ];
183+ mainPath = [ "Main.lhs" ];
184+ };
185+ };
186+ tests = {
187+ "tests" = {
188+ depends = [
189+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
190+ (hsPkgs."process" or (errorHandler.buildDepError "process"))
191+ ];
192+ build-tools = [
193+ (hsPkgs.buildPackages.happy.components.exes.happy or (pkgs.buildPackages.happy or (errorHandler.buildToolDepError "happy:happy")))
194+ ];
195+ buildable = true;
196+ mainPath = [ "test.hs" ];
197+ };
198+ };
199+ };
200+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc884/happy-1.19.12/default.nixnew file+56
@@ -0,0 +1,56 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
7+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
8+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
9+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
10+ "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default;
11+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
12+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
13+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
14+ };
15+ compiler = {
16+ version = "8.8.4";
17+ nix-name = "ghc884";
18+ packages = {
19+ "array" = "0.5.4.0";
20+ "mtl" = "2.2.2";
21+ "ghc-prim" = "0.5.3";
22+ "base" = "4.13.0.0";
23+ "rts" = "1.0";
24+ "transformers" = "0.5.6.2";
25+ "deepseq" = "1.4.4.0";
26+ "integer-gmp" = "1.0.2.0";
27+ "containers" = "0.6.2.1";
28+ };
29+ };
30+ };
31+ extras = hackage:
32+ { packages = { happy = ./.plan.nix/happy.nix; }; };
33+ modules = [
34+ ({ lib, ... }:
35+ {
36+ packages = {
37+ "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; };
38+ };
39+ })
40+ ({ lib, ... }:
41+ {
42+ packages = {
43+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
44+ "array".components.library.planned = lib.mkOverride 900 true;
45+ "rts".components.library.planned = lib.mkOverride 900 true;
46+ "happy".components.exes."happy".planned = lib.mkOverride 900 true;
47+ "mtl".components.library.planned = lib.mkOverride 900 true;
48+ "transformers".components.library.planned = lib.mkOverride 900 true;
49+ "deepseq".components.library.planned = lib.mkOverride 900 true;
50+ "base".components.library.planned = lib.mkOverride 900 true;
51+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
52+ "containers".components.library.planned = lib.mkOverride 900 true;
53+ };
54+ })
55+ ];
56+ }
materialized/bootstrap/ghc884/hscolour/.plan.nix/hscolour.nixnew file+70
@@ -0,0 +1,70 @@
1+{ system
2+ , compiler
3+ , flags
4+ , pkgs
5+ , hsPkgs
6+ , pkgconfPkgs
7+ , errorHandler
8+ , config
9+ , ... }:
10+ {
11+ flags = {};
12+ package = {
13+ specVersion = "1.6";
14+ identifier = { name = "hscolour"; version = "1.24.4"; };
15+ license = "LicenseRef-LGPL";
16+ copyright = "2003-2017 Malcolm Wallace; 2006 Bjorn Bringert";
17+ maintainer = "Malcolm Wallace";
18+ author = "Malcolm Wallace";
19+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
20+ url = "";
21+ synopsis = "Colourise Haskell code.";
22+ description = "hscolour is a small Haskell script to colourise Haskell code. It currently\nhas six output formats:\nANSI terminal codes (optionally XTerm-256colour codes),\nHTML 3.2 with <font> tags,\nHTML 4.01 with CSS,\nHTML 4.01 with CSS and mouseover annotations,\nXHTML 1.0 with inline CSS styling,\nLaTeX,\nand mIRC chat codes.";
23+ buildType = "Simple";
24+ isLocal = true;
25+ detailLevel = "FullDetails";
26+ licenseFiles = [ "LICENCE-LGPL" ];
27+ dataDir = ".";
28+ dataFiles = [ "hscolour.css" "data/rgb24-example-.hscolour" ];
29+ extraSrcFiles = [];
30+ extraTmpFiles = [];
31+ extraDocFiles = [];
32+ };
33+ components = {
34+ "library" = {
35+ depends = [
36+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
37+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
38+ ];
39+ buildable = true;
40+ modules = [
41+ "Language/Haskell/HsColour"
42+ "Language/Haskell/HsColour/ANSI"
43+ "Language/Haskell/HsColour/Anchors"
44+ "Language/Haskell/HsColour/ACSS"
45+ "Language/Haskell/HsColour/CSS"
46+ "Language/Haskell/HsColour/Classify"
47+ "Language/Haskell/HsColour/ColourHighlight"
48+ "Language/Haskell/HsColour/Colourise"
49+ "Language/Haskell/HsColour/General"
50+ "Language/Haskell/HsColour/HTML"
51+ "Language/Haskell/HsColour/InlineCSS"
52+ "Language/Haskell/HsColour/LaTeX"
53+ "Language/Haskell/HsColour/MIRC"
54+ "Language/Haskell/HsColour/Options"
55+ "Language/Haskell/HsColour/Output"
56+ "Language/Haskell/HsColour/TTY"
57+ ];
58+ };
59+ exes = {
60+ "HsColour" = {
61+ depends = [
62+ (hsPkgs."base" or (errorHandler.buildDepError "base"))
63+ (hsPkgs."containers" or (errorHandler.buildDepError "containers"))
64+ ];
65+ buildable = true;
66+ mainPath = [ "HsColour.hs" ];
67+ };
68+ };
69+ };
70+ } // rec { src = (pkgs.lib).mkDefault ../.; }
materialized/bootstrap/ghc884/hscolour/default.nixnew file+47
@@ -0,0 +1,47 @@
1+{
2+ pkgs = hackage:
3+ {
4+ packages = {
5+ "array".revision = (((hackage."array")."0.5.4.0").revisions).default;
6+ "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
7+ "base".revision = (((hackage."base")."4.13.0.0").revisions).default;
8+ "rts".revision = (((hackage."rts")."1.0").revisions).default;
9+ "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
10+ "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
11+ "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default;
12+ };
13+ compiler = {
14+ version = "8.8.4";
15+ nix-name = "ghc884";
16+ packages = {
17+ "array" = "0.5.4.0";
18+ "ghc-prim" = "0.5.3";
19+ "base" = "4.13.0.0";
20+ "rts" = "1.0";
21+ "deepseq" = "1.4.4.0";
22+ "integer-gmp" = "1.0.2.0";
23+ "containers" = "0.6.2.1";
24+ };
25+ };
26+ };
27+ extras = hackage:
28+ { packages = { hscolour = ./.plan.nix/hscolour.nix; }; };
29+ modules = [
30+ ({ lib, ... }:
31+ { packages = { "hscolour" = { flags = {}; }; }; })
32+ ({ lib, ... }:
33+ {
34+ packages = {
35+ "ghc-prim".components.library.planned = lib.mkOverride 900 true;
36+ "array".components.library.planned = lib.mkOverride 900 true;
37+ "rts".components.library.planned = lib.mkOverride 900 true;
38+ "hscolour".components.library.planned = lib.mkOverride 900 true;
39+ "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true;
40+ "deepseq".components.library.planned = lib.mkOverride 900 true;
41+ "base".components.library.planned = lib.mkOverride 900 true;
42+ "integer-gmp".components.library.planned = lib.mkOverride 900 true;
43+ "containers".components.library.planned = lib.mkOverride 900 true;
44+ };
45+ })
46+ ];
47+ }
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc-pkg/dump-globalnew file+1429
@@ -0,0 +1,1429 @@
1+name: Cabal
2+version: 3.2.0.0
3+visibility: public
4+id: Cabal-3.2.0.0
5+key: Cabal-3.2.0.0
6+license: BSD-3-Clause
7+copyright: 2003-2019, Cabal Development Team (see AUTHORS file)
8+maintainer: cabal-devel@haskell.org
9+author: Cabal Development Team <cabal-devel@haskell.org>
10+homepage: http://www.haskell.org/cabal/
11+synopsis: A framework for packaging Haskell software
12+description:
13+ The Haskell Common Architecture for Building Applications and
14+ Libraries: a framework defining a common interface for authors to more
15+ easily build their Haskell applications in a portable way.
16+ The Haskell Cabal is part of a larger infrastructure for distributing,
17+ organizing, and cataloging Haskell libraries and tools.
18+category: Distribution
19+exposed: True
20+exposed-modules:
21+ Distribution.Backpack Distribution.Backpack.ComponentsGraph
22+ Distribution.Backpack.Configure
23+ Distribution.Backpack.ConfiguredComponent
24+ Distribution.Backpack.DescribeUnitId
25+ Distribution.Backpack.FullUnitId
26+ Distribution.Backpack.LinkedComponent
27+ Distribution.Backpack.ModSubst Distribution.Backpack.ModuleShape
28+ Distribution.Backpack.PreModuleShape Distribution.CabalSpecVersion
29+ Distribution.Compat.Binary Distribution.Compat.CharParsing
30+ Distribution.Compat.CreatePipe Distribution.Compat.DList
31+ Distribution.Compat.Directory Distribution.Compat.Environment
32+ Distribution.Compat.Exception Distribution.Compat.FilePath
33+ Distribution.Compat.Graph Distribution.Compat.Internal.TempFile
34+ Distribution.Compat.Lens Distribution.Compat.Newtype
35+ Distribution.Compat.Parsing Distribution.Compat.Prelude.Internal
36+ Distribution.Compat.ResponseFile Distribution.Compat.Semigroup
37+ Distribution.Compat.Stack Distribution.Compat.Time
38+ Distribution.Compat.Typeable Distribution.Compiler
39+ Distribution.FieldGrammar Distribution.FieldGrammar.Class
40+ Distribution.FieldGrammar.FieldDescrs
41+ Distribution.FieldGrammar.Parsec Distribution.FieldGrammar.Pretty
42+ Distribution.Fields Distribution.Fields.ConfVar
43+ Distribution.Fields.Field Distribution.Fields.Lexer
44+ Distribution.Fields.LexerMonad Distribution.Fields.ParseResult
45+ Distribution.Fields.Parser Distribution.Fields.Pretty
46+ Distribution.InstalledPackageInfo Distribution.License
47+ Distribution.Make Distribution.ModuleName Distribution.Package
48+ Distribution.PackageDescription
49+ Distribution.PackageDescription.Check
50+ Distribution.PackageDescription.Configuration
51+ Distribution.PackageDescription.FieldGrammar
52+ Distribution.PackageDescription.Parsec
53+ Distribution.PackageDescription.PrettyPrint
54+ Distribution.PackageDescription.Quirks
55+ Distribution.PackageDescription.Utils Distribution.Parsec
56+ Distribution.Parsec.Error Distribution.Parsec.FieldLineStream
57+ Distribution.Parsec.Newtypes Distribution.Parsec.Position
58+ Distribution.Parsec.Warning Distribution.Pretty Distribution.ReadE
59+ Distribution.SPDX Distribution.SPDX.License
60+ Distribution.SPDX.LicenseExceptionId
61+ Distribution.SPDX.LicenseExpression Distribution.SPDX.LicenseId
62+ Distribution.SPDX.LicenseListVersion
63+ Distribution.SPDX.LicenseReference Distribution.Simple
64+ Distribution.Simple.Bench Distribution.Simple.Build
65+ Distribution.Simple.Build.Macros
66+ Distribution.Simple.Build.PathsModule
67+ Distribution.Simple.BuildPaths Distribution.Simple.BuildTarget
68+ Distribution.Simple.BuildToolDepends Distribution.Simple.CCompiler
69+ Distribution.Simple.Command Distribution.Simple.Compiler
70+ Distribution.Simple.Configure Distribution.Simple.Doctest
71+ Distribution.Simple.Flag Distribution.Simple.GHC
72+ Distribution.Simple.GHCJS Distribution.Simple.Glob
73+ Distribution.Simple.Haddock Distribution.Simple.HaskellSuite
74+ Distribution.Simple.Hpc Distribution.Simple.Install
75+ Distribution.Simple.InstallDirs
76+ Distribution.Simple.InstallDirs.Internal
77+ Distribution.Simple.LocalBuildInfo Distribution.Simple.PackageIndex
78+ Distribution.Simple.PreProcess Distribution.Simple.PreProcess.Unlit
79+ Distribution.Simple.Program Distribution.Simple.Program.Ar
80+ Distribution.Simple.Program.Builtin Distribution.Simple.Program.Db
81+ Distribution.Simple.Program.Find Distribution.Simple.Program.GHC
82+ Distribution.Simple.Program.HcPkg Distribution.Simple.Program.Hpc
83+ Distribution.Simple.Program.Internal Distribution.Simple.Program.Ld
84+ Distribution.Simple.Program.ResponseFile
85+ Distribution.Simple.Program.Run Distribution.Simple.Program.Script
86+ Distribution.Simple.Program.Strip Distribution.Simple.Program.Types
87+ Distribution.Simple.Register Distribution.Simple.Setup
88+ Distribution.Simple.ShowBuildInfo Distribution.Simple.SrcDist
89+ Distribution.Simple.Test Distribution.Simple.Test.ExeV10
90+ Distribution.Simple.Test.LibV09 Distribution.Simple.Test.Log
91+ Distribution.Simple.UHC Distribution.Simple.UserHooks
92+ Distribution.Simple.Utils Distribution.System
93+ Distribution.TestSuite Distribution.Text
94+ Distribution.Types.AbiDependency Distribution.Types.AbiHash
95+ Distribution.Types.AnnotatedId Distribution.Types.Benchmark
96+ Distribution.Types.Benchmark.Lens
97+ Distribution.Types.BenchmarkInterface
98+ Distribution.Types.BenchmarkType Distribution.Types.BuildInfo
99+ Distribution.Types.BuildInfo.Lens Distribution.Types.BuildType
100+ Distribution.Types.Component Distribution.Types.ComponentId
101+ Distribution.Types.ComponentInclude
102+ Distribution.Types.ComponentLocalBuildInfo
103+ Distribution.Types.ComponentName
104+ Distribution.Types.ComponentRequestedSpec
105+ Distribution.Types.CondTree Distribution.Types.Condition
106+ Distribution.Types.ConfVar Distribution.Types.Dependency
107+ Distribution.Types.DependencyMap Distribution.Types.ExeDependency
108+ Distribution.Types.Executable Distribution.Types.Executable.Lens
109+ Distribution.Types.ExecutableScope Distribution.Types.ExposedModule
110+ Distribution.Types.Flag Distribution.Types.ForeignLib
111+ Distribution.Types.ForeignLib.Lens
112+ Distribution.Types.ForeignLibOption
113+ Distribution.Types.ForeignLibType
114+ Distribution.Types.GenericPackageDescription
115+ Distribution.Types.GenericPackageDescription.Lens
116+ Distribution.Types.GivenComponent
117+ Distribution.Types.HookedBuildInfo
118+ Distribution.Types.IncludeRenaming
119+ Distribution.Types.InstalledPackageInfo
120+ Distribution.Types.InstalledPackageInfo.FieldGrammar
121+ Distribution.Types.InstalledPackageInfo.Lens
122+ Distribution.Types.LegacyExeDependency Distribution.Types.Lens
123+ Distribution.Types.Library Distribution.Types.Library.Lens
124+ Distribution.Types.LibraryName Distribution.Types.LibraryVisibility
125+ Distribution.Types.LocalBuildInfo Distribution.Types.Mixin
126+ Distribution.Types.Module Distribution.Types.ModuleReexport
127+ Distribution.Types.ModuleRenaming
128+ Distribution.Types.MungedPackageId
129+ Distribution.Types.MungedPackageName
130+ Distribution.Types.PackageDescription
131+ Distribution.Types.PackageDescription.Lens
132+ Distribution.Types.PackageId Distribution.Types.PackageId.Lens
133+ Distribution.Types.PackageName Distribution.Types.PackageName.Magic
134+ Distribution.Types.PackageVersionConstraint
135+ Distribution.Types.PkgconfigDependency
136+ Distribution.Types.PkgconfigName
137+ Distribution.Types.PkgconfigVersion
138+ Distribution.Types.PkgconfigVersionRange
139+ Distribution.Types.SetupBuildInfo
140+ Distribution.Types.SetupBuildInfo.Lens
141+ Distribution.Types.SourceRepo Distribution.Types.SourceRepo.Lens
142+ Distribution.Types.TargetInfo Distribution.Types.TestSuite
143+ Distribution.Types.TestSuite.Lens
144+ Distribution.Types.TestSuiteInterface Distribution.Types.TestType
145+ Distribution.Types.UnitId Distribution.Types.UnqualComponentName
146+ Distribution.Types.Version Distribution.Types.VersionInterval
147+ Distribution.Types.VersionRange
148+ Distribution.Types.VersionRange.Internal Distribution.Utils.Generic
149+ Distribution.Utils.IOData Distribution.Utils.LogProgress
150+ Distribution.Utils.MD5 Distribution.Utils.MapAccum
151+ Distribution.Utils.NubList Distribution.Utils.Progress
152+ Distribution.Utils.ShortText Distribution.Utils.Structured
153+ Distribution.Verbosity Distribution.Verbosity.Internal
154+ Distribution.Version Language.Haskell.Extension
155+hidden-modules:
156+ Distribution.Backpack.PreExistingComponent
157+ Distribution.Backpack.ReadyComponent Distribution.Backpack.MixLink
158+ Distribution.Backpack.ModuleScope Distribution.Backpack.UnifyM
159+ Distribution.Backpack.Id Distribution.Utils.UnionFind
160+ Distribution.Utils.Base62 Distribution.Compat.Async
161+ Distribution.Compat.CopyFile Distribution.Compat.GetShortPathName
162+ Distribution.Compat.MonadFail Distribution.Compat.Prelude
163+ Distribution.Compat.SnocList Distribution.GetOpt Distribution.Lex
164+ Distribution.Utils.String Distribution.Simple.GHC.EnvironmentParser
165+ Distribution.Simple.GHC.Internal Distribution.Simple.GHC.ImplInfo
166+ Distribution.Simple.Utils.Json Paths_Cabal
167+import-dirs:
168+library-dirs:
169+dynamic-library-dirs:
170+data-dir:
171+hs-libraries: HSCabal-3.2.0.0
172+depends:
173+ array-0.5.4.0 base-4.14.0.0 binary-0.8.8.0 bytestring-0.10.10.0
174+ containers-0.6.2.1 deepseq-1.4.4.0 directory-1.3.6.0
175+ filepath-1.4.2.1 mtl-2.2.2 parsec-3.1.14.0 pretty-1.1.3.6
176+ process-1.6.8.2 text-1.2.3.2 time-1.9.3 transformers-0.5.6.2
177+ unix-2.7.2.2
178+haddock-interfaces:
179+haddock-html:
180+---
181+name: array
182+version: 0.5.4.0
183+visibility: public
184+id: array-0.5.4.0
185+key: array-0.5.4.0
186+license: BSD-3-Clause
187+maintainer: libraries@haskell.org
188+synopsis: Mutable and immutable arrays
189+description:
190+ In addition to providing the "Data.Array" module
191+ <http://www.haskell.org/onlinereport/haskell2010/haskellch14.html as specified in the Haskell 2010 Language Report>,
192+ this package also defines the classes 'IArray' of
193+ immutable arrays and 'MArray' of arrays mutable within appropriate
194+ monads, as well as some instances of these classes.
195+category: Data Structures
196+exposed: True
197+exposed-modules:
198+ Data.Array Data.Array.Base Data.Array.IArray Data.Array.IO
199+ Data.Array.IO.Internals Data.Array.IO.Safe Data.Array.MArray
200+ Data.Array.MArray.Safe Data.Array.ST Data.Array.ST.Safe
201+ Data.Array.Storable Data.Array.Storable.Internals
202+ Data.Array.Storable.Safe Data.Array.Unboxed Data.Array.Unsafe
203+import-dirs:
204+library-dirs:
205+dynamic-library-dirs:
206+data-dir:
207+hs-libraries: HSarray-0.5.4.0
208+depends: base-4.14.0.0
209+haddock-interfaces:
210+haddock-html:
211+---
212+name: base
213+version: 4.14.0.0
214+visibility: public
215+id: base-4.14.0.0
216+key: base-4.14.0.0
217+license: BSD-3-Clause
218+maintainer: libraries@haskell.org
219+synopsis: Basic libraries
220+description:
221+ This package contains the Standard Haskell "Prelude" and its support libraries,
222+ and a large collection of useful libraries ranging from data
223+ structures to parsing combinators and debugging utilities.
224+category: Prelude
225+exposed: True
226+exposed-modules:
227+ Control.Applicative Control.Arrow Control.Category
228+ Control.Concurrent Control.Concurrent.Chan Control.Concurrent.MVar
229+ Control.Concurrent.QSem Control.Concurrent.QSemN Control.Exception
230+ Control.Exception.Base Control.Monad Control.Monad.Fail
231+ Control.Monad.Fix Control.Monad.IO.Class Control.Monad.Instances
232+ Control.Monad.ST Control.Monad.ST.Lazy Control.Monad.ST.Lazy.Safe
233+ Control.Monad.ST.Lazy.Unsafe Control.Monad.ST.Safe
234+ Control.Monad.ST.Strict Control.Monad.ST.Unsafe Control.Monad.Zip
235+ Data.Bifoldable Data.Bifunctor Data.Bitraversable Data.Bits
236+ Data.Bool Data.Char Data.Coerce Data.Complex Data.Data Data.Dynamic
237+ Data.Either Data.Eq Data.Fixed Data.Foldable Data.Function
238+ Data.Functor Data.Functor.Classes Data.Functor.Compose
239+ Data.Functor.Const Data.Functor.Contravariant Data.Functor.Identity
240+ Data.Functor.Product Data.Functor.Sum Data.IORef Data.Int Data.Ix
241+ Data.Kind Data.List Data.List.NonEmpty Data.Maybe Data.Monoid
242+ Data.Ord Data.Proxy Data.Ratio Data.STRef Data.STRef.Lazy
243+ Data.STRef.Strict Data.Semigroup Data.String Data.Traversable
244+ Data.Tuple Data.Type.Bool Data.Type.Coercion Data.Type.Equality
245+ Data.Typeable Data.Unique Data.Version Data.Void Data.Word
246+ Debug.Trace Foreign Foreign.C Foreign.C.Error Foreign.C.String
247+ Foreign.C.Types Foreign.Concurrent Foreign.ForeignPtr
248+ Foreign.ForeignPtr.Safe Foreign.ForeignPtr.Unsafe Foreign.Marshal
249+ Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Error
250+ Foreign.Marshal.Pool Foreign.Marshal.Safe Foreign.Marshal.Unsafe
251+ Foreign.Marshal.Utils Foreign.Ptr Foreign.Safe Foreign.StablePtr
252+ Foreign.Storable GHC.Arr GHC.Base GHC.ByteOrder GHC.Char GHC.Clock
253+ GHC.Conc GHC.Conc.IO GHC.Conc.Signal GHC.Conc.Sync
254+ GHC.ConsoleHandler GHC.Constants GHC.Desugar GHC.Enum
255+ GHC.Environment GHC.Err GHC.Event GHC.Exception GHC.Exception.Type
256+ GHC.ExecutionStack GHC.ExecutionStack.Internal GHC.Exts
257+ GHC.Fingerprint GHC.Fingerprint.Type GHC.Float
258+ GHC.Float.ConversionUtils GHC.Float.RealFracMethods GHC.Foreign
259+ GHC.ForeignPtr GHC.GHCi GHC.GHCi.Helpers GHC.Generics GHC.IO
260+ GHC.IO.Buffer GHC.IO.BufferedIO GHC.IO.Device GHC.IO.Encoding
261+ GHC.IO.Encoding.CodePage GHC.IO.Encoding.Failure
262+ GHC.IO.Encoding.Iconv GHC.IO.Encoding.Latin1 GHC.IO.Encoding.Types
263+ GHC.IO.Encoding.UTF16 GHC.IO.Encoding.UTF32 GHC.IO.Encoding.UTF8
264+ GHC.IO.Exception GHC.IO.FD GHC.IO.Handle GHC.IO.Handle.FD
265+ GHC.IO.Handle.Internals GHC.IO.Handle.Lock GHC.IO.Handle.Text
266+ GHC.IO.Handle.Types GHC.IO.IOMode GHC.IO.Unsafe GHC.IOArray
267+ GHC.IORef GHC.Int GHC.Ix GHC.List GHC.MVar GHC.Maybe GHC.Natural
268+ GHC.Num GHC.OldList GHC.OverloadedLabels GHC.Pack GHC.Profiling
269+ GHC.Ptr GHC.RTS.Flags GHC.Read GHC.Real GHC.Records
270+ GHC.ResponseFile GHC.ST GHC.STRef GHC.Show GHC.Stable
271+ GHC.StableName GHC.Stack GHC.Stack.CCS GHC.Stack.Types
272+ GHC.StaticPtr GHC.Stats GHC.Storable GHC.TopHandler GHC.TypeLits
273+ GHC.TypeNats GHC.Unicode GHC.Weak GHC.Word Numeric Numeric.Natural
274+ Prelude System.CPUTime System.Console.GetOpt System.Environment
275+ System.Environment.Blank System.Exit System.IO System.IO.Error
276+ System.IO.Unsafe System.Info System.Mem System.Mem.StableName
277+ System.Mem.Weak System.Posix.Internals System.Posix.Types
278+ System.Timeout Text.ParserCombinators.ReadP
279+ Text.ParserCombinators.ReadPrec Text.Printf Text.Read Text.Read.Lex
280+ Text.Show Text.Show.Functions Type.Reflection
281+ Type.Reflection.Unsafe Unsafe.Coerce
282+hidden-modules:
283+ Control.Monad.ST.Imp Control.Monad.ST.Lazy.Imp Data.Functor.Utils
284+ Data.OldList Data.Semigroup.Internal Data.Typeable.Internal
285+ Foreign.ForeignPtr.Imp GHC.IO.Handle.Lock.Common
286+ GHC.IO.Handle.Lock.Flock GHC.IO.Handle.Lock.LinuxOFD
287+ GHC.IO.Handle.Lock.NoOp GHC.IO.Handle.Lock.Windows
288+ GHC.StaticPtr.Internal System.Environment.ExecutablePath
289+ System.CPUTime.Utils GHC.Event.Arr GHC.Event.Array
290+ GHC.Event.Control GHC.Event.EPoll GHC.Event.IntTable
291+ GHC.Event.Internal GHC.Event.KQueue GHC.Event.Manager GHC.Event.PSQ
292+ GHC.Event.Poll GHC.Event.Thread GHC.Event.TimerManager
293+ GHC.Event.Unique System.CPUTime.Posix.ClockGetTime
294+ System.CPUTime.Posix.Times System.CPUTime.Posix.RUsage
295+ System.CPUTime.Unsupported
296+import-dirs:
297+library-dirs:
298+dynamic-library-dirs:
299+data-dir:
300+hs-libraries: HSbase-4.14.0.0
301+include-dirs:
302+includes: HsBase.h
303+depends: ghc-prim-0.6.1 integer-gmp-1.0.3.0 rts
304+haddock-interfaces:
305+haddock-html:
306+---
307+name: binary
308+version: 0.8.8.0
309+visibility: public
310+id: binary-0.8.8.0
311+key: binary-0.8.8.0
312+license: BSD-3-Clause
313+maintainer: Lennart Kolmodin, Don Stewart <dons00@gmail.com>
314+author: Lennart Kolmodin <kolmodin@gmail.com>
315+stability: provisional
316+homepage: https://github.com/kolmodin/binary
317+synopsis:
318+ Binary serialisation for Haskell values using lazy ByteStrings
319+description:
320+ Efficient, pure binary serialisation using lazy ByteStrings.
321+ Haskell values may be encoded to and from binary formats,
322+ written to disk as binary, or sent over the network.
323+ The format used can be automatically generated, or
324+ you can choose to implement a custom format if needed.
325+ Serialisation speeds of over 1 G\/sec have been observed,
326+ so this library should be suitable for high performance
327+ scenarios.
328+category: Data, Parsing
329+exposed: True
330+exposed-modules:
331+ Data.Binary Data.Binary.Builder Data.Binary.Get
332+ Data.Binary.Get.Internal Data.Binary.Put
333+hidden-modules:
334+ Data.Binary.Class Data.Binary.Internal Data.Binary.Generic
335+ Data.Binary.FloatCast
336+import-dirs:
337+library-dirs:
338+dynamic-library-dirs:
339+data-dir:
340+hs-libraries: HSbinary-0.8.8.0
341+depends:
342+ array-0.5.4.0 base-4.14.0.0 bytestring-0.10.10.0 containers-0.6.2.1
343+haddock-interfaces:
344+haddock-html:
345+---
346+name: bytestring
347+version: 0.10.10.0
348+visibility: public
349+id: bytestring-0.10.10.0
350+key: bytestring-0.10.10.0
351+license: BSD-3-Clause
352+copyright:
353+ Copyright (c) Don Stewart 2005-2009,
354+ (c) Duncan Coutts 2006-2015,
355+ (c) David Roundy 2003-2005,
356+ (c) Jasper Van der Jeugt 2010,
357+ (c) Simon Meier 2010-2013.
358+maintainer: Duncan Coutts <duncan@community.haskell.org>
359+author:
360+ Don Stewart,
361+ Duncan Coutts
362+homepage: https://github.com/haskell/bytestring
363+synopsis:
364+ Fast, compact, strict and lazy byte strings with a list interface
365+description:
366+ An efficient compact, immutable byte string type (both strict and lazy)
367+ suitable for binary or 8-bit character data.
368+ The 'ByteString' type represents sequences of bytes or 8-bit characters.
369+ It is suitable for high performance use, both in terms of large data
370+ quantities, or high speed requirements. The 'ByteString' functions follow
371+ the same style as Haskell\'s ordinary lists, so it is easy to convert code
372+ from using 'String' to 'ByteString'.
373+ Two 'ByteString' variants are provided:
374+ * Strict 'ByteString's keep the string as a single large array. This
375+ makes them convenient for passing data between C and Haskell.
376+ * Lazy 'ByteString's use a lazy list of strict chunks which makes it
377+ suitable for I\/O streaming tasks.
378+ The @Char8@ modules provide a character-based view of the same
379+ underlying 'ByteString' types. This makes it convenient to handle mixed
380+ binary and 8-bit character content (which is common in many file formats
381+ and network protocols).
382+ The 'Builder' module provides an efficient way to build up 'ByteString's
383+ in an ad-hoc way by repeated concatenation. This is ideal for fast
384+ serialisation or pretty printing.
385+ There is also a 'ShortByteString' type which has a lower memory overhead
386+ and can can be converted to or from a 'ByteString', but supports very few
387+ other operations. It is suitable for keeping many short strings in memory.
388+ 'ByteString's are not designed for Unicode. For Unicode strings you should
389+ use the 'Text' type from the @text@ package.
390+ These modules are intended to be imported qualified, to avoid name clashes
391+ with "Prelude" functions, e.g.
392+ > import qualified Data.ByteString as BS
393+category: Data
394+exposed: True
395+exposed-modules:
396+ Data.ByteString Data.ByteString.Builder
397+ Data.ByteString.Builder.Extra Data.ByteString.Builder.Internal
398+ Data.ByteString.Builder.Prim Data.ByteString.Builder.Prim.Internal
399+ Data.ByteString.Char8 Data.ByteString.Internal Data.ByteString.Lazy
400+ Data.ByteString.Lazy.Builder Data.ByteString.Lazy.Builder.ASCII
401+ Data.ByteString.Lazy.Builder.Extras Data.ByteString.Lazy.Char8
402+ Data.ByteString.Lazy.Internal Data.ByteString.Short
403+ Data.ByteString.Short.Internal Data.ByteString.Unsafe
404+hidden-modules:
405+ Data.ByteString.Builder.ASCII Data.ByteString.Builder.Prim.Binary
406+ Data.ByteString.Builder.Prim.ASCII
407+ Data.ByteString.Builder.Prim.Internal.Floating
408+ Data.ByteString.Builder.Prim.Internal.UncheckedShifts
409+ Data.ByteString.Builder.Prim.Internal.Base16
410+import-dirs:
411+library-dirs:
412+dynamic-library-dirs:
413+data-dir:
414+hs-libraries: HSbytestring-0.10.10.0
415+include-dirs:
416+includes: fpstring.h
417+depends:
418+ base-4.14.0.0 deepseq-1.4.4.0 ghc-prim-0.6.1 integer-gmp-1.0.3.0
419+haddock-interfaces:
420+haddock-html:
421+---
422+name: containers
423+version: 0.6.2.1
424+visibility: public
425+id: containers-0.6.2.1
426+key: containers-0.6.2.1
427+license: BSD-3-Clause
428+maintainer: libraries@haskell.org
429+synopsis: Assorted concrete container types
430+description:
431+ This package contains efficient general-purpose implementations
432+ of various immutable container types including sets, maps, sequences,
433+ trees, and graphs.
434+ For a walkthrough of what this package provides with examples of common
435+ operations see the [containers
436+ introduction](https://haskell-containers.readthedocs.io).
437+ The declared cost of each operation is either worst-case or amortized, but
438+ remains valid even if structures are shared.
439+category: Data Structures
440+exposed: True
441+exposed-modules:
442+ Data.Containers.ListUtils Data.Graph Data.IntMap
443+ Data.IntMap.Internal Data.IntMap.Internal.Debug Data.IntMap.Lazy
444+ Data.IntMap.Merge.Lazy Data.IntMap.Merge.Strict Data.IntMap.Strict
445+ Data.IntMap.Strict.Internal Data.IntSet Data.IntSet.Internal
446+ Data.Map Data.Map.Internal Data.Map.Internal.Debug Data.Map.Lazy
447+ Data.Map.Merge.Lazy Data.Map.Merge.Strict Data.Map.Strict
448+ Data.Map.Strict.Internal Data.Sequence Data.Sequence.Internal
449+ Data.Sequence.Internal.Sorting Data.Set Data.Set.Internal Data.Tree
450+ Utils.Containers.Internal.BitQueue
451+ Utils.Containers.Internal.BitUtil
452+ Utils.Containers.Internal.StrictPair
453+hidden-modules:
454+ Utils.Containers.Internal.State
455+ Utils.Containers.Internal.StrictMaybe
456+ Utils.Containers.Internal.PtrEquality
457+ Utils.Containers.Internal.Coercions
458+ Utils.Containers.Internal.TypeError
459+ Data.Map.Internal.DeprecatedShowTree
460+ Data.IntMap.Internal.DeprecatedDebug
461+import-dirs:
462+library-dirs:
463+dynamic-library-dirs:
464+data-dir:
465+hs-libraries: HScontainers-0.6.2.1
466+depends: array-0.5.4.0 base-4.14.0.0 deepseq-1.4.4.0
467+haddock-interfaces:
468+haddock-html:
469+---
470+name: deepseq
471+version: 1.4.4.0
472+visibility: public
473+id: deepseq-1.4.4.0
474+key: deepseq-1.4.4.0
475+license: BSD-3-Clause
476+maintainer: libraries@haskell.org
477+synopsis: Deep evaluation of data structures
478+description:
479+ This package provides methods for fully evaluating data structures
480+ (\"deep evaluation\"). Deep evaluation is often used for adding
481+ strictness to a program, e.g. in order to force pending exceptions,
482+ remove space leaks, or force lazy I/O to happen. It is also useful
483+ in parallel programs, to ensure pending work does not migrate to the
484+ wrong thread.
485+ The primary use of this package is via the 'deepseq' function, a
486+ \"deep\" version of 'seq'. It is implemented on top of an 'NFData'
487+ typeclass (\"Normal Form Data\", data structures with no unevaluated
488+ components) which defines strategies for fully evaluating different
489+ data types. See module documentation in "Control.DeepSeq" for more
490+ details.
491+category: Control
492+exposed: True
493+exposed-modules: Control.DeepSeq
494+hidden-modules: Control.DeepSeq.BackDoor
495+import-dirs:
496+library-dirs:
497+dynamic-library-dirs:
498+data-dir:
499+hs-libraries: HSdeepseq-1.4.4.0
500+depends: array-0.5.4.0 base-4.14.0.0
501+haddock-interfaces:
502+haddock-html:
503+---
504+name: directory
505+version: 1.3.6.0
506+visibility: public
507+id: directory-1.3.6.0
508+key: directory-1.3.6.0
509+license: BSD-3-Clause
510+maintainer: libraries@haskell.org
511+synopsis: Platform-agnostic library for filesystem operations
512+description:
513+ This library provides a basic set of operations for manipulating files and
514+ directories in a portable way.
515+category: System
516+exposed: True
517+exposed-modules:
518+ System.Directory System.Directory.Internal
519+ System.Directory.Internal.Prelude
520+hidden-modules:
521+ System.Directory.Internal.C_utimensat
522+ System.Directory.Internal.Common System.Directory.Internal.Config
523+ System.Directory.Internal.Posix System.Directory.Internal.Windows
524+import-dirs:
525+library-dirs:
526+dynamic-library-dirs:
527+data-dir:
528+hs-libraries: HSdirectory-1.3.6.0
529+depends:
530+ base-4.14.0.0 filepath-1.4.2.1 time-1.9.3 unix-2.7.2.2
531+haddock-interfaces:
532+haddock-html:
533+---
534+name: exceptions
535+version: 0.10.4
536+visibility: public
537+id: exceptions-0.10.4
538+key: exceptions-0.10.4
539+license: BSD-3-Clause
540+copyright:
541+ Copyright (C) 2013-2015 Edward A. Kmett
542+ Copyright (C) 2012 Google Inc.
543+maintainer: Edward A. Kmett <ekmett@gmail.com>
544+author: Edward A. Kmett
545+stability: provisional
546+homepage: http://github.com/ekmett/exceptions/
547+synopsis: Extensible optionally-pure exceptions
548+description: Extensible optionally-pure exceptions.
549+category: Control, Exceptions, Monad
550+exposed: True
551+exposed-modules: Control.Monad.Catch Control.Monad.Catch.Pure
552+import-dirs:
553+library-dirs:
554+dynamic-library-dirs:
555+data-dir:
556+hs-libraries: HSexceptions-0.10.4
557+depends:
558+ base-4.14.0.0 mtl-2.2.2 stm-2.5.0.0 template-haskell-2.16.0.0
559+ transformers-0.5.6.2
560+haddock-interfaces:
561+haddock-html:
562+---
563+name: filepath
564+version: 1.4.2.1
565+visibility: public
566+id: filepath-1.4.2.1
567+key: filepath-1.4.2.1
568+license: BSD-3-Clause
569+copyright: Neil Mitchell 2005-2018
570+maintainer: Neil Mitchell <ndmitchell@gmail.com>
571+author: Neil Mitchell <ndmitchell@gmail.com>
572+homepage: https://github.com/haskell/filepath#readme
573+synopsis: Library for manipulating FilePaths in a cross platform way.
574+description:
575+ This package provides functionality for manipulating @FilePath@ values, and is shipped with both <https://www.haskell.org/ghc/ GHC> and the <https://www.haskell.org/platform/ Haskell Platform>. It provides three modules:
576+ * "System.FilePath.Posix" manipulates POSIX\/Linux style @FilePath@ values (with @\/@ as the path separator).
577+ * "System.FilePath.Windows" manipulates Windows style @FilePath@ values (with either @\\@ or @\/@ as the path separator, and deals with drives).
578+ * "System.FilePath" is an alias for the module appropriate to your platform.
579+ All three modules provide the same API, and the same documentation (calling out differences in the different variants).
580+category: System
581+exposed: True
582+exposed-modules:
583+ System.FilePath System.FilePath.Posix System.FilePath.Windows
584+import-dirs:
585+library-dirs:
586+dynamic-library-dirs:
587+data-dir:
588+hs-libraries: HSfilepath-1.4.2.1
589+depends: base-4.14.0.0
590+haddock-interfaces:
591+haddock-html:
592+---
593+name: ghc-boot
594+version: 8.10.1
595+visibility: public
596+id: ghc-boot-8.10.1
597+key: ghc-boot-8.10.1
598+license: BSD-3-Clause
599+maintainer: ghc-devs@haskell.org
600+synopsis: Shared functionality between GHC and its boot libraries
601+description:
602+ This library is shared between GHC, ghc-pkg, and other boot
603+ libraries.
604+ A note about "GHC.PackageDb": it only deals with the subset of
605+ the package database that the compiler cares about: modules
606+ paths etc and not package metadata like description, authors
607+ etc. It is thus not a library interface to ghc-pkg and is *not*
608+ suitable for modifying GHC package databases.
609+ The package database format and this library are constructed in
610+ such a way that while ghc-pkg depends on Cabal, the GHC library
611+ and program do not have to depend on Cabal.
612+category: GHC
613+exposed: True
614+exposed-modules:
615+ GHC.BaseDir GHC.ForeignSrcLang GHC.HandleEncoding
616+ GHC.LanguageExtensions GHC.PackageDb GHC.Platform GHC.Platform.Host
617+ GHC.Serialized GHC.Settings GHC.UniqueSubdir GHC.Version
618+import-dirs:
619+library-dirs:
620+dynamic-library-dirs:
621+data-dir:
622+hs-libraries: HSghc-boot-8.10.1
623+depends:
624+ base-4.14.0.0 binary-0.8.8.0 bytestring-0.10.10.0
625+ containers-0.6.2.1 directory-1.3.6.0 filepath-1.4.2.1
626+ ghc-boot-th-8.10.1
627+haddock-interfaces:
628+haddock-html:
629+---
630+name: ghc-boot-th
631+version: 8.10.1
632+visibility: public
633+id: ghc-boot-th-8.10.1
634+key: ghc-boot-th-8.10.1
635+license: BSD-3-Clause
636+maintainer: ghc-devs@haskell.org
637+synopsis:
638+ Shared functionality between GHC and the @template-haskell@
639+ library
640+description:
641+ This library contains various bits shared between the @ghc@ and
642+ @template-haskell@ libraries.
643+ This package exists to ensure that @template-haskell@ has a
644+ minimal set of transitive dependencies, since it is intended to
645+ be depended upon by user code.
646+category: GHC
647+exposed: True
648+exposed-modules:
649+ GHC.ForeignSrcLang.Type GHC.LanguageExtensions.Type GHC.Lexeme
650+import-dirs:
651+library-dirs:
652+dynamic-library-dirs:
653+data-dir:
654+hs-libraries: HSghc-boot-th-8.10.1
655+depends: base-4.14.0.0
656+haddock-interfaces:
657+haddock-html:
658+---
659+name: ghc-compact
660+version: 0.1.0.0
661+visibility: public
662+id: ghc-compact-0.1.0.0
663+key: ghc-compact-0.1.0.0
664+license: BSD-3-Clause
665+maintainer: libraries@haskell.org
666+synopsis: In memory storage of deeply evaluated data structure
667+description:
668+ This package provides minimal functionality for working with
669+ "compact regions", which hold a fully evaluated Haskell object graph.
670+ These regions maintain the invariant that no pointers live inside the struct
671+ that point outside it, which ensures efficient garbage collection without
672+ ever reading the structure contents (effectively, it works as a manually
673+ managed "oldest generation" which is never freed until the whole is
674+ released).
675+ Internally, the struct is stored a single contiguous block of memory,
676+ which allows efficient serialization and deserialization of structs
677+ for distributed computing.
678+category: Data
679+exposed: True
680+exposed-modules: GHC.Compact GHC.Compact.Serialized
681+import-dirs:
682+library-dirs:
683+dynamic-library-dirs:
684+data-dir:
685+hs-libraries: HSghc-compact-0.1.0.0
686+depends: base-4.14.0.0 bytestring-0.10.10.0 ghc-prim-0.6.1
687+haddock-interfaces:
688+haddock-html:
689+---
690+name: ghc-heap
691+version: 8.10.1
692+visibility: public
693+id: ghc-heap-8.10.1
694+key: ghc-heap-8.10.1
695+license: BSD-3-Clause
696+maintainer: libraries@haskell.org
697+synopsis: Functions for walking GHC's heap
698+description:
699+ This package provides functions for walking the GHC heap data structures
700+ and retrieving information about those data structures.
701+category: GHC
702+exposed: True
703+exposed-modules:
704+ GHC.Exts.Heap GHC.Exts.Heap.ClosureTypes GHC.Exts.Heap.Closures
705+ GHC.Exts.Heap.Constants GHC.Exts.Heap.InfoTable
706+ GHC.Exts.Heap.InfoTable.Types GHC.Exts.Heap.InfoTableProf
707+ GHC.Exts.Heap.Utils
708+import-dirs:
709+library-dirs:
710+dynamic-library-dirs:
711+data-dir:
712+hs-libraries: HSghc-heap-8.10.1
713+depends: base-4.14.0.0 ghc-prim-0.6.1 rts
714+haddock-interfaces:
715+haddock-html:
716+---
717+name: ghc-prim
718+version: 0.6.1
719+visibility: public
720+id: ghc-prim-0.6.1
721+key: ghc-prim-0.6.1
722+license: BSD-3-Clause
723+maintainer: libraries@haskell.org
724+synopsis: GHC primitives
725+description:
726+ This package contains the primitive types and operations supplied by GHC.
727+category: GHC
728+exposed: True
729+exposed-modules:
730+ GHC.CString GHC.Classes GHC.Debug GHC.IntWord64 GHC.Magic
731+ GHC.Prim.Ext GHC.PrimopWrappers GHC.Tuple GHC.Types GHC.Prim
732+import-dirs:
733+library-dirs:
734+dynamic-library-dirs:
735+data-dir:
736+hs-libraries: HSghc-prim-0.6.1
737+depends: rts
738+haddock-interfaces:
739+haddock-html:
740+---
741+name: ghci
742+version: 8.10.1
743+visibility: public
744+id: ghci-8.10.1
745+key: ghci-8.10.1
746+license: BSD-3-Clause
747+maintainer: ghc-devs@haskell.org
748+synopsis: The library supporting GHC's interactive interpreter
749+description:
750+ This library offers interfaces which mediate interactions between the
751+ @ghci@ interactive shell and @iserv@, GHC's out-of-process interpreter
752+ backend.
753+category: GHC
754+exposed: True
755+exposed-modules:
756+ GHCi.BinaryArray GHCi.BreakArray GHCi.CreateBCO GHCi.FFI
757+ GHCi.InfoTable GHCi.Message GHCi.ObjLink GHCi.RemoteTypes
758+ GHCi.ResolvedBCO GHCi.Run GHCi.Signals GHCi.StaticPtrTable GHCi.TH
759+ GHCi.TH.Binary SizedSeq
760+import-dirs:
761+library-dirs:
762+dynamic-library-dirs:
763+data-dir:
764+hs-libraries: HSghci-8.10.1
765+include-dirs:
766+depends:
767+ array-0.5.4.0 base-4.14.0.0 binary-0.8.8.0 bytestring-0.10.10.0
768+ containers-0.6.2.1 deepseq-1.4.4.0 filepath-1.4.2.1 ghc-boot-8.10.1
769+ ghc-boot-th-8.10.1 ghc-heap-8.10.1 template-haskell-2.16.0.0
770+ transformers-0.5.6.2 unix-2.7.2.2
771+haddock-interfaces:
772+haddock-html:
773+---
774+name: haskeline
775+version: 0.8.0.0
776+visibility: public
777+id: haskeline-0.8.0.0
778+key: haskeline-0.8.0.0
779+license: BSD-3-Clause
780+copyright: (c) Judah Jacobson
781+maintainer: Judah Jacobson <judah.jacobson@gmail.com>
782+author: Judah Jacobson
783+stability: Stable
784+homepage: https://github.com/judah/haskeline
785+synopsis:
786+ A command-line interface for user input, written in Haskell.
787+description:
788+ Haskeline provides a user interface for line input in command-line
789+ programs. This library is similar in purpose to readline, but since
790+ it is written in Haskell it is (hopefully) more easily used in other
791+ Haskell programs.
792+ Haskeline runs both on POSIX-compatible systems and on Windows.
793+category: User Interfaces
794+exposed: True
795+exposed-modules:
796+ System.Console.Haskeline System.Console.Haskeline.Completion
797+ System.Console.Haskeline.History System.Console.Haskeline.IO
798+hidden-modules:
799+ System.Console.Haskeline.Backend
800+ System.Console.Haskeline.Backend.WCWidth
801+ System.Console.Haskeline.Command
802+ System.Console.Haskeline.Command.Completion
803+ System.Console.Haskeline.Command.History
804+ System.Console.Haskeline.Command.KillRing
805+ System.Console.Haskeline.Directory System.Console.Haskeline.Emacs
806+ System.Console.Haskeline.InputT System.Console.Haskeline.Key
807+ System.Console.Haskeline.LineState System.Console.Haskeline.Monads
808+ System.Console.Haskeline.Prefs System.Console.Haskeline.Recover
809+ System.Console.Haskeline.RunCommand System.Console.Haskeline.Term
810+ System.Console.Haskeline.Command.Undo System.Console.Haskeline.Vi
811+ System.Console.Haskeline.Backend.Posix
812+ System.Console.Haskeline.Backend.Posix.Encoder
813+ System.Console.Haskeline.Backend.DumbTerm
814+import-dirs:
815+library-dirs:
816+dynamic-library-dirs:
817+data-dir:
818+hs-libraries: HShaskeline-0.8.0.0
819+depends:
820+ base-4.14.0.0 bytestring-0.10.10.0 containers-0.6.2.1
821+ directory-1.3.6.0 exceptions-0.10.4 filepath-1.4.2.1
822+ process-1.6.8.2 stm-2.5.0.0 transformers-0.5.6.2 unix-2.7.2.2
823+haddock-interfaces:
824+haddock-html:
825+---
826+name: hpc
827+version: 0.6.1.0
828+visibility: public
829+id: hpc-0.6.1.0
830+key: hpc-0.6.1.0
831+license: BSD-3-Clause
832+maintainer: ghc-devs@haskell.org
833+author: Andy Gill
834+synopsis: Code Coverage Library for Haskell
835+description:
836+ This package provides the code coverage library for Haskell.
837+ See <http://www.haskell.org/haskellwiki/Haskell_program_coverage> for more
838+ information.
839+category: Control
840+exposed: True
841+exposed-modules:
842+ Trace.Hpc.Mix Trace.Hpc.Reflect Trace.Hpc.Tix Trace.Hpc.Util
843+import-dirs:
844+library-dirs:
845+dynamic-library-dirs:
846+data-dir:
847+hs-libraries: HShpc-0.6.1.0
848+depends:
849+ base-4.14.0.0 containers-0.6.2.1 deepseq-1.4.4.0 directory-1.3.6.0
850+ filepath-1.4.2.1 time-1.9.3
851+haddock-interfaces:
852+haddock-html:
853+---
854+name: integer-gmp
855+version: 1.0.3.0
856+visibility: public
857+id: integer-gmp-1.0.3.0
858+key: integer-gmp-1.0.3.0
859+license: BSD-3-Clause
860+maintainer: hvr@gnu.org
861+author: Herbert Valerio Riedel
862+synopsis: Integer library based on GMP
863+description:
864+ This package provides the low-level implementation of the standard
865+ 'Integer' type based on the
866+ <http://gmplib.org/ GNU Multiple Precision Arithmetic Library (GMP)>.
867+ This package provides access to the internal representation of
868+ 'Integer' as well as primitive operations with no proper error
869+ handling, and should only be used directly with the utmost care.
870+category: Numeric, Algebra
871+exposed: True
872+exposed-modules:
873+ GHC.Integer GHC.Integer.GMP.Internals GHC.Integer.Logarithms
874+ GHC.Integer.Logarithms.Internals
875+hidden-modules: GHC.Integer.Type
876+import-dirs:
877+library-dirs:
878+dynamic-library-dirs:
879+data-dir:
880+hs-libraries: HSinteger-gmp-1.0.3.0
881+extra-libraries: gmp
882+include-dirs:
883+depends: ghc-prim-0.6.1
884+haddock-interfaces:
885+haddock-html:
886+---
887+name: libiserv
888+version: 8.10.1
889+visibility: public
890+id: libiserv-8.10.1
891+key: libiserv-8.10.1
892+license: BSD-3-Clause
893+copyright: XXX
894+maintainer: XXX
895+author: XXX
896+synopsis: Provides shared functionality between iserv and iserv-proxy
897+category: Development
898+exposed: True
899+exposed-modules: GHCi.Utils Lib
900+import-dirs:
901+library-dirs:
902+dynamic-library-dirs:
903+data-dir:
904+hs-libraries: HSlibiserv-8.10.1
905+depends:
906+ base-4.14.0.0 binary-0.8.8.0 bytestring-0.10.10.0
907+ containers-0.6.2.1 deepseq-1.4.4.0 ghci-8.10.1 unix-2.7.2.2
908+haddock-interfaces:
909+haddock-html:
910+---
911+name: mtl
912+version: 2.2.2
913+visibility: public
914+id: mtl-2.2.2
915+key: mtl-2.2.2
916+license: BSD-3-Clause
917+maintainer: Edward Kmett <ekmett@gmail.com>
918+author: Andy Gill
919+homepage: http://github.com/haskell/mtl
920+synopsis: Monad classes, using functional dependencies
921+description:
922+ Monad classes using functional dependencies, with instances
923+ for various monad transformers, inspired by the paper
924+ /Functional Programming with Overloading and Higher-Order Polymorphism/,
925+ by Mark P Jones, in /Advanced School of Functional Programming/, 1995
926+ (<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).
927+category: Control
928+exposed: True
929+exposed-modules:
930+ Control.Monad.Cont Control.Monad.Cont.Class Control.Monad.Error
931+ Control.Monad.Error.Class Control.Monad.Except
932+ Control.Monad.Identity Control.Monad.List Control.Monad.RWS
933+ Control.Monad.RWS.Class Control.Monad.RWS.Lazy
934+ Control.Monad.RWS.Strict Control.Monad.Reader
935+ Control.Monad.Reader.Class Control.Monad.State
936+ Control.Monad.State.Class Control.Monad.State.Lazy
937+ Control.Monad.State.Strict Control.Monad.Trans Control.Monad.Writer
938+ Control.Monad.Writer.Class Control.Monad.Writer.Lazy
939+ Control.Monad.Writer.Strict
940+import-dirs:
941+library-dirs:
942+dynamic-library-dirs:
943+data-dir:
944+hs-libraries: HSmtl-2.2.2
945+depends: base-4.14.0.0 transformers-0.5.6.2
946+haddock-interfaces:
947+haddock-html:
948+---
949+name: parsec
950+version: 3.1.14.0
951+visibility: public
952+id: parsec-3.1.14.0
953+key: parsec-3.1.14.0
954+license: BSD-3-Clause
955+maintainer: Herbert Valerio Riedel <hvr@gnu.org>
956+author:
957+ Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>, Antoine Latter <aslatter@gmail.com>
958+homepage: https://github.com/haskell/parsec
959+synopsis: Monadic parser combinators
960+description:
961+ Parsec is designed from scratch as an industrial-strength parser
962+ library. It is simple, safe, well documented (on the package
963+ homepage), has extensive libraries, good error messages,
964+ and is fast. It is defined as a monad transformer that can be
965+ stacked on arbitrary monads, and it is also parametric in the
966+ input stream type.
967+ The main entry point is the "Text.Parsec" module which provides
968+ defaults for parsing 'Char'acter data.
969+ The "Text.ParserCombinators.Parsec" module hierarchy contains
970+ the legacy @parsec-2@ API and may be removed at some point in
971+ the future.
972+category: Parsing
973+exposed: True
974+exposed-modules:
975+ Text.Parsec Text.Parsec.ByteString Text.Parsec.ByteString.Lazy
976+ Text.Parsec.Char Text.Parsec.Combinator Text.Parsec.Error
977+ Text.Parsec.Expr Text.Parsec.Language Text.Parsec.Perm
978+ Text.Parsec.Pos Text.Parsec.Prim Text.Parsec.String
979+ Text.Parsec.Text Text.Parsec.Text.Lazy Text.Parsec.Token
980+ Text.ParserCombinators.Parsec Text.ParserCombinators.Parsec.Char
981+ Text.ParserCombinators.Parsec.Combinator
982+ Text.ParserCombinators.Parsec.Error
983+ Text.ParserCombinators.Parsec.Expr
984+ Text.ParserCombinators.Parsec.Language
985+ Text.ParserCombinators.Parsec.Perm
986+ Text.ParserCombinators.Parsec.Pos
987+ Text.ParserCombinators.Parsec.Prim
988+ Text.ParserCombinators.Parsec.Token
989+import-dirs:
990+library-dirs:
991+dynamic-library-dirs:
992+data-dir:
993+hs-libraries: HSparsec-3.1.14.0
994+depends:
995+ base-4.14.0.0 bytestring-0.10.10.0 mtl-2.2.2 text-1.2.3.2
996+haddock-interfaces:
997+haddock-html:
998+---
999+name: pretty
1000+version: 1.1.3.6
1001+visibility: public
1002+id: pretty-1.1.3.6
1003+key: pretty-1.1.3.6
1004+license: BSD-3-Clause
1005+maintainer: David Terei <code@davidterei.com>
1006+stability: Stable
1007+homepage: http://github.com/haskell/pretty
1008+synopsis: Pretty-printing library
1009+description:
1010+ This package contains a pretty-printing library, a set of API's
1011+ that provides a way to easily print out text in a consistent
1012+ format of your choosing. This is useful for compilers and related
1013+ tools.
1014+ This library was originally designed by John Hughes's and has since
1015+ been heavily modified by Simon Peyton Jones.
1016+category: Text
1017+exposed: True
1018+exposed-modules:
1019+ Text.PrettyPrint Text.PrettyPrint.Annotated
1020+ Text.PrettyPrint.Annotated.HughesPJ
1021+ Text.PrettyPrint.Annotated.HughesPJClass Text.PrettyPrint.HughesPJ
1022+ Text.PrettyPrint.HughesPJClass
1023+import-dirs:
1024+library-dirs:
1025+dynamic-library-dirs:
1026+data-dir:
1027+hs-libraries: HSpretty-1.1.3.6
1028+depends: base-4.14.0.0 deepseq-1.4.4.0 ghc-prim-0.6.1
1029+haddock-interfaces:
1030+haddock-html:
1031+---
1032+name: process
1033+version: 1.6.8.2
1034+visibility: public
1035+id: process-1.6.8.2
1036+key: process-1.6.8.2
1037+license: BSD-3-Clause
1038+maintainer: libraries@haskell.org
1039+synopsis: Process libraries
1040+description:
1041+ This package contains libraries for dealing with system processes.
1042+ The typed-process package is a more recent take on a process API,
1043+ which uses this package internally. It features better binary
1044+ support, easier concurrency, and a more composable API. You can
1045+ read more about it at
1046+ <https://github.com/fpco/typed-process/#readme>.
1047+category: System
1048+exposed: True
1049+exposed-modules: System.Cmd System.Process System.Process.Internals
1050+hidden-modules: System.Process.Common System.Process.Posix
1051+import-dirs:
1052+library-dirs:
1053+dynamic-library-dirs:
1054+data-dir:
1055+hs-libraries: HSprocess-1.6.8.2
1056+include-dirs:
1057+includes: runProcess.h
1058+depends:
1059+ base-4.14.0.0 deepseq-1.4.4.0 directory-1.3.6.0 filepath-1.4.2.1
1060+ unix-2.7.2.2
1061+haddock-interfaces:
1062+haddock-html:
1063+---
1064+name: stm
1065+version: 2.5.0.0
1066+visibility: public
1067+id: stm-2.5.0.0
1068+key: stm-2.5.0.0
1069+license: BSD-3-Clause
1070+maintainer: libraries@haskell.org
1071+homepage: https://wiki.haskell.org/Software_transactional_memory
1072+synopsis: Software Transactional Memory
1073+description:
1074+ Software Transactional Memory, or STM, is an abstraction for
1075+ concurrent communication. The main benefits of STM are
1076+ /composability/ and /modularity/. That is, using STM you can write
1077+ concurrent abstractions that can be easily composed with any other
1078+ abstraction built using STM, without exposing the details of how
1079+ your abstraction ensures safety. This is typically not the case
1080+ with other forms of concurrent communication, such as locks or
1081+ 'MVar's.
1082+category: Concurrency
1083+exposed: True
1084+exposed-modules:
1085+ Control.Concurrent.STM Control.Concurrent.STM.TArray
1086+ Control.Concurrent.STM.TBQueue Control.Concurrent.STM.TChan
1087+ Control.Concurrent.STM.TMVar Control.Concurrent.STM.TQueue
1088+ Control.Concurrent.STM.TSem Control.Concurrent.STM.TVar
1089+ Control.Monad.STM
1090+hidden-modules: Control.Sequential.STM
1091+import-dirs:
1092+library-dirs:
1093+dynamic-library-dirs:
1094+data-dir:
1095+hs-libraries: HSstm-2.5.0.0
1096+depends: array-0.5.4.0 base-4.14.0.0
1097+haddock-interfaces:
1098+haddock-html:
1099+---
1100+name: template-haskell
1101+version: 2.16.0.0
1102+visibility: public
1103+id: template-haskell-2.16.0.0
1104+key: template-haskell-2.16.0.0
1105+license: BSD-3-Clause
1106+maintainer: libraries@haskell.org
1107+synopsis: Support library for Template Haskell
1108+description:
1109+ This package provides modules containing facilities for manipulating
1110+ Haskell source code using Template Haskell.
1111+ See <http://www.haskell.org/haskellwiki/Template_Haskell> for more
1112+ information.
1113+category: Template Haskell
1114+exposed: True
1115+exposed-modules:
1116+ Language.Haskell.TH Language.Haskell.TH.LanguageExtensions
1117+ Language.Haskell.TH.Lib Language.Haskell.TH.Lib.Internal
1118+ Language.Haskell.TH.Ppr Language.Haskell.TH.PprLib
1119+ Language.Haskell.TH.Quote Language.Haskell.TH.Syntax
1120+hidden-modules: Language.Haskell.TH.Lib.Map
1121+import-dirs:
1122+library-dirs:
1123+dynamic-library-dirs:
1124+data-dir:
1125+hs-libraries: HStemplate-haskell-2.16.0.0
1126+depends:
1127+ base-4.14.0.0 ghc-boot-th-8.10.1 ghc-prim-0.6.1 pretty-1.1.3.6
1128+haddock-interfaces:
1129+haddock-html:
1130+---
1131+name: text
1132+version: 1.2.3.2
1133+visibility: public
1134+id: text-1.2.3.2
1135+key: text-1.2.3.2
1136+license: BSD-2-Clause
1137+copyright: 2009-2011 Bryan O'Sullivan, 2008-2009 Tom Harper
1138+maintainer:
1139+ Bryan O'Sullivan <bos@serpentine.com>, Herbert Valerio Riedel <hvr@gnu.org>
1140+author: Bryan O'Sullivan <bos@serpentine.com>
1141+homepage: https://github.com/haskell/text
1142+synopsis: An efficient packed Unicode text type.
1143+description:
1144+ An efficient packed, immutable Unicode text type (both strict and
1145+ lazy), with a powerful loop fusion optimization framework.
1146+ The 'Text' type represents Unicode character strings, in a time and
1147+ space-efficient manner. This package provides text processing
1148+ capabilities that are optimized for performance critical use, both
1149+ in terms of large data quantities and high speed.
1150+ The 'Text' type provides character-encoding, type-safe case
1151+ conversion via whole-string case conversion functions (see "Data.Text").
1152+ It also provides a range of functions for converting 'Text' values to
1153+ and from 'ByteStrings', using several standard encodings
1154+ (see "Data.Text.Encoding").
1155+ Efficient locale-sensitive support for text IO is also supported
1156+ (see "Data.Text.IO").
1157+ These modules are intended to be imported qualified, to avoid name
1158+ clashes with Prelude functions, e.g.
1159+ > import qualified Data.Text as T
1160+ To use an extended and very rich family of functions for working
1161+ with Unicode text (including normalization, regular expressions,
1162+ non-standard encodings, text breaking, and locales), see
1163+ the [text-icu package](https://hackage.haskell.org/package/text-icu)
1164+ based on the well-respected and liberally
1165+ licensed [ICU library](http://site.icu-project.org/).
1166+category: Data, Text
1167+exposed: True
1168+exposed-modules:
1169+ Data.Text Data.Text.Array Data.Text.Encoding
1170+ Data.Text.Encoding.Error Data.Text.Foreign Data.Text.IO
1171+ Data.Text.Internal Data.Text.Internal.Builder
1172+ Data.Text.Internal.Builder.Functions
1173+ Data.Text.Internal.Builder.Int.Digits
1174+ Data.Text.Internal.Builder.RealFloat.Functions
1175+ Data.Text.Internal.Encoding.Fusion
1176+ Data.Text.Internal.Encoding.Fusion.Common
1177+ Data.Text.Internal.Encoding.Utf16 Data.Text.Internal.Encoding.Utf32
1178+ Data.Text.Internal.Encoding.Utf8 Data.Text.Internal.Functions
1179+ Data.Text.Internal.Fusion Data.Text.Internal.Fusion.CaseMapping
1180+ Data.Text.Internal.Fusion.Common Data.Text.Internal.Fusion.Size
1181+ Data.Text.Internal.Fusion.Types Data.Text.Internal.IO
1182+ Data.Text.Internal.Lazy Data.Text.Internal.Lazy.Encoding.Fusion
1183+ Data.Text.Internal.Lazy.Fusion Data.Text.Internal.Lazy.Search
1184+ Data.Text.Internal.Private Data.Text.Internal.Read
1185+ Data.Text.Internal.Search Data.Text.Internal.Unsafe
1186+ Data.Text.Internal.Unsafe.Char Data.Text.Internal.Unsafe.Shift
1187+ Data.Text.Lazy Data.Text.Lazy.Builder Data.Text.Lazy.Builder.Int
1188+ Data.Text.Lazy.Builder.RealFloat Data.Text.Lazy.Encoding
1189+ Data.Text.Lazy.IO Data.Text.Lazy.Internal Data.Text.Lazy.Read
1190+ Data.Text.Read Data.Text.Unsafe
1191+hidden-modules: Data.Text.Show
1192+import-dirs:
1193+library-dirs:
1194+dynamic-library-dirs:
1195+data-dir:
1196+hs-libraries: HStext-1.2.3.2
1197+depends:
1198+ array-0.5.4.0 base-4.14.0.0 binary-0.8.8.0 bytestring-0.10.10.0
1199+ deepseq-1.4.4.0 ghc-prim-0.6.1 integer-gmp-1.0.3.0
1200+haddock-interfaces:
1201+haddock-html:
1202+---
1203+name: time
1204+version: 1.9.3
1205+visibility: public
1206+id: time-1.9.3
1207+key: time-1.9.3
1208+license: BSD-3-Clause
1209+maintainer: <ashley@semantic.org>
1210+author: Ashley Yakeley
1211+stability: stable
1212+homepage: https://github.com/haskell/time
1213+synopsis: A time library
1214+description: Time, clocks and calendars
1215+category: Time
1216+exposed: True
1217+exposed-modules:
1218+ Data.Time Data.Time.Calendar Data.Time.Calendar.Easter
1219+ Data.Time.Calendar.Julian Data.Time.Calendar.MonthDay
1220+ Data.Time.Calendar.OrdinalDate Data.Time.Calendar.WeekDate
1221+ Data.Time.Clock Data.Time.Clock.POSIX Data.Time.Clock.System
1222+ Data.Time.Clock.TAI Data.Time.Format Data.Time.Format.ISO8601
1223+ Data.Time.Format.Internal Data.Time.LocalTime
1224+hidden-modules:
1225+ Data.Format Data.Time.Calendar.Private Data.Time.Calendar.Days
1226+ Data.Time.Calendar.Gregorian Data.Time.Calendar.CalendarDiffDays
1227+ Data.Time.Calendar.Week Data.Time.Calendar.JulianYearDay
1228+ Data.Time.Clock.Internal.DiffTime
1229+ Data.Time.Clock.Internal.AbsoluteTime
1230+ Data.Time.Clock.Internal.NominalDiffTime
1231+ Data.Time.Clock.Internal.POSIXTime
1232+ Data.Time.Clock.Internal.UniversalTime
1233+ Data.Time.Clock.Internal.SystemTime
1234+ Data.Time.Clock.Internal.UTCTime Data.Time.Clock.Internal.CTimeval
1235+ Data.Time.Clock.Internal.CTimespec Data.Time.Clock.Internal.UTCDiff
1236+ Data.Time.LocalTime.Internal.TimeZone
1237+ Data.Time.LocalTime.Internal.TimeOfDay
1238+ Data.Time.LocalTime.Internal.CalendarDiffTime
1239+ Data.Time.LocalTime.Internal.LocalTime
1240+ Data.Time.LocalTime.Internal.ZonedTime Data.Time.Format.Parse
1241+ Data.Time.Format.Locale Data.Time.Format.Format.Class
1242+ Data.Time.Format.Format.Instances Data.Time.Format.Parse.Class
1243+ Data.Time.Format.Parse.Instances
1244+import-dirs:
1245+library-dirs:
1246+dynamic-library-dirs:
1247+data-dir:
1248+hs-libraries: HStime-1.9.3
1249+include-dirs:
1250+depends: base-4.14.0.0 deepseq-1.4.4.0
1251+haddock-interfaces:
1252+haddock-html:
1253+---
1254+name: transformers
1255+version: 0.5.6.2
1256+visibility: public
1257+id: transformers-0.5.6.2
1258+key: transformers-0.5.6.2
1259+license: BSD-3-Clause
1260+maintainer: Ross Paterson <R.Paterson@city.ac.uk>
1261+author: Andy Gill, Ross Paterson
1262+synopsis: Concrete functor and monad transformers
1263+description:
1264+ A portable library of functor and monad transformers, inspired by
1265+ the paper
1266+ * \"Functional Programming with Overloading and Higher-Order
1267+ Polymorphism\", by Mark P Jones,
1268+ in /Advanced School of Functional Programming/, 1995
1269+ (<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).
1270+ This package contains:
1271+ * the monad transformer class (in "Control.Monad.Trans.Class")
1272+ * concrete functor and monad transformers, each with associated
1273+ operations and functions to lift operations associated with other
1274+ transformers.
1275+ The package can be used on its own in portable Haskell code, in
1276+ which case operations need to be manually lifted through transformer
1277+ stacks (see "Control.Monad.Trans.Class" for some examples).
1278+ Alternatively, it can be used with the non-portable monad classes in
1279+ the @mtl@ or @monads-tf@ packages, which automatically lift operations
1280+ introduced by monad transformers through other transformers.
1281+category: Control
1282+exposed: True
1283+exposed-modules:
1284+ Control.Applicative.Backwards Control.Applicative.Lift
1285+ Control.Monad.Signatures Control.Monad.Trans.Accum
1286+ Control.Monad.Trans.Class Control.Monad.Trans.Cont
1287+ Control.Monad.Trans.Error Control.Monad.Trans.Except
1288+ Control.Monad.Trans.Identity Control.Monad.Trans.List
1289+ Control.Monad.Trans.Maybe Control.Monad.Trans.RWS
1290+ Control.Monad.Trans.RWS.CPS Control.Monad.Trans.RWS.Lazy
1291+ Control.Monad.Trans.RWS.Strict Control.Monad.Trans.Reader
1292+ Control.Monad.Trans.Select Control.Monad.Trans.State
1293+ Control.Monad.Trans.State.Lazy Control.Monad.Trans.State.Strict
1294+ Control.Monad.Trans.Writer Control.Monad.Trans.Writer.CPS
1295+ Control.Monad.Trans.Writer.Lazy Control.Monad.Trans.Writer.Strict
1296+ Data.Functor.Constant Data.Functor.Reverse
1297+import-dirs:
1298+library-dirs:
1299+dynamic-library-dirs:
1300+data-dir:
1301+hs-libraries: HStransformers-0.5.6.2
1302+depends: base-4.14.0.0
1303+haddock-interfaces:
1304+haddock-html:
1305+---
1306+name: unix
1307+version: 2.7.2.2
1308+visibility: public
1309+id: unix-2.7.2.2
1310+key: unix-2.7.2.2
1311+license: BSD-3-Clause
1312+maintainer: libraries@haskell.org
1313+homepage: https://github.com/haskell/unix
1314+synopsis: POSIX functionality
1315+description:
1316+ This package gives you access to the set of operating system
1317+ services standardised by
1318+ <http://pubs.opengroup.org/onlinepubs/9699919799/ POSIX.1-2008>
1319+ (or the IEEE Portable Operating System Interface for Computing
1320+ Environments - IEEE Std. 1003.1).
1321+ The package is not supported under Windows.
1322+category: System
1323+exposed: True
1324+exposed-modules:
1325+ System.Posix System.Posix.ByteString
1326+ System.Posix.ByteString.FilePath System.Posix.Directory
1327+ System.Posix.Directory.ByteString System.Posix.DynamicLinker
1328+ System.Posix.DynamicLinker.ByteString
1329+ System.Posix.DynamicLinker.Module
1330+ System.Posix.DynamicLinker.Module.ByteString
1331+ System.Posix.DynamicLinker.Prim System.Posix.Env
1332+ System.Posix.Env.ByteString System.Posix.Error System.Posix.Fcntl
1333+ System.Posix.Files System.Posix.Files.ByteString System.Posix.IO
1334+ System.Posix.IO.ByteString System.Posix.Process
1335+ System.Posix.Process.ByteString System.Posix.Process.Internals
1336+ System.Posix.Resource System.Posix.Semaphore System.Posix.SharedMem
1337+ System.Posix.Signals System.Posix.Signals.Exts System.Posix.Temp
1338+ System.Posix.Temp.ByteString System.Posix.Terminal
1339+ System.Posix.Terminal.ByteString System.Posix.Time
1340+ System.Posix.Unistd System.Posix.User
1341+hidden-modules:
1342+ System.Posix.Directory.Common System.Posix.DynamicLinker.Common
1343+ System.Posix.Files.Common System.Posix.IO.Common
1344+ System.Posix.Process.Common System.Posix.Terminal.Common
1345+import-dirs:
1346+library-dirs:
1347+dynamic-library-dirs:
1348+data-dir:
1349+hs-libraries: HSunix-2.7.2.2
1350+extra-libraries: rt util dl pthread
1351+include-dirs:
1352+includes: HsUnix.h execvpe.h
1353+depends: base-4.14.0.0 bytestring-0.10.10.0 time-1.9.3
1354+haddock-interfaces:
1355+haddock-html:
1356+---
1357+name: rts
1358+version: 1.0
1359+visibility: public
1360+id: rts
1361+key: rts
1362+license: BSD-3-Clause
1363+maintainer: glasgow-haskell-users@haskell.org
1364+exposed: True
1365+library-dirs:
1366+hs-libraries: HSrts
1367+extra-libraries: m rt dl ffi numa pthread
1368+include-dirs:
1369+includes: Stg.h
1370+ld-options:
1371+ "-Wl,-u,base_GHCziTopHandler_runIO_closure"
1372+ "-Wl,-u,base_GHCziTopHandler_runNonIO_closure"
1373+ "-Wl,-u,ghczmprim_GHCziTuple_Z0T_closure"
1374+ "-Wl,-u,ghczmprim_GHCziTypes_True_closure"
1375+ "-Wl,-u,ghczmprim_GHCziTypes_False_closure"
1376+ "-Wl,-u,base_GHCziPack_unpackCString_closure"
1377+ "-Wl,-u,base_GHCziWeak_runFinalizzerBatch_closure"
1378+ "-Wl,-u,base_GHCziIOziException_stackOverflow_closure"
1379+ "-Wl,-u,base_GHCziIOziException_heapOverflow_closure"
1380+ "-Wl,-u,base_GHCziIOziException_allocationLimitExceeded_closure"
1381+ "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnMVar_closure"
1382+ "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnSTM_closure"
1383+ "-Wl,-u,base_GHCziIOziException_cannotCompactFunction_closure"
1384+ "-Wl,-u,base_GHCziIOziException_cannotCompactPinned_closure"
1385+ "-Wl,-u,base_GHCziIOziException_cannotCompactMutable_closure"
1386+ "-Wl,-u,base_ControlziExceptionziBase_absentSumFieldError_closure"
1387+ "-Wl,-u,base_ControlziExceptionziBase_nonTermination_closure"
1388+ "-Wl,-u,base_ControlziExceptionziBase_nestedAtomically_closure"
1389+ "-Wl,-u,base_GHCziEventziThread_blockedOnBadFD_closure"
1390+ "-Wl,-u,base_GHCziConcziSync_runSparks_closure"
1391+ "-Wl,-u,base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
1392+ "-Wl,-u,base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
1393+ "-Wl,-u,base_GHCziConcziSignal_runHandlersPtr_closure"
1394+ "-Wl,-u,base_GHCziTopHandler_flushStdHandles_closure"
1395+ "-Wl,-u,base_GHCziTopHandler_runMainIO_closure"
1396+ "-Wl,-u,ghczmprim_GHCziTypes_Czh_con_info"
1397+ "-Wl,-u,ghczmprim_GHCziTypes_Izh_con_info"
1398+ "-Wl,-u,ghczmprim_GHCziTypes_Fzh_con_info"
1399+ "-Wl,-u,ghczmprim_GHCziTypes_Dzh_con_info"
1400+ "-Wl,-u,ghczmprim_GHCziTypes_Wzh_con_info"
1401+ "-Wl,-u,base_GHCziPtr_Ptr_con_info"
1402+ "-Wl,-u,base_GHCziPtr_FunPtr_con_info"
1403+ "-Wl,-u,base_GHCziInt_I8zh_con_info"
1404+ "-Wl,-u,base_GHCziInt_I16zh_con_info"
1405+ "-Wl,-u,base_GHCziInt_I32zh_con_info"
1406+ "-Wl,-u,base_GHCziInt_I64zh_con_info"
1407+ "-Wl,-u,base_GHCziWord_W8zh_con_info"
1408+ "-Wl,-u,base_GHCziWord_W16zh_con_info"
1409+ "-Wl,-u,base_GHCziWord_W32zh_con_info"
1410+ "-Wl,-u,base_GHCziWord_W64zh_con_info"
1411+ "-Wl,-u,base_GHCziStable_StablePtr_con_info"
1412+ "-Wl,-u,hs_atomic_add8" "-Wl,-u,hs_atomic_add16"
1413+ "-Wl,-u,hs_atomic_add32" "-Wl,-u,hs_atomic_add64"
1414+ "-Wl,-u,hs_atomic_sub8" "-Wl,-u,hs_atomic_sub16"
1415+ "-Wl,-u,hs_atomic_sub32" "-Wl,-u,hs_atomic_sub64"
1416+ "-Wl,-u,hs_atomic_and8" "-Wl,-u,hs_atomic_and16"
1417+ "-Wl,-u,hs_atomic_and32" "-Wl,-u,hs_atomic_and64"
1418+ "-Wl,-u,hs_atomic_nand8" "-Wl,-u,hs_atomic_nand16"
1419+ "-Wl,-u,hs_atomic_nand32" "-Wl,-u,hs_atomic_nand64"
1420+ "-Wl,-u,hs_atomic_or8" "-Wl,-u,hs_atomic_or16"
1421+ "-Wl,-u,hs_atomic_or32" "-Wl,-u,hs_atomic_or64"
1422+ "-Wl,-u,hs_atomic_xor8" "-Wl,-u,hs_atomic_xor16"
1423+ "-Wl,-u,hs_atomic_xor32" "-Wl,-u,hs_atomic_xor64"
1424+ "-Wl,-u,hs_cmpxchg8" "-Wl,-u,hs_cmpxchg16" "-Wl,-u,hs_cmpxchg32"
1425+ "-Wl,-u,hs_cmpxchg64" "-Wl,-u,hs_atomicread8"
1426+ "-Wl,-u,hs_atomicread16" "-Wl,-u,hs_atomicread32"
1427+ "-Wl,-u,hs_atomicread64" "-Wl,-u,hs_atomicwrite8"
1428+ "-Wl,-u,hs_atomicwrite16" "-Wl,-u,hs_atomicwrite32"
1429+ "-Wl,-u,hs_atomicwrite64"
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc-pkg/versionnew file+1
@@ -0,0 +1 @@
1+GHC package manager version 8.10.1
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc/infonew file+66
@@ -0,0 +1,66 @@
1+ [("Project name","The Glorious Glasgow Haskell Compilation System")
2+ ,("GCC extra via C opts","")
3+ ,("C compiler flags","")
4+ ,("C++ compiler flags","")
5+ ,("C compiler link flags","-Wl,-z,noexecstack")
6+ ,("C compiler supports -no-pie","YES")
7+ ,("Haskell CPP flags","-E -undef -traditional")
8+ ,("ld flags","-z noexecstack")
9+ ,("ld supports compact unwind","YES")
10+ ,("ld supports build-id","YES")
11+ ,("ld supports filelist","NO")
12+ ,("ld is GNU ld","YES")
13+ ,("ar flags","q")
14+ ,("ar supports at file","YES")
15+ ,("touch command","touch")
16+ ,("dllwrap command","/bin/false")
17+ ,("windres command","/bin/false")
18+ ,("libtool command","libtool")
19+ ,("cross compiling","YES")
20+ ,("target platform string","aarch64-unknown-linux")
21+ ,("target os","OSLinux")
22+ ,("target arch","ArchARM64")
23+ ,("target word size","8")
24+ ,("target has GNU nonexec stack","YES")
25+ ,("target has .ident directive","YES")
26+ ,("target has subsections via symbols","NO")
27+ ,("target has RTS linker","YES")
28+ ,("Unregisterised","NO")
29+ ,("LLVM target","aarch64-unknown-linux")
30+ ,("LLVM llc command","llc")
31+ ,("LLVM opt command","opt")
32+ ,("LLVM clang command","clang")
33+ ,("integer library","integer-gmp")
34+ ,("Use interpreter","YES")
35+ ,("Use native code generator","NO")
36+ ,("Support SMP","YES")
37+ ,("RTS ways","l debug thr thr_debug thr_l thr_p thr_debug_p debug_p")
38+ ,("Tables next to code","YES")
39+ ,("Leading underscore","NO")
40+ ,("Use LibFFI","YES")
41+ ,("Use Threads","YES")
42+ ,("Use Debugging","NO")
43+ ,("RTS expects libdw","NO")
44+ ,("Project version","8.10.1")
45+ ,("Project Git commit id","5c3cadf5db0d7eb859ff2c278ab07585c7df17b5")
46+ ,("Booter version","8.6.5")
47+ ,("Stage","1")
48+ ,("Build platform","x86_64-unknown-linux")
49+ ,("Host platform","x86_64-unknown-linux")
50+ ,("Target platform","aarch64-unknown-linux")
51+ ,("Have interpreter","YES")
52+ ,("Object splitting supported","NO")
53+ ,("Have native code generator","NO")
54+ ,("Support dynamic-too","YES")
55+ ,("Support parallel --make","YES")
56+ ,("Support reexported-modules","YES")
57+ ,("Support thinning and renaming package flags","YES")
58+ ,("Support Backpack","YES")
59+ ,("Requires unified installed package IDs","YES")
60+ ,("Uses package keys","YES")
61+ ,("Uses unit IDs","YES")
62+ ,("Dynamic by default","NO")
63+ ,("GHC Dynamic","NO")
64+ ,("GHC Profiled","NO")
65+ ,("Debug on","NO")
66+ ]
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc/numeric-versionnew file+1
@@ -0,0 +1 @@
1+8.10.1
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc/supported-languagesnew file+255
@@ -0,0 +1,255 @@
1+Haskell98
2+Haskell2010
3+Unsafe
4+Trustworthy
5+Safe
6+AllowAmbiguousTypes
7+NoAllowAmbiguousTypes
8+AlternativeLayoutRule
9+NoAlternativeLayoutRule
10+AlternativeLayoutRuleTransitional
11+NoAlternativeLayoutRuleTransitional
12+Arrows
13+NoArrows
14+AutoDeriveTypeable
15+NoAutoDeriveTypeable
16+BangPatterns
17+NoBangPatterns
18+BinaryLiterals
19+NoBinaryLiterals
20+CApiFFI
21+NoCApiFFI
22+CPP
23+NoCPP
24+CUSKs
25+NoCUSKs
26+ConstrainedClassMethods
27+NoConstrainedClassMethods
28+ConstraintKinds
29+NoConstraintKinds
30+DataKinds
31+NoDataKinds
32+DatatypeContexts
33+NoDatatypeContexts
34+DefaultSignatures
35+NoDefaultSignatures
36+DeriveAnyClass
37+NoDeriveAnyClass
38+DeriveDataTypeable
39+NoDeriveDataTypeable
40+DeriveFoldable
41+NoDeriveFoldable
42+DeriveFunctor
43+NoDeriveFunctor
44+DeriveGeneric
45+NoDeriveGeneric
46+DeriveLift
47+NoDeriveLift
48+DeriveTraversable
49+NoDeriveTraversable
50+DerivingStrategies
51+NoDerivingStrategies
52+DerivingVia
53+NoDerivingVia
54+DisambiguateRecordFields
55+NoDisambiguateRecordFields
56+DoAndIfThenElse
57+NoDoAndIfThenElse
58+BlockArguments
59+NoBlockArguments
60+DoRec
61+NoDoRec
62+DuplicateRecordFields
63+NoDuplicateRecordFields
64+EmptyCase
65+NoEmptyCase
66+EmptyDataDecls
67+NoEmptyDataDecls
68+EmptyDataDeriving
69+NoEmptyDataDeriving
70+ExistentialQuantification
71+NoExistentialQuantification
72+ExplicitForAll
73+NoExplicitForAll
74+ExplicitNamespaces
75+NoExplicitNamespaces
76+ExtendedDefaultRules
77+NoExtendedDefaultRules
78+FlexibleContexts
79+NoFlexibleContexts
80+FlexibleInstances
81+NoFlexibleInstances
82+ForeignFunctionInterface
83+NoForeignFunctionInterface
84+FunctionalDependencies
85+NoFunctionalDependencies
86+GADTSyntax
87+NoGADTSyntax
88+GADTs
89+NoGADTs
90+GHCForeignImportPrim
91+NoGHCForeignImportPrim
92+GeneralizedNewtypeDeriving
93+NoGeneralizedNewtypeDeriving
94+GeneralisedNewtypeDeriving
95+NoGeneralisedNewtypeDeriving
96+ImplicitParams
97+NoImplicitParams
98+ImplicitPrelude
99+NoImplicitPrelude
100+ImportQualifiedPost
101+NoImportQualifiedPost
102+ImpredicativeTypes
103+NoImpredicativeTypes
104+IncoherentInstances
105+NoIncoherentInstances
106+TypeFamilyDependencies
107+NoTypeFamilyDependencies
108+InstanceSigs
109+NoInstanceSigs
110+ApplicativeDo
111+NoApplicativeDo
112+InterruptibleFFI
113+NoInterruptibleFFI
114+JavaScriptFFI
115+NoJavaScriptFFI
116+KindSignatures
117+NoKindSignatures
118+LambdaCase
119+NoLambdaCase
120+LiberalTypeSynonyms
121+NoLiberalTypeSynonyms
122+MagicHash
123+NoMagicHash
124+MonadComprehensions
125+NoMonadComprehensions
126+MonadFailDesugaring
127+NoMonadFailDesugaring
128+MonoLocalBinds
129+NoMonoLocalBinds
130+MonoPatBinds
131+NoMonoPatBinds
132+MonomorphismRestriction
133+NoMonomorphismRestriction
134+MultiParamTypeClasses
135+NoMultiParamTypeClasses
136+MultiWayIf
137+NoMultiWayIf
138+NumericUnderscores
139+NoNumericUnderscores
140+NPlusKPatterns
141+NoNPlusKPatterns
142+NamedFieldPuns
143+NoNamedFieldPuns
144+NamedWildCards
145+NoNamedWildCards
146+NegativeLiterals
147+NoNegativeLiterals
148+HexFloatLiterals
149+NoHexFloatLiterals
150+NondecreasingIndentation
151+NoNondecreasingIndentation
152+NullaryTypeClasses
153+NoNullaryTypeClasses
154+NumDecimals
155+NoNumDecimals
156+OverlappingInstances
157+NoOverlappingInstances
158+OverloadedLabels
159+NoOverloadedLabels
160+OverloadedLists
161+NoOverloadedLists
162+OverloadedStrings
163+NoOverloadedStrings
164+PackageImports
165+NoPackageImports
166+ParallelArrays
167+NoParallelArrays
168+ParallelListComp
169+NoParallelListComp
170+PartialTypeSignatures
171+NoPartialTypeSignatures
172+PatternGuards
173+NoPatternGuards
174+PatternSignatures
175+NoPatternSignatures
176+PatternSynonyms
177+NoPatternSynonyms
178+PolyKinds
179+NoPolyKinds
180+PolymorphicComponents
181+NoPolymorphicComponents
182+QuantifiedConstraints
183+NoQuantifiedConstraints
184+PostfixOperators
185+NoPostfixOperators
186+QuasiQuotes
187+NoQuasiQuotes
188+Rank2Types
189+NoRank2Types
190+RankNTypes
191+NoRankNTypes
192+RebindableSyntax
193+NoRebindableSyntax
194+RecordPuns
195+NoRecordPuns
196+RecordWildCards
197+NoRecordWildCards
198+RecursiveDo
199+NoRecursiveDo
200+RelaxedLayout
201+NoRelaxedLayout
202+RelaxedPolyRec
203+NoRelaxedPolyRec
204+RoleAnnotations
205+NoRoleAnnotations
206+ScopedTypeVariables
207+NoScopedTypeVariables
208+StandaloneDeriving
209+NoStandaloneDeriving
210+StarIsType
211+NoStarIsType
212+StaticPointers
213+NoStaticPointers
214+Strict
215+NoStrict
216+StrictData
217+NoStrictData
218+TemplateHaskell
219+NoTemplateHaskell
220+TemplateHaskellQuotes
221+NoTemplateHaskellQuotes
222+StandaloneKindSignatures
223+NoStandaloneKindSignatures
224+TraditionalRecordSyntax
225+NoTraditionalRecordSyntax
226+TransformListComp
227+NoTransformListComp
228+TupleSections
229+NoTupleSections
230+TypeApplications
231+NoTypeApplications
232+TypeInType
233+NoTypeInType
234+TypeFamilies
235+NoTypeFamilies
236+TypeOperators
237+NoTypeOperators
238+TypeSynonymInstances
239+NoTypeSynonymInstances
240+UnboxedTuples
241+NoUnboxedTuples
242+UnboxedSums
243+NoUnboxedSums
244+UndecidableInstances
245+NoUndecidableInstances
246+UndecidableSuperClasses
247+NoUndecidableSuperClasses
248+UnicodeSyntax
249+NoUnicodeSyntax
250+UnliftedFFITypes
251+NoUnliftedFFITypes
252+UnliftedNewtypes
253+NoUnliftedNewtypes
254+ViewPatterns
255+NoViewPatterns
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.1-x86_64-linux/ghc/versionnew file+1
@@ -0,0 +1 @@
1+The Glorious Glasgow Haskell Compilation System, version 8.10.1
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc-pkg/dump-globalnew file+1431
@@ -0,0 +1,1431 @@
1+name: Cabal
2+version: 3.2.0.0
3+visibility: public
4+id: Cabal-3.2.0.0
5+key: Cabal-3.2.0.0
6+license: BSD-3-Clause
7+copyright: 2003-2020, Cabal Development Team (see AUTHORS file)
8+maintainer: cabal-devel@haskell.org
9+author: Cabal Development Team <cabal-devel@haskell.org>
10+homepage: http://www.haskell.org/cabal/
11+synopsis: A framework for packaging Haskell software
12+description:
13+ The Haskell Common Architecture for Building Applications and
14+ Libraries: a framework defining a common interface for authors to more
15+ easily build their Haskell applications in a portable way.
16+ The Haskell Cabal is part of a larger infrastructure for distributing,
17+ organizing, and cataloging Haskell libraries and tools.
18+category: Distribution
19+exposed: True
20+exposed-modules:
21+ Distribution.Backpack Distribution.Backpack.ComponentsGraph
22+ Distribution.Backpack.Configure
23+ Distribution.Backpack.ConfiguredComponent
24+ Distribution.Backpack.DescribeUnitId
25+ Distribution.Backpack.FullUnitId
26+ Distribution.Backpack.LinkedComponent
27+ Distribution.Backpack.ModSubst Distribution.Backpack.ModuleShape
28+ Distribution.Backpack.PreModuleShape Distribution.CabalSpecVersion
29+ Distribution.Compat.Binary Distribution.Compat.CharParsing
30+ Distribution.Compat.CreatePipe Distribution.Compat.DList
31+ Distribution.Compat.Directory Distribution.Compat.Environment
32+ Distribution.Compat.Exception Distribution.Compat.FilePath
33+ Distribution.Compat.Graph Distribution.Compat.Internal.TempFile
34+ Distribution.Compat.Lens Distribution.Compat.Newtype
35+ Distribution.Compat.Parsing Distribution.Compat.Prelude.Internal
36+ Distribution.Compat.ResponseFile Distribution.Compat.Semigroup
37+ Distribution.Compat.Stack Distribution.Compat.Time
38+ Distribution.Compat.Typeable Distribution.Compiler
39+ Distribution.FieldGrammar Distribution.FieldGrammar.Class
40+ Distribution.FieldGrammar.FieldDescrs
41+ Distribution.FieldGrammar.Parsec Distribution.FieldGrammar.Pretty
42+ Distribution.Fields Distribution.Fields.ConfVar
43+ Distribution.Fields.Field Distribution.Fields.Lexer
44+ Distribution.Fields.LexerMonad Distribution.Fields.ParseResult
45+ Distribution.Fields.Parser Distribution.Fields.Pretty
46+ Distribution.InstalledPackageInfo Distribution.License
47+ Distribution.Make Distribution.ModuleName Distribution.Package
48+ Distribution.PackageDescription
49+ Distribution.PackageDescription.Check
50+ Distribution.PackageDescription.Configuration
51+ Distribution.PackageDescription.FieldGrammar
52+ Distribution.PackageDescription.Parsec
53+ Distribution.PackageDescription.PrettyPrint
54+ Distribution.PackageDescription.Quirks
55+ Distribution.PackageDescription.Utils Distribution.Parsec
56+ Distribution.Parsec.Error Distribution.Parsec.FieldLineStream
57+ Distribution.Parsec.Newtypes Distribution.Parsec.Position
58+ Distribution.Parsec.Warning Distribution.Pretty Distribution.ReadE
59+ Distribution.SPDX Distribution.SPDX.License
60+ Distribution.SPDX.LicenseExceptionId
61+ Distribution.SPDX.LicenseExpression Distribution.SPDX.LicenseId
62+ Distribution.SPDX.LicenseListVersion
63+ Distribution.SPDX.LicenseReference Distribution.Simple
64+ Distribution.Simple.Bench Distribution.Simple.Build
65+ Distribution.Simple.Build.Macros
66+ Distribution.Simple.Build.PathsModule
67+ Distribution.Simple.BuildPaths Distribution.Simple.BuildTarget
68+ Distribution.Simple.BuildToolDepends Distribution.Simple.CCompiler
69+ Distribution.Simple.Command Distribution.Simple.Compiler
70+ Distribution.Simple.Configure Distribution.Simple.Doctest
71+ Distribution.Simple.Flag Distribution.Simple.GHC
72+ Distribution.Simple.GHCJS Distribution.Simple.Glob
73+ Distribution.Simple.Haddock Distribution.Simple.HaskellSuite
74+ Distribution.Simple.Hpc Distribution.Simple.Install
75+ Distribution.Simple.InstallDirs
76+ Distribution.Simple.InstallDirs.Internal
77+ Distribution.Simple.LocalBuildInfo Distribution.Simple.PackageIndex
78+ Distribution.Simple.PreProcess Distribution.Simple.PreProcess.Unlit
79+ Distribution.Simple.Program Distribution.Simple.Program.Ar
80+ Distribution.Simple.Program.Builtin Distribution.Simple.Program.Db
81+ Distribution.Simple.Program.Find Distribution.Simple.Program.GHC
82+ Distribution.Simple.Program.HcPkg Distribution.Simple.Program.Hpc
83+ Distribution.Simple.Program.Internal Distribution.Simple.Program.Ld
84+ Distribution.Simple.Program.ResponseFile
85+ Distribution.Simple.Program.Run Distribution.Simple.Program.Script
86+ Distribution.Simple.Program.Strip Distribution.Simple.Program.Types
87+ Distribution.Simple.Register Distribution.Simple.Setup
88+ Distribution.Simple.ShowBuildInfo Distribution.Simple.SrcDist
89+ Distribution.Simple.Test Distribution.Simple.Test.ExeV10
90+ Distribution.Simple.Test.LibV09 Distribution.Simple.Test.Log
91+ Distribution.Simple.UHC Distribution.Simple.UserHooks
92+ Distribution.Simple.Utils Distribution.System
93+ Distribution.TestSuite Distribution.Text
94+ Distribution.Types.AbiDependency Distribution.Types.AbiHash
95+ Distribution.Types.AnnotatedId Distribution.Types.Benchmark
96+ Distribution.Types.Benchmark.Lens
97+ Distribution.Types.BenchmarkInterface
98+ Distribution.Types.BenchmarkType Distribution.Types.BuildInfo
99+ Distribution.Types.BuildInfo.Lens Distribution.Types.BuildType
100+ Distribution.Types.Component Distribution.Types.ComponentId
101+ Distribution.Types.ComponentInclude
102+ Distribution.Types.ComponentLocalBuildInfo
103+ Distribution.Types.ComponentName
104+ Distribution.Types.ComponentRequestedSpec
105+ Distribution.Types.CondTree Distribution.Types.Condition
106+ Distribution.Types.ConfVar Distribution.Types.Dependency
107+ Distribution.Types.DependencyMap Distribution.Types.ExeDependency
108+ Distribution.Types.Executable Distribution.Types.Executable.Lens
109+ Distribution.Types.ExecutableScope Distribution.Types.ExposedModule
110+ Distribution.Types.Flag Distribution.Types.ForeignLib
111+ Distribution.Types.ForeignLib.Lens
112+ Distribution.Types.ForeignLibOption
113+ Distribution.Types.ForeignLibType
114+ Distribution.Types.GenericPackageDescription
115+ Distribution.Types.GenericPackageDescription.Lens
116+ Distribution.Types.GivenComponent
117+ Distribution.Types.HookedBuildInfo
118+ Distribution.Types.IncludeRenaming
119+ Distribution.Types.InstalledPackageInfo
120+ Distribution.Types.InstalledPackageInfo.FieldGrammar
121+ Distribution.Types.InstalledPackageInfo.Lens
122+ Distribution.Types.LegacyExeDependency Distribution.Types.Lens
123+ Distribution.Types.Library Distribution.Types.Library.Lens
124+ Distribution.Types.LibraryName Distribution.Types.LibraryVisibility
125+ Distribution.Types.LocalBuildInfo Distribution.Types.Mixin
126+ Distribution.Types.Module Distribution.Types.ModuleReexport
127+ Distribution.Types.ModuleRenaming
128+ Distribution.Types.MungedPackageId
129+ Distribution.Types.MungedPackageName
130+ Distribution.Types.PackageDescription
131+ Distribution.Types.PackageDescription.Lens
132+ Distribution.Types.PackageId Distribution.Types.PackageId.Lens
133+ Distribution.Types.PackageName Distribution.Types.PackageName.Magic
134+ Distribution.Types.PackageVersionConstraint
135+ Distribution.Types.PkgconfigDependency
136+ Distribution.Types.PkgconfigName
137+ Distribution.Types.PkgconfigVersion
138+ Distribution.Types.PkgconfigVersionRange
139+ Distribution.Types.SetupBuildInfo
140+ Distribution.Types.SetupBuildInfo.Lens
141+ Distribution.Types.SourceRepo Distribution.Types.SourceRepo.Lens
142+ Distribution.Types.TargetInfo Distribution.Types.TestSuite
143+ Distribution.Types.TestSuite.Lens
144+ Distribution.Types.TestSuiteInterface Distribution.Types.TestType
145+ Distribution.Types.UnitId Distribution.Types.UnqualComponentName
146+ Distribution.Types.Version Distribution.Types.VersionInterval
147+ Distribution.Types.VersionRange
148+ Distribution.Types.VersionRange.Internal Distribution.Utils.Generic
149+ Distribution.Utils.IOData Distribution.Utils.LogProgress
150+ Distribution.Utils.MD5 Distribution.Utils.MapAccum
151+ Distribution.Utils.NubList Distribution.Utils.Progress
152+ Distribution.Utils.ShortText Distribution.Utils.Structured
153+ Distribution.Verbosity Distribution.Verbosity.Internal
154+ Distribution.Version Language.Haskell.Extension
155+hidden-modules:
156+ Distribution.Backpack.PreExistingComponent
157+ Distribution.Backpack.ReadyComponent Distribution.Backpack.MixLink
158+ Distribution.Backpack.ModuleScope Distribution.Backpack.UnifyM
159+ Distribution.Backpack.Id Distribution.Utils.UnionFind
160+ Distribution.Utils.Base62 Distribution.Compat.Async
161+ Distribution.Compat.CopyFile Distribution.Compat.GetShortPathName
162+ Distribution.Compat.MonadFail Distribution.Compat.Prelude
163+ Distribution.Compat.SnocList Distribution.GetOpt Distribution.Lex
164+ Distribution.Utils.String Distribution.Simple.GHC.EnvironmentParser
165+ Distribution.Simple.GHC.Internal Distribution.Simple.GHC.ImplInfo
166+ Distribution.Simple.Utils.Json Paths_Cabal
167+import-dirs:
168+library-dirs:
169+dynamic-library-dirs:
170+data-dir:
171+hs-libraries: HSCabal-3.2.0.0
172+depends:
173+ array-0.5.4.0 base-4.14.1.0 binary-0.8.8.0 bytestring-0.10.10.0
174+ containers-0.6.2.1 deepseq-1.4.4.0 directory-1.3.6.0
175+ filepath-1.4.2.1 mtl-2.2.2 parsec-3.1.14.0 pretty-1.1.3.6
176+ process-1.6.9.0 text-1.2.3.2 time-1.9.3 transformers-0.5.6.2
177+ unix-2.7.2.2
178+haddock-interfaces:
179+haddock-html:
180+---
181+name: array
182+version: 0.5.4.0
183+visibility: public
184+id: array-0.5.4.0
185+key: array-0.5.4.0
186+license: BSD-3-Clause
187+maintainer: libraries@haskell.org
188+synopsis: Mutable and immutable arrays
189+description:
190+ In addition to providing the "Data.Array" module
191+ <http://www.haskell.org/onlinereport/haskell2010/haskellch14.html as specified in the Haskell 2010 Language Report>,
192+ this package also defines the classes 'IArray' of
193+ immutable arrays and 'MArray' of arrays mutable within appropriate
194+ monads, as well as some instances of these classes.
195+category: Data Structures
196+exposed: True
197+exposed-modules:
198+ Data.Array Data.Array.Base Data.Array.IArray Data.Array.IO
199+ Data.Array.IO.Internals Data.Array.IO.Safe Data.Array.MArray
200+ Data.Array.MArray.Safe Data.Array.ST Data.Array.ST.Safe
201+ Data.Array.Storable Data.Array.Storable.Internals
202+ Data.Array.Storable.Safe Data.Array.Unboxed Data.Array.Unsafe
203+import-dirs:
204+library-dirs:
205+dynamic-library-dirs:
206+data-dir:
207+hs-libraries: HSarray-0.5.4.0
208+depends: base-4.14.1.0
209+haddock-interfaces:
210+haddock-html:
211+---
212+name: base
213+version: 4.14.1.0
214+visibility: public
215+id: base-4.14.1.0
216+key: base-4.14.1.0
217+license: BSD-3-Clause
218+maintainer: libraries@haskell.org
219+synopsis: Basic libraries
220+description:
221+ This package contains the Standard Haskell "Prelude" and its support libraries,
222+ and a large collection of useful libraries ranging from data
223+ structures to parsing combinators and debugging utilities.
224+category: Prelude
225+exposed: True
226+exposed-modules:
227+ Control.Applicative Control.Arrow Control.Category
228+ Control.Concurrent Control.Concurrent.Chan Control.Concurrent.MVar
229+ Control.Concurrent.QSem Control.Concurrent.QSemN Control.Exception
230+ Control.Exception.Base Control.Monad Control.Monad.Fail
231+ Control.Monad.Fix Control.Monad.IO.Class Control.Monad.Instances
232+ Control.Monad.ST Control.Monad.ST.Lazy Control.Monad.ST.Lazy.Safe
233+ Control.Monad.ST.Lazy.Unsafe Control.Monad.ST.Safe
234+ Control.Monad.ST.Strict Control.Monad.ST.Unsafe Control.Monad.Zip
235+ Data.Bifoldable Data.Bifunctor Data.Bitraversable Data.Bits
236+ Data.Bool Data.Char Data.Coerce Data.Complex Data.Data Data.Dynamic
237+ Data.Either Data.Eq Data.Fixed Data.Foldable Data.Function
238+ Data.Functor Data.Functor.Classes Data.Functor.Compose
239+ Data.Functor.Const Data.Functor.Contravariant Data.Functor.Identity
240+ Data.Functor.Product Data.Functor.Sum Data.IORef Data.Int Data.Ix
241+ Data.Kind Data.List Data.List.NonEmpty Data.Maybe Data.Monoid
242+ Data.Ord Data.Proxy Data.Ratio Data.STRef Data.STRef.Lazy
243+ Data.STRef.Strict Data.Semigroup Data.String Data.Traversable
244+ Data.Tuple Data.Type.Bool Data.Type.Coercion Data.Type.Equality
245+ Data.Typeable Data.Unique Data.Version Data.Void Data.Word
246+ Debug.Trace Foreign Foreign.C Foreign.C.Error Foreign.C.String
247+ Foreign.C.Types Foreign.Concurrent Foreign.ForeignPtr
248+ Foreign.ForeignPtr.Safe Foreign.ForeignPtr.Unsafe Foreign.Marshal
249+ Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Error
250+ Foreign.Marshal.Pool Foreign.Marshal.Safe Foreign.Marshal.Unsafe
251+ Foreign.Marshal.Utils Foreign.Ptr Foreign.Safe Foreign.StablePtr
252+ Foreign.Storable GHC.Arr GHC.Base GHC.ByteOrder GHC.Char GHC.Clock
253+ GHC.Conc GHC.Conc.IO GHC.Conc.Signal GHC.Conc.Sync
254+ GHC.ConsoleHandler GHC.Constants GHC.Desugar GHC.Enum
255+ GHC.Environment GHC.Err GHC.Event GHC.Exception GHC.Exception.Type
256+ GHC.ExecutionStack GHC.ExecutionStack.Internal GHC.Exts
257+ GHC.Fingerprint GHC.Fingerprint.Type GHC.Float
258+ GHC.Float.ConversionUtils GHC.Float.RealFracMethods GHC.Foreign
259+ GHC.ForeignPtr GHC.GHCi GHC.GHCi.Helpers GHC.Generics GHC.IO
260+ GHC.IO.Buffer GHC.IO.BufferedIO GHC.IO.Device GHC.IO.Encoding
261+ GHC.IO.Encoding.CodePage GHC.IO.Encoding.Failure
262+ GHC.IO.Encoding.Iconv GHC.IO.Encoding.Latin1 GHC.IO.Encoding.Types
263+ GHC.IO.Encoding.UTF16 GHC.IO.Encoding.UTF32 GHC.IO.Encoding.UTF8
264+ GHC.IO.Exception GHC.IO.FD GHC.IO.Handle GHC.IO.Handle.FD
265+ GHC.IO.Handle.Internals GHC.IO.Handle.Lock GHC.IO.Handle.Text
266+ GHC.IO.Handle.Types GHC.IO.IOMode GHC.IO.Unsafe GHC.IOArray
267+ GHC.IORef GHC.Int GHC.Ix GHC.List GHC.MVar GHC.Maybe GHC.Natural
268+ GHC.Num GHC.OldList GHC.OverloadedLabels GHC.Pack GHC.Profiling
269+ GHC.Ptr GHC.RTS.Flags GHC.Read GHC.Real GHC.Records
270+ GHC.ResponseFile GHC.ST GHC.STRef GHC.Show GHC.Stable
271+ GHC.StableName GHC.Stack GHC.Stack.CCS GHC.Stack.Types
272+ GHC.StaticPtr GHC.Stats GHC.Storable GHC.TopHandler GHC.TypeLits
273+ GHC.TypeNats GHC.Unicode GHC.Weak GHC.Word Numeric Numeric.Natural
274+ Prelude System.CPUTime System.Console.GetOpt System.Environment
275+ System.Environment.Blank System.Exit System.IO System.IO.Error
276+ System.IO.Unsafe System.Info System.Mem System.Mem.StableName
277+ System.Mem.Weak System.Posix.Internals System.Posix.Types
278+ System.Timeout Text.ParserCombinators.ReadP
279+ Text.ParserCombinators.ReadPrec Text.Printf Text.Read Text.Read.Lex
280+ Text.Show Text.Show.Functions Type.Reflection
281+ Type.Reflection.Unsafe Unsafe.Coerce
282+hidden-modules:
283+ Control.Monad.ST.Imp Control.Monad.ST.Lazy.Imp Data.Functor.Utils
284+ Data.OldList Data.Semigroup.Internal Data.Typeable.Internal
285+ Foreign.ForeignPtr.Imp GHC.IO.Handle.Lock.Common
286+ GHC.IO.Handle.Lock.Flock GHC.IO.Handle.Lock.LinuxOFD
287+ GHC.IO.Handle.Lock.NoOp GHC.IO.Handle.Lock.Windows
288+ GHC.StaticPtr.Internal System.Environment.ExecutablePath
289+ System.CPUTime.Utils GHC.Event.Arr GHC.Event.Array
290+ GHC.Event.Control GHC.Event.EPoll GHC.Event.IntTable
291+ GHC.Event.Internal GHC.Event.KQueue GHC.Event.Manager GHC.Event.PSQ
292+ GHC.Event.Poll GHC.Event.Thread GHC.Event.TimerManager
293+ GHC.Event.Unique System.CPUTime.Posix.ClockGetTime
294+ System.CPUTime.Posix.Times System.CPUTime.Posix.RUsage
295+ System.CPUTime.Unsupported
296+import-dirs:
297+library-dirs:
298+dynamic-library-dirs:
299+data-dir:
300+hs-libraries: HSbase-4.14.1.0
301+include-dirs:
302+includes: HsBase.h
303+depends: ghc-prim-0.6.1 integer-gmp-1.0.3.0 rts
304+haddock-interfaces:
305+haddock-html:
306+---
307+name: binary
308+version: 0.8.8.0
309+visibility: public
310+id: binary-0.8.8.0
311+key: binary-0.8.8.0
312+license: BSD-3-Clause
313+maintainer: Lennart Kolmodin, Don Stewart <dons00@gmail.com>
314+author: Lennart Kolmodin <kolmodin@gmail.com>
315+stability: provisional
316+homepage: https://github.com/kolmodin/binary
317+synopsis:
318+ Binary serialisation for Haskell values using lazy ByteStrings
319+description:
320+ Efficient, pure binary serialisation using lazy ByteStrings.
321+ Haskell values may be encoded to and from binary formats,
322+ written to disk as binary, or sent over the network.
323+ The format used can be automatically generated, or
324+ you can choose to implement a custom format if needed.
325+ Serialisation speeds of over 1 G\/sec have been observed,
326+ so this library should be suitable for high performance
327+ scenarios.
328+category: Data, Parsing
329+exposed: True
330+exposed-modules:
331+ Data.Binary Data.Binary.Builder Data.Binary.Get
332+ Data.Binary.Get.Internal Data.Binary.Put
333+hidden-modules:
334+ Data.Binary.Class Data.Binary.Internal Data.Binary.Generic
335+ Data.Binary.FloatCast
336+import-dirs:
337+library-dirs:
338+dynamic-library-dirs:
339+data-dir:
340+hs-libraries: HSbinary-0.8.8.0
341+depends:
342+ array-0.5.4.0 base-4.14.1.0 bytestring-0.10.10.0 containers-0.6.2.1
343+haddock-interfaces:
344+haddock-html:
345+---
346+name: bytestring
347+version: 0.10.10.0
348+visibility: public
349+id: bytestring-0.10.10.0
350+key: bytestring-0.10.10.0
351+license: BSD-3-Clause
352+copyright:
353+ Copyright (c) Don Stewart 2005-2009,
354+ (c) Duncan Coutts 2006-2015,
355+ (c) David Roundy 2003-2005,
356+ (c) Jasper Van der Jeugt 2010,
357+ (c) Simon Meier 2010-2013.
358+maintainer: Duncan Coutts <duncan@community.haskell.org>
359+author:
360+ Don Stewart,
361+ Duncan Coutts
362+homepage: https://github.com/haskell/bytestring
363+synopsis:
364+ Fast, compact, strict and lazy byte strings with a list interface
365+description:
366+ An efficient compact, immutable byte string type (both strict and lazy)
367+ suitable for binary or 8-bit character data.
368+ The 'ByteString' type represents sequences of bytes or 8-bit characters.
369+ It is suitable for high performance use, both in terms of large data
370+ quantities, or high speed requirements. The 'ByteString' functions follow
371+ the same style as Haskell\'s ordinary lists, so it is easy to convert code
372+ from using 'String' to 'ByteString'.
373+ Two 'ByteString' variants are provided:
374+ * Strict 'ByteString's keep the string as a single large array. This
375+ makes them convenient for passing data between C and Haskell.
376+ * Lazy 'ByteString's use a lazy list of strict chunks which makes it
377+ suitable for I\/O streaming tasks.
378+ The @Char8@ modules provide a character-based view of the same
379+ underlying 'ByteString' types. This makes it convenient to handle mixed
380+ binary and 8-bit character content (which is common in many file formats
381+ and network protocols).
382+ The 'Builder' module provides an efficient way to build up 'ByteString's
383+ in an ad-hoc way by repeated concatenation. This is ideal for fast
384+ serialisation or pretty printing.
385+ There is also a 'ShortByteString' type which has a lower memory overhead
386+ and can can be converted to or from a 'ByteString', but supports very few
387+ other operations. It is suitable for keeping many short strings in memory.
388+ 'ByteString's are not designed for Unicode. For Unicode strings you should
389+ use the 'Text' type from the @text@ package.
390+ These modules are intended to be imported qualified, to avoid name clashes
391+ with "Prelude" functions, e.g.
392+ > import qualified Data.ByteString as BS
393+category: Data
394+exposed: True
395+exposed-modules:
396+ Data.ByteString Data.ByteString.Builder
397+ Data.ByteString.Builder.Extra Data.ByteString.Builder.Internal
398+ Data.ByteString.Builder.Prim Data.ByteString.Builder.Prim.Internal
399+ Data.ByteString.Char8 Data.ByteString.Internal Data.ByteString.Lazy
400+ Data.ByteString.Lazy.Builder Data.ByteString.Lazy.Builder.ASCII
401+ Data.ByteString.Lazy.Builder.Extras Data.ByteString.Lazy.Char8
402+ Data.ByteString.Lazy.Internal Data.ByteString.Short
403+ Data.ByteString.Short.Internal Data.ByteString.Unsafe
404+hidden-modules:
405+ Data.ByteString.Builder.ASCII Data.ByteString.Builder.Prim.Binary
406+ Data.ByteString.Builder.Prim.ASCII
407+ Data.ByteString.Builder.Prim.Internal.Floating
408+ Data.ByteString.Builder.Prim.Internal.UncheckedShifts
409+ Data.ByteString.Builder.Prim.Internal.Base16
410+import-dirs:
411+library-dirs:
412+dynamic-library-dirs:
413+data-dir:
414+hs-libraries: HSbytestring-0.10.10.0
415+include-dirs:
416+includes: fpstring.h
417+depends:
418+ base-4.14.1.0 deepseq-1.4.4.0 ghc-prim-0.6.1 integer-gmp-1.0.3.0
419+haddock-interfaces:
420+haddock-html:
421+---
422+name: containers
423+version: 0.6.2.1
424+visibility: public
425+id: containers-0.6.2.1
426+key: containers-0.6.2.1
427+license: BSD-3-Clause
428+maintainer: libraries@haskell.org
429+synopsis: Assorted concrete container types
430+description:
431+ This package contains efficient general-purpose implementations
432+ of various immutable container types including sets, maps, sequences,
433+ trees, and graphs.
434+ For a walkthrough of what this package provides with examples of common
435+ operations see the [containers
436+ introduction](https://haskell-containers.readthedocs.io).
437+ The declared cost of each operation is either worst-case or amortized, but
438+ remains valid even if structures are shared.
439+category: Data Structures
440+exposed: True
441+exposed-modules:
442+ Data.Containers.ListUtils Data.Graph Data.IntMap
443+ Data.IntMap.Internal Data.IntMap.Internal.Debug Data.IntMap.Lazy
444+ Data.IntMap.Merge.Lazy Data.IntMap.Merge.Strict Data.IntMap.Strict
445+ Data.IntMap.Strict.Internal Data.IntSet Data.IntSet.Internal
446+ Data.Map Data.Map.Internal Data.Map.Internal.Debug Data.Map.Lazy
447+ Data.Map.Merge.Lazy Data.Map.Merge.Strict Data.Map.Strict
448+ Data.Map.Strict.Internal Data.Sequence Data.Sequence.Internal
449+ Data.Sequence.Internal.Sorting Data.Set Data.Set.Internal Data.Tree
450+ Utils.Containers.Internal.BitQueue
451+ Utils.Containers.Internal.BitUtil
452+ Utils.Containers.Internal.StrictPair
453+hidden-modules:
454+ Utils.Containers.Internal.State
455+ Utils.Containers.Internal.StrictMaybe
456+ Utils.Containers.Internal.PtrEquality
457+ Utils.Containers.Internal.Coercions
458+ Utils.Containers.Internal.TypeError
459+ Data.Map.Internal.DeprecatedShowTree
460+ Data.IntMap.Internal.DeprecatedDebug
461+import-dirs:
462+library-dirs:
463+dynamic-library-dirs:
464+data-dir:
465+hs-libraries: HScontainers-0.6.2.1
466+depends: array-0.5.4.0 base-4.14.1.0 deepseq-1.4.4.0
467+haddock-interfaces:
468+haddock-html:
469+---
470+name: deepseq
471+version: 1.4.4.0
472+visibility: public
473+id: deepseq-1.4.4.0
474+key: deepseq-1.4.4.0
475+license: BSD-3-Clause
476+maintainer: libraries@haskell.org
477+synopsis: Deep evaluation of data structures
478+description:
479+ This package provides methods for fully evaluating data structures
480+ (\"deep evaluation\"). Deep evaluation is often used for adding
481+ strictness to a program, e.g. in order to force pending exceptions,
482+ remove space leaks, or force lazy I/O to happen. It is also useful
483+ in parallel programs, to ensure pending work does not migrate to the
484+ wrong thread.
485+ The primary use of this package is via the 'deepseq' function, a
486+ \"deep\" version of 'seq'. It is implemented on top of an 'NFData'
487+ typeclass (\"Normal Form Data\", data structures with no unevaluated
488+ components) which defines strategies for fully evaluating different
489+ data types. See module documentation in "Control.DeepSeq" for more
490+ details.
491+category: Control
492+exposed: True
493+exposed-modules: Control.DeepSeq
494+hidden-modules: Control.DeepSeq.BackDoor
495+import-dirs:
496+library-dirs:
497+dynamic-library-dirs:
498+data-dir:
499+hs-libraries: HSdeepseq-1.4.4.0
500+depends: array-0.5.4.0 base-4.14.1.0
501+haddock-interfaces:
502+haddock-html:
503+---
504+name: directory
505+version: 1.3.6.0
506+visibility: public
507+id: directory-1.3.6.0
508+key: directory-1.3.6.0
509+license: BSD-3-Clause
510+maintainer: libraries@haskell.org
511+synopsis: Platform-agnostic library for filesystem operations
512+description:
513+ This library provides a basic set of operations for manipulating files and
514+ directories in a portable way.
515+category: System
516+exposed: True
517+exposed-modules:
518+ System.Directory System.Directory.Internal
519+ System.Directory.Internal.Prelude
520+hidden-modules:
521+ System.Directory.Internal.C_utimensat
522+ System.Directory.Internal.Common System.Directory.Internal.Config
523+ System.Directory.Internal.Posix System.Directory.Internal.Windows
524+import-dirs:
525+library-dirs:
526+dynamic-library-dirs:
527+data-dir:
528+hs-libraries: HSdirectory-1.3.6.0
529+depends:
530+ base-4.14.1.0 filepath-1.4.2.1 time-1.9.3 unix-2.7.2.2
531+haddock-interfaces:
532+haddock-html:
533+---
534+name: exceptions
535+version: 0.10.4
536+visibility: public
537+id: exceptions-0.10.4
538+key: exceptions-0.10.4
539+license: BSD-3-Clause
540+copyright:
541+ Copyright (C) 2013-2015 Edward A. Kmett
542+ Copyright (C) 2012 Google Inc.
543+maintainer: Edward A. Kmett <ekmett@gmail.com>
544+author: Edward A. Kmett
545+stability: provisional
546+homepage: http://github.com/ekmett/exceptions/
547+synopsis: Extensible optionally-pure exceptions
548+description: Extensible optionally-pure exceptions.
549+category: Control, Exceptions, Monad
550+exposed: True
551+exposed-modules: Control.Monad.Catch Control.Monad.Catch.Pure
552+import-dirs:
553+library-dirs:
554+dynamic-library-dirs:
555+data-dir:
556+hs-libraries: HSexceptions-0.10.4
557+depends:
558+ base-4.14.1.0 mtl-2.2.2 stm-2.5.0.0 template-haskell-2.16.0.0
559+ transformers-0.5.6.2
560+haddock-interfaces:
561+haddock-html:
562+---
563+name: filepath
564+version: 1.4.2.1
565+visibility: public
566+id: filepath-1.4.2.1
567+key: filepath-1.4.2.1
568+license: BSD-3-Clause
569+copyright: Neil Mitchell 2005-2018
570+maintainer: Neil Mitchell <ndmitchell@gmail.com>
571+author: Neil Mitchell <ndmitchell@gmail.com>
572+homepage: https://github.com/haskell/filepath#readme
573+synopsis: Library for manipulating FilePaths in a cross platform way.
574+description:
575+ This package provides functionality for manipulating @FilePath@ values, and is shipped with both <https://www.haskell.org/ghc/ GHC> and the <https://www.haskell.org/platform/ Haskell Platform>. It provides three modules:
576+ * "System.FilePath.Posix" manipulates POSIX\/Linux style @FilePath@ values (with @\/@ as the path separator).
577+ * "System.FilePath.Windows" manipulates Windows style @FilePath@ values (with either @\\@ or @\/@ as the path separator, and deals with drives).
578+ * "System.FilePath" is an alias for the module appropriate to your platform.
579+ All three modules provide the same API, and the same documentation (calling out differences in the different variants).
580+category: System
581+exposed: True
582+exposed-modules:
583+ System.FilePath System.FilePath.Posix System.FilePath.Windows
584+import-dirs:
585+library-dirs:
586+dynamic-library-dirs:
587+data-dir:
588+hs-libraries: HSfilepath-1.4.2.1
589+depends: base-4.14.1.0
590+haddock-interfaces:
591+haddock-html:
592+---
593+name: ghc-boot
594+version: 8.10.2
595+visibility: public
596+id: ghc-boot-8.10.2
597+key: ghc-boot-8.10.2
598+license: BSD-3-Clause
599+maintainer: ghc-devs@haskell.org
600+synopsis: Shared functionality between GHC and its boot libraries
601+description:
602+ This library is shared between GHC, ghc-pkg, and other boot
603+ libraries.
604+ A note about "GHC.PackageDb": it only deals with the subset of
605+ the package database that the compiler cares about: modules
606+ paths etc and not package metadata like description, authors
607+ etc. It is thus not a library interface to ghc-pkg and is *not*
608+ suitable for modifying GHC package databases.
609+ The package database format and this library are constructed in
610+ such a way that while ghc-pkg depends on Cabal, the GHC library
611+ and program do not have to depend on Cabal.
612+category: GHC
613+exposed: True
614+exposed-modules:
615+ GHC.BaseDir GHC.ForeignSrcLang GHC.HandleEncoding
616+ GHC.LanguageExtensions GHC.PackageDb GHC.Platform GHC.Platform.Host
617+ GHC.Serialized GHC.Settings GHC.UniqueSubdir GHC.Version
618+import-dirs:
619+library-dirs:
620+dynamic-library-dirs:
621+data-dir:
622+hs-libraries: HSghc-boot-8.10.2
623+depends:
624+ base-4.14.1.0 binary-0.8.8.0 bytestring-0.10.10.0
625+ containers-0.6.2.1 directory-1.3.6.0 filepath-1.4.2.1
626+ ghc-boot-th-8.10.2
627+haddock-interfaces:
628+haddock-html:
629+---
630+name: ghc-boot-th
631+version: 8.10.2
632+visibility: public
633+id: ghc-boot-th-8.10.2
634+key: ghc-boot-th-8.10.2
635+license: BSD-3-Clause
636+maintainer: ghc-devs@haskell.org
637+synopsis:
638+ Shared functionality between GHC and the @template-haskell@
639+ library
640+description:
641+ This library contains various bits shared between the @ghc@ and
642+ @template-haskell@ libraries.
643+ This package exists to ensure that @template-haskell@ has a
644+ minimal set of transitive dependencies, since it is intended to
645+ be depended upon by user code.
646+category: GHC
647+exposed: True
648+exposed-modules:
649+ GHC.ForeignSrcLang.Type GHC.LanguageExtensions.Type GHC.Lexeme
650+import-dirs:
651+library-dirs:
652+dynamic-library-dirs:
653+data-dir:
654+hs-libraries: HSghc-boot-th-8.10.2
655+depends: base-4.14.1.0
656+haddock-interfaces:
657+haddock-html:
658+---
659+name: ghc-compact
660+version: 0.1.0.0
661+visibility: public
662+id: ghc-compact-0.1.0.0
663+key: ghc-compact-0.1.0.0
664+license: BSD-3-Clause
665+maintainer: libraries@haskell.org
666+synopsis: In memory storage of deeply evaluated data structure
667+description:
668+ This package provides minimal functionality for working with
669+ "compact regions", which hold a fully evaluated Haskell object graph.
670+ These regions maintain the invariant that no pointers live inside the struct
671+ that point outside it, which ensures efficient garbage collection without
672+ ever reading the structure contents (effectively, it works as a manually
673+ managed "oldest generation" which is never freed until the whole is
674+ released).
675+ Internally, the struct is stored a single contiguous block of memory,
676+ which allows efficient serialization and deserialization of structs
677+ for distributed computing.
678+category: Data
679+exposed: True
680+exposed-modules: GHC.Compact GHC.Compact.Serialized
681+import-dirs:
682+library-dirs:
683+dynamic-library-dirs:
684+data-dir:
685+hs-libraries: HSghc-compact-0.1.0.0
686+depends: base-4.14.1.0 bytestring-0.10.10.0 ghc-prim-0.6.1
687+haddock-interfaces:
688+haddock-html:
689+---
690+name: ghc-heap
691+version: 8.10.2
692+visibility: public
693+id: ghc-heap-8.10.2
694+key: ghc-heap-8.10.2
695+license: BSD-3-Clause
696+maintainer: libraries@haskell.org
697+synopsis: Functions for walking GHC's heap
698+description:
699+ This package provides functions for walking the GHC heap data structures
700+ and retrieving information about those data structures.
701+category: GHC
702+exposed: True
703+exposed-modules:
704+ GHC.Exts.Heap GHC.Exts.Heap.ClosureTypes GHC.Exts.Heap.Closures
705+ GHC.Exts.Heap.Constants GHC.Exts.Heap.InfoTable
706+ GHC.Exts.Heap.InfoTable.Types GHC.Exts.Heap.InfoTableProf
707+ GHC.Exts.Heap.Utils
708+import-dirs:
709+library-dirs:
710+dynamic-library-dirs:
711+data-dir:
712+hs-libraries: HSghc-heap-8.10.2
713+depends: base-4.14.1.0 ghc-prim-0.6.1 rts
714+haddock-interfaces:
715+haddock-html:
716+---
717+name: ghc-prim
718+version: 0.6.1
719+visibility: public
720+id: ghc-prim-0.6.1
721+key: ghc-prim-0.6.1
722+license: BSD-3-Clause
723+maintainer: libraries@haskell.org
724+synopsis: GHC primitives
725+description:
726+ This package contains the primitive types and operations supplied by GHC.
727+category: GHC
728+exposed: True
729+exposed-modules:
730+ GHC.CString GHC.Classes GHC.Debug GHC.IntWord64 GHC.Magic
731+ GHC.Prim.Ext GHC.PrimopWrappers GHC.Tuple GHC.Types GHC.Prim
732+import-dirs:
733+library-dirs:
734+dynamic-library-dirs:
735+data-dir:
736+hs-libraries: HSghc-prim-0.6.1
737+extra-libraries: c m
738+depends: rts
739+haddock-interfaces:
740+haddock-html:
741+---
742+name: ghci
743+version: 8.10.2
744+visibility: public
745+id: ghci-8.10.2
746+key: ghci-8.10.2
747+license: BSD-3-Clause
748+maintainer: ghc-devs@haskell.org
749+synopsis: The library supporting GHC's interactive interpreter
750+description:
751+ This library offers interfaces which mediate interactions between the
752+ @ghci@ interactive shell and @iserv@, GHC's out-of-process interpreter
753+ backend.
754+category: GHC
755+exposed: True
756+exposed-modules:
757+ GHCi.BinaryArray GHCi.BreakArray GHCi.CreateBCO GHCi.FFI
758+ GHCi.InfoTable GHCi.Message GHCi.ObjLink GHCi.RemoteTypes
759+ GHCi.ResolvedBCO GHCi.Run GHCi.Signals GHCi.StaticPtrTable GHCi.TH
760+ GHCi.TH.Binary SizedSeq
761+import-dirs:
762+library-dirs:
763+dynamic-library-dirs:
764+data-dir:
765+hs-libraries: HSghci-8.10.2
766+include-dirs:
767+depends:
768+ array-0.5.4.0 base-4.14.1.0 binary-0.8.8.0 bytestring-0.10.10.0
769+ containers-0.6.2.1 deepseq-1.4.4.0 filepath-1.4.2.1 ghc-boot-8.10.2
770+ ghc-boot-th-8.10.2 ghc-heap-8.10.2 template-haskell-2.16.0.0
771+ transformers-0.5.6.2 unix-2.7.2.2
772+haddock-interfaces:
773+haddock-html:
774+---
775+name: haskeline
776+version: 0.8.0.1
777+visibility: public
778+id: haskeline-0.8.0.1
779+key: haskeline-0.8.0.1
780+license: BSD-3-Clause
781+copyright: (c) Judah Jacobson
782+maintainer: Judah Jacobson <judah.jacobson@gmail.com>
783+author: Judah Jacobson
784+stability: Stable
785+homepage: https://github.com/judah/haskeline
786+synopsis:
787+ A command-line interface for user input, written in Haskell.
788+description:
789+ Haskeline provides a user interface for line input in command-line
790+ programs. This library is similar in purpose to readline, but since
791+ it is written in Haskell it is (hopefully) more easily used in other
792+ Haskell programs.
793+ Haskeline runs both on POSIX-compatible systems and on Windows.
794+category: User Interfaces
795+exposed: True
796+exposed-modules:
797+ System.Console.Haskeline System.Console.Haskeline.Completion
798+ System.Console.Haskeline.History System.Console.Haskeline.IO
799+ System.Console.Haskeline.Internal
800+hidden-modules:
801+ System.Console.Haskeline.Backend
802+ System.Console.Haskeline.Backend.WCWidth
803+ System.Console.Haskeline.Command
804+ System.Console.Haskeline.Command.Completion
805+ System.Console.Haskeline.Command.History
806+ System.Console.Haskeline.Command.KillRing
807+ System.Console.Haskeline.Directory System.Console.Haskeline.Emacs
808+ System.Console.Haskeline.InputT System.Console.Haskeline.Key
809+ System.Console.Haskeline.LineState System.Console.Haskeline.Monads
810+ System.Console.Haskeline.Prefs System.Console.Haskeline.Recover
811+ System.Console.Haskeline.RunCommand System.Console.Haskeline.Term
812+ System.Console.Haskeline.Command.Undo System.Console.Haskeline.Vi
813+ System.Console.Haskeline.Backend.Posix
814+ System.Console.Haskeline.Backend.Posix.Encoder
815+ System.Console.Haskeline.Backend.DumbTerm
816+import-dirs:
817+library-dirs:
818+dynamic-library-dirs:
819+data-dir:
820+hs-libraries: HShaskeline-0.8.0.1
821+depends:
822+ base-4.14.1.0 bytestring-0.10.10.0 containers-0.6.2.1
823+ directory-1.3.6.0 exceptions-0.10.4 filepath-1.4.2.1
824+ process-1.6.9.0 stm-2.5.0.0 transformers-0.5.6.2 unix-2.7.2.2
825+haddock-interfaces:
826+haddock-html:
827+---
828+name: hpc
829+version: 0.6.1.0
830+visibility: public
831+id: hpc-0.6.1.0
832+key: hpc-0.6.1.0
833+license: BSD-3-Clause
834+maintainer: ghc-devs@haskell.org
835+author: Andy Gill
836+synopsis: Code Coverage Library for Haskell
837+description:
838+ This package provides the code coverage library for Haskell.
839+ See <http://www.haskell.org/haskellwiki/Haskell_program_coverage> for more
840+ information.
841+category: Control
842+exposed: True
843+exposed-modules:
844+ Trace.Hpc.Mix Trace.Hpc.Reflect Trace.Hpc.Tix Trace.Hpc.Util
845+import-dirs:
846+library-dirs:
847+dynamic-library-dirs:
848+data-dir:
849+hs-libraries: HShpc-0.6.1.0
850+depends:
851+ base-4.14.1.0 containers-0.6.2.1 deepseq-1.4.4.0 directory-1.3.6.0
852+ filepath-1.4.2.1 time-1.9.3
853+haddock-interfaces:
854+haddock-html:
855+---
856+name: integer-gmp
857+version: 1.0.3.0
858+visibility: public
859+id: integer-gmp-1.0.3.0
860+key: integer-gmp-1.0.3.0
861+license: BSD-3-Clause
862+maintainer: hvr@gnu.org
863+author: Herbert Valerio Riedel
864+synopsis: Integer library based on GMP
865+description:
866+ This package provides the low-level implementation of the standard
867+ 'Integer' type based on the
868+ <http://gmplib.org/ GNU Multiple Precision Arithmetic Library (GMP)>.
869+ This package provides access to the internal representation of
870+ 'Integer' as well as primitive operations with no proper error
871+ handling, and should only be used directly with the utmost care.
872+category: Numeric, Algebra
873+exposed: True
874+exposed-modules:
875+ GHC.Integer GHC.Integer.GMP.Internals GHC.Integer.Logarithms
876+ GHC.Integer.Logarithms.Internals
877+hidden-modules: GHC.Integer.Type
878+import-dirs:
879+library-dirs:
880+dynamic-library-dirs:
881+data-dir:
882+hs-libraries: HSinteger-gmp-1.0.3.0
883+extra-libraries: gmp
884+include-dirs:
885+depends: ghc-prim-0.6.1
886+haddock-interfaces:
887+haddock-html:
888+---
889+name: libiserv
890+version: 8.10.2
891+visibility: public
892+id: libiserv-8.10.2
893+key: libiserv-8.10.2
894+license: BSD-3-Clause
895+copyright: XXX
896+maintainer: XXX
897+author: XXX
898+synopsis: Provides shared functionality between iserv and iserv-proxy
899+category: Development
900+exposed: True
901+exposed-modules: GHCi.Utils Lib
902+import-dirs:
903+library-dirs:
904+dynamic-library-dirs:
905+data-dir:
906+hs-libraries: HSlibiserv-8.10.2
907+depends:
908+ base-4.14.1.0 binary-0.8.8.0 bytestring-0.10.10.0
909+ containers-0.6.2.1 deepseq-1.4.4.0 ghci-8.10.2 unix-2.7.2.2
910+haddock-interfaces:
911+haddock-html:
912+---
913+name: mtl
914+version: 2.2.2
915+visibility: public
916+id: mtl-2.2.2
917+key: mtl-2.2.2
918+license: BSD-3-Clause
919+maintainer: Edward Kmett <ekmett@gmail.com>
920+author: Andy Gill
921+homepage: http://github.com/haskell/mtl
922+synopsis: Monad classes, using functional dependencies
923+description:
924+ Monad classes using functional dependencies, with instances
925+ for various monad transformers, inspired by the paper
926+ /Functional Programming with Overloading and Higher-Order Polymorphism/,
927+ by Mark P Jones, in /Advanced School of Functional Programming/, 1995
928+ (<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).
929+category: Control
930+exposed: True
931+exposed-modules:
932+ Control.Monad.Cont Control.Monad.Cont.Class Control.Monad.Error
933+ Control.Monad.Error.Class Control.Monad.Except
934+ Control.Monad.Identity Control.Monad.List Control.Monad.RWS
935+ Control.Monad.RWS.Class Control.Monad.RWS.Lazy
936+ Control.Monad.RWS.Strict Control.Monad.Reader
937+ Control.Monad.Reader.Class Control.Monad.State
938+ Control.Monad.State.Class Control.Monad.State.Lazy
939+ Control.Monad.State.Strict Control.Monad.Trans Control.Monad.Writer
940+ Control.Monad.Writer.Class Control.Monad.Writer.Lazy
941+ Control.Monad.Writer.Strict
942+import-dirs:
943+library-dirs:
944+dynamic-library-dirs:
945+data-dir:
946+hs-libraries: HSmtl-2.2.2
947+depends: base-4.14.1.0 transformers-0.5.6.2
948+haddock-interfaces:
949+haddock-html:
950+---
951+name: parsec
952+version: 3.1.14.0
953+visibility: public
954+id: parsec-3.1.14.0
955+key: parsec-3.1.14.0
956+license: BSD-3-Clause
957+maintainer: Herbert Valerio Riedel <hvr@gnu.org>
958+author:
959+ Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>, Antoine Latter <aslatter@gmail.com>
960+homepage: https://github.com/haskell/parsec
961+synopsis: Monadic parser combinators
962+description:
963+ Parsec is designed from scratch as an industrial-strength parser
964+ library. It is simple, safe, well documented (on the package
965+ homepage), has extensive libraries, good error messages,
966+ and is fast. It is defined as a monad transformer that can be
967+ stacked on arbitrary monads, and it is also parametric in the
968+ input stream type.
969+ The main entry point is the "Text.Parsec" module which provides
970+ defaults for parsing 'Char'acter data.
971+ The "Text.ParserCombinators.Parsec" module hierarchy contains
972+ the legacy @parsec-2@ API and may be removed at some point in
973+ the future.
974+category: Parsing
975+exposed: True
976+exposed-modules:
977+ Text.Parsec Text.Parsec.ByteString Text.Parsec.ByteString.Lazy
978+ Text.Parsec.Char Text.Parsec.Combinator Text.Parsec.Error
979+ Text.Parsec.Expr Text.Parsec.Language Text.Parsec.Perm
980+ Text.Parsec.Pos Text.Parsec.Prim Text.Parsec.String
981+ Text.Parsec.Text Text.Parsec.Text.Lazy Text.Parsec.Token
982+ Text.ParserCombinators.Parsec Text.ParserCombinators.Parsec.Char
983+ Text.ParserCombinators.Parsec.Combinator
984+ Text.ParserCombinators.Parsec.Error
985+ Text.ParserCombinators.Parsec.Expr
986+ Text.ParserCombinators.Parsec.Language
987+ Text.ParserCombinators.Parsec.Perm
988+ Text.ParserCombinators.Parsec.Pos
989+ Text.ParserCombinators.Parsec.Prim
990+ Text.ParserCombinators.Parsec.Token
991+import-dirs:
992+library-dirs:
993+dynamic-library-dirs:
994+data-dir:
995+hs-libraries: HSparsec-3.1.14.0
996+depends:
997+ base-4.14.1.0 bytestring-0.10.10.0 mtl-2.2.2 text-1.2.3.2
998+haddock-interfaces:
999+haddock-html:
1000+---
1001+name: pretty
1002+version: 1.1.3.6
1003+visibility: public
1004+id: pretty-1.1.3.6
1005+key: pretty-1.1.3.6
1006+license: BSD-3-Clause
1007+maintainer: David Terei <code@davidterei.com>
1008+stability: Stable
1009+homepage: http://github.com/haskell/pretty
1010+synopsis: Pretty-printing library
1011+description:
1012+ This package contains a pretty-printing library, a set of API's
1013+ that provides a way to easily print out text in a consistent
1014+ format of your choosing. This is useful for compilers and related
1015+ tools.
1016+ This library was originally designed by John Hughes's and has since
1017+ been heavily modified by Simon Peyton Jones.
1018+category: Text
1019+exposed: True
1020+exposed-modules:
1021+ Text.PrettyPrint Text.PrettyPrint.Annotated
1022+ Text.PrettyPrint.Annotated.HughesPJ
1023+ Text.PrettyPrint.Annotated.HughesPJClass Text.PrettyPrint.HughesPJ
1024+ Text.PrettyPrint.HughesPJClass
1025+import-dirs:
1026+library-dirs:
1027+dynamic-library-dirs:
1028+data-dir:
1029+hs-libraries: HSpretty-1.1.3.6
1030+depends: base-4.14.1.0 deepseq-1.4.4.0 ghc-prim-0.6.1
1031+haddock-interfaces:
1032+haddock-html:
1033+---
1034+name: process
1035+version: 1.6.9.0
1036+visibility: public
1037+id: process-1.6.9.0
1038+key: process-1.6.9.0
1039+license: BSD-3-Clause
1040+maintainer: libraries@haskell.org
1041+synopsis: Process libraries
1042+description:
1043+ This package contains libraries for dealing with system processes.
1044+ The typed-process package is a more recent take on a process API,
1045+ which uses this package internally. It features better binary
1046+ support, easier concurrency, and a more composable API. You can
1047+ read more about it at
1048+ <https://github.com/fpco/typed-process/#readme>.
1049+category: System
1050+exposed: True
1051+exposed-modules: System.Cmd System.Process System.Process.Internals
1052+hidden-modules: System.Process.Common System.Process.Posix
1053+import-dirs:
1054+library-dirs:
1055+dynamic-library-dirs:
1056+data-dir:
1057+hs-libraries: HSprocess-1.6.9.0
1058+include-dirs:
1059+includes: runProcess.h
1060+depends:
1061+ base-4.14.1.0 deepseq-1.4.4.0 directory-1.3.6.0 filepath-1.4.2.1
1062+ unix-2.7.2.2
1063+haddock-interfaces:
1064+haddock-html:
1065+---
1066+name: stm
1067+version: 2.5.0.0
1068+visibility: public
1069+id: stm-2.5.0.0
1070+key: stm-2.5.0.0
1071+license: BSD-3-Clause
1072+maintainer: libraries@haskell.org
1073+homepage: https://wiki.haskell.org/Software_transactional_memory
1074+synopsis: Software Transactional Memory
1075+description:
1076+ Software Transactional Memory, or STM, is an abstraction for
1077+ concurrent communication. The main benefits of STM are
1078+ /composability/ and /modularity/. That is, using STM you can write
1079+ concurrent abstractions that can be easily composed with any other
1080+ abstraction built using STM, without exposing the details of how
1081+ your abstraction ensures safety. This is typically not the case
1082+ with other forms of concurrent communication, such as locks or
1083+ 'MVar's.
1084+category: Concurrency
1085+exposed: True
1086+exposed-modules:
1087+ Control.Concurrent.STM Control.Concurrent.STM.TArray
1088+ Control.Concurrent.STM.TBQueue Control.Concurrent.STM.TChan
1089+ Control.Concurrent.STM.TMVar Control.Concurrent.STM.TQueue
1090+ Control.Concurrent.STM.TSem Control.Concurrent.STM.TVar
1091+ Control.Monad.STM
1092+hidden-modules: Control.Sequential.STM
1093+import-dirs:
1094+library-dirs:
1095+dynamic-library-dirs:
1096+data-dir:
1097+hs-libraries: HSstm-2.5.0.0
1098+depends: array-0.5.4.0 base-4.14.1.0
1099+haddock-interfaces:
1100+haddock-html:
1101+---
1102+name: template-haskell
1103+version: 2.16.0.0
1104+visibility: public
1105+id: template-haskell-2.16.0.0
1106+key: template-haskell-2.16.0.0
1107+license: BSD-3-Clause
1108+maintainer: libraries@haskell.org
1109+synopsis: Support library for Template Haskell
1110+description:
1111+ This package provides modules containing facilities for manipulating
1112+ Haskell source code using Template Haskell.
1113+ See <http://www.haskell.org/haskellwiki/Template_Haskell> for more
1114+ information.
1115+category: Template Haskell
1116+exposed: True
1117+exposed-modules:
1118+ Language.Haskell.TH Language.Haskell.TH.LanguageExtensions
1119+ Language.Haskell.TH.Lib Language.Haskell.TH.Lib.Internal
1120+ Language.Haskell.TH.Ppr Language.Haskell.TH.PprLib
1121+ Language.Haskell.TH.Quote Language.Haskell.TH.Syntax
1122+hidden-modules: Language.Haskell.TH.Lib.Map
1123+import-dirs:
1124+library-dirs:
1125+dynamic-library-dirs:
1126+data-dir:
1127+hs-libraries: HStemplate-haskell-2.16.0.0
1128+depends:
1129+ base-4.14.1.0 ghc-boot-th-8.10.2 ghc-prim-0.6.1 pretty-1.1.3.6
1130+haddock-interfaces:
1131+haddock-html:
1132+---
1133+name: text
1134+version: 1.2.3.2
1135+visibility: public
1136+id: text-1.2.3.2
1137+key: text-1.2.3.2
1138+license: BSD-2-Clause
1139+copyright: 2009-2011 Bryan O'Sullivan, 2008-2009 Tom Harper
1140+maintainer:
1141+ Bryan O'Sullivan <bos@serpentine.com>, Herbert Valerio Riedel <hvr@gnu.org>
1142+author: Bryan O'Sullivan <bos@serpentine.com>
1143+homepage: https://github.com/haskell/text
1144+synopsis: An efficient packed Unicode text type.
1145+description:
1146+ An efficient packed, immutable Unicode text type (both strict and
1147+ lazy), with a powerful loop fusion optimization framework.
1148+ The 'Text' type represents Unicode character strings, in a time and
1149+ space-efficient manner. This package provides text processing
1150+ capabilities that are optimized for performance critical use, both
1151+ in terms of large data quantities and high speed.
1152+ The 'Text' type provides character-encoding, type-safe case
1153+ conversion via whole-string case conversion functions (see "Data.Text").
1154+ It also provides a range of functions for converting 'Text' values to
1155+ and from 'ByteStrings', using several standard encodings
1156+ (see "Data.Text.Encoding").
1157+ Efficient locale-sensitive support for text IO is also supported
1158+ (see "Data.Text.IO").
1159+ These modules are intended to be imported qualified, to avoid name
1160+ clashes with Prelude functions, e.g.
1161+ > import qualified Data.Text as T
1162+ To use an extended and very rich family of functions for working
1163+ with Unicode text (including normalization, regular expressions,
1164+ non-standard encodings, text breaking, and locales), see
1165+ the [text-icu package](https://hackage.haskell.org/package/text-icu)
1166+ based on the well-respected and liberally
1167+ licensed [ICU library](http://site.icu-project.org/).
1168+category: Data, Text
1169+exposed: True
1170+exposed-modules:
1171+ Data.Text Data.Text.Array Data.Text.Encoding
1172+ Data.Text.Encoding.Error Data.Text.Foreign Data.Text.IO
1173+ Data.Text.Internal Data.Text.Internal.Builder
1174+ Data.Text.Internal.Builder.Functions
1175+ Data.Text.Internal.Builder.Int.Digits
1176+ Data.Text.Internal.Builder.RealFloat.Functions
1177+ Data.Text.Internal.Encoding.Fusion
1178+ Data.Text.Internal.Encoding.Fusion.Common
1179+ Data.Text.Internal.Encoding.Utf16 Data.Text.Internal.Encoding.Utf32
1180+ Data.Text.Internal.Encoding.Utf8 Data.Text.Internal.Functions
1181+ Data.Text.Internal.Fusion Data.Text.Internal.Fusion.CaseMapping
1182+ Data.Text.Internal.Fusion.Common Data.Text.Internal.Fusion.Size
1183+ Data.Text.Internal.Fusion.Types Data.Text.Internal.IO
1184+ Data.Text.Internal.Lazy Data.Text.Internal.Lazy.Encoding.Fusion
1185+ Data.Text.Internal.Lazy.Fusion Data.Text.Internal.Lazy.Search
1186+ Data.Text.Internal.Private Data.Text.Internal.Read
1187+ Data.Text.Internal.Search Data.Text.Internal.Unsafe
1188+ Data.Text.Internal.Unsafe.Char Data.Text.Internal.Unsafe.Shift
1189+ Data.Text.Lazy Data.Text.Lazy.Builder Data.Text.Lazy.Builder.Int
1190+ Data.Text.Lazy.Builder.RealFloat Data.Text.Lazy.Encoding
1191+ Data.Text.Lazy.IO Data.Text.Lazy.Internal Data.Text.Lazy.Read
1192+ Data.Text.Read Data.Text.Unsafe
1193+hidden-modules: Data.Text.Show
1194+import-dirs:
1195+library-dirs:
1196+dynamic-library-dirs:
1197+data-dir:
1198+hs-libraries: HStext-1.2.3.2
1199+depends:
1200+ array-0.5.4.0 base-4.14.1.0 binary-0.8.8.0 bytestring-0.10.10.0
1201+ deepseq-1.4.4.0 ghc-prim-0.6.1 integer-gmp-1.0.3.0
1202+haddock-interfaces:
1203+haddock-html:
1204+---
1205+name: time
1206+version: 1.9.3
1207+visibility: public
1208+id: time-1.9.3
1209+key: time-1.9.3
1210+license: BSD-3-Clause
1211+maintainer: <ashley@semantic.org>
1212+author: Ashley Yakeley
1213+stability: stable
1214+homepage: https://github.com/haskell/time
1215+synopsis: A time library
1216+description: Time, clocks and calendars
1217+category: Time
1218+exposed: True
1219+exposed-modules:
1220+ Data.Time Data.Time.Calendar Data.Time.Calendar.Easter
1221+ Data.Time.Calendar.Julian Data.Time.Calendar.MonthDay
1222+ Data.Time.Calendar.OrdinalDate Data.Time.Calendar.WeekDate
1223+ Data.Time.Clock Data.Time.Clock.POSIX Data.Time.Clock.System
1224+ Data.Time.Clock.TAI Data.Time.Format Data.Time.Format.ISO8601
1225+ Data.Time.Format.Internal Data.Time.LocalTime
1226+hidden-modules:
1227+ Data.Format Data.Time.Calendar.Private Data.Time.Calendar.Days
1228+ Data.Time.Calendar.Gregorian Data.Time.Calendar.CalendarDiffDays
1229+ Data.Time.Calendar.Week Data.Time.Calendar.JulianYearDay
1230+ Data.Time.Clock.Internal.DiffTime
1231+ Data.Time.Clock.Internal.AbsoluteTime
1232+ Data.Time.Clock.Internal.NominalDiffTime
1233+ Data.Time.Clock.Internal.POSIXTime
1234+ Data.Time.Clock.Internal.UniversalTime
1235+ Data.Time.Clock.Internal.SystemTime
1236+ Data.Time.Clock.Internal.UTCTime Data.Time.Clock.Internal.CTimeval
1237+ Data.Time.Clock.Internal.CTimespec Data.Time.Clock.Internal.UTCDiff
1238+ Data.Time.LocalTime.Internal.TimeZone
1239+ Data.Time.LocalTime.Internal.TimeOfDay
1240+ Data.Time.LocalTime.Internal.CalendarDiffTime
1241+ Data.Time.LocalTime.Internal.LocalTime
1242+ Data.Time.LocalTime.Internal.ZonedTime Data.Time.Format.Parse
1243+ Data.Time.Format.Locale Data.Time.Format.Format.Class
1244+ Data.Time.Format.Format.Instances Data.Time.Format.Parse.Class
1245+ Data.Time.Format.Parse.Instances
1246+import-dirs:
1247+library-dirs:
1248+dynamic-library-dirs:
1249+data-dir:
1250+hs-libraries: HStime-1.9.3
1251+include-dirs:
1252+depends: base-4.14.1.0 deepseq-1.4.4.0
1253+haddock-interfaces:
1254+haddock-html:
1255+---
1256+name: transformers
1257+version: 0.5.6.2
1258+visibility: public
1259+id: transformers-0.5.6.2
1260+key: transformers-0.5.6.2
1261+license: BSD-3-Clause
1262+maintainer: Ross Paterson <R.Paterson@city.ac.uk>
1263+author: Andy Gill, Ross Paterson
1264+synopsis: Concrete functor and monad transformers
1265+description:
1266+ A portable library of functor and monad transformers, inspired by
1267+ the paper
1268+ * \"Functional Programming with Overloading and Higher-Order
1269+ Polymorphism\", by Mark P Jones,
1270+ in /Advanced School of Functional Programming/, 1995
1271+ (<http://web.cecs.pdx.edu/~mpj/pubs/springschool.html>).
1272+ This package contains:
1273+ * the monad transformer class (in "Control.Monad.Trans.Class")
1274+ * concrete functor and monad transformers, each with associated
1275+ operations and functions to lift operations associated with other
1276+ transformers.
1277+ The package can be used on its own in portable Haskell code, in
1278+ which case operations need to be manually lifted through transformer
1279+ stacks (see "Control.Monad.Trans.Class" for some examples).
1280+ Alternatively, it can be used with the non-portable monad classes in
1281+ the @mtl@ or @monads-tf@ packages, which automatically lift operations
1282+ introduced by monad transformers through other transformers.
1283+category: Control
1284+exposed: True
1285+exposed-modules:
1286+ Control.Applicative.Backwards Control.Applicative.Lift
1287+ Control.Monad.Signatures Control.Monad.Trans.Accum
1288+ Control.Monad.Trans.Class Control.Monad.Trans.Cont
1289+ Control.Monad.Trans.Error Control.Monad.Trans.Except
1290+ Control.Monad.Trans.Identity Control.Monad.Trans.List
1291+ Control.Monad.Trans.Maybe Control.Monad.Trans.RWS
1292+ Control.Monad.Trans.RWS.CPS Control.Monad.Trans.RWS.Lazy
1293+ Control.Monad.Trans.RWS.Strict Control.Monad.Trans.Reader
1294+ Control.Monad.Trans.Select Control.Monad.Trans.State
1295+ Control.Monad.Trans.State.Lazy Control.Monad.Trans.State.Strict
1296+ Control.Monad.Trans.Writer Control.Monad.Trans.Writer.CPS
1297+ Control.Monad.Trans.Writer.Lazy Control.Monad.Trans.Writer.Strict
1298+ Data.Functor.Constant Data.Functor.Reverse
1299+import-dirs:
1300+library-dirs:
1301+dynamic-library-dirs:
1302+data-dir:
1303+hs-libraries: HStransformers-0.5.6.2
1304+depends: base-4.14.1.0
1305+haddock-interfaces:
1306+haddock-html:
1307+---
1308+name: unix
1309+version: 2.7.2.2
1310+visibility: public
1311+id: unix-2.7.2.2
1312+key: unix-2.7.2.2
1313+license: BSD-3-Clause
1314+maintainer: libraries@haskell.org
1315+homepage: https://github.com/haskell/unix
1316+synopsis: POSIX functionality
1317+description:
1318+ This package gives you access to the set of operating system
1319+ services standardised by
1320+ <http://pubs.opengroup.org/onlinepubs/9699919799/ POSIX.1-2008>
1321+ (or the IEEE Portable Operating System Interface for Computing
1322+ Environments - IEEE Std. 1003.1).
1323+ The package is not supported under Windows.
1324+category: System
1325+exposed: True
1326+exposed-modules:
1327+ System.Posix System.Posix.ByteString
1328+ System.Posix.ByteString.FilePath System.Posix.Directory
1329+ System.Posix.Directory.ByteString System.Posix.DynamicLinker
1330+ System.Posix.DynamicLinker.ByteString
1331+ System.Posix.DynamicLinker.Module
1332+ System.Posix.DynamicLinker.Module.ByteString
1333+ System.Posix.DynamicLinker.Prim System.Posix.Env
1334+ System.Posix.Env.ByteString System.Posix.Error System.Posix.Fcntl
1335+ System.Posix.Files System.Posix.Files.ByteString System.Posix.IO
1336+ System.Posix.IO.ByteString System.Posix.Process
1337+ System.Posix.Process.ByteString System.Posix.Process.Internals
1338+ System.Posix.Resource System.Posix.Semaphore System.Posix.SharedMem
1339+ System.Posix.Signals System.Posix.Signals.Exts System.Posix.Temp
1340+ System.Posix.Temp.ByteString System.Posix.Terminal
1341+ System.Posix.Terminal.ByteString System.Posix.Time
1342+ System.Posix.Unistd System.Posix.User
1343+hidden-modules:
1344+ System.Posix.Directory.Common System.Posix.DynamicLinker.Common
1345+ System.Posix.Files.Common System.Posix.IO.Common
1346+ System.Posix.Process.Common System.Posix.Terminal.Common
1347+import-dirs:
1348+library-dirs:
1349+dynamic-library-dirs:
1350+data-dir:
1351+hs-libraries: HSunix-2.7.2.2
1352+extra-libraries: rt util dl pthread
1353+include-dirs:
1354+includes: HsUnix.h execvpe.h
1355+depends: base-4.14.1.0 bytestring-0.10.10.0 time-1.9.3
1356+haddock-interfaces:
1357+haddock-html:
1358+---
1359+name: rts
1360+version: 1.0
1361+visibility: public
1362+id: rts
1363+key: rts
1364+license: BSD-3-Clause
1365+maintainer: glasgow-haskell-users@haskell.org
1366+exposed: True
1367+library-dirs:
1368+hs-libraries: HSrts
1369+extra-libraries: m rt dl ffi numa pthread
1370+include-dirs:
1371+includes: Stg.h
1372+ld-options:
1373+ "-Wl,-u,base_GHCziTopHandler_runIO_closure"
1374+ "-Wl,-u,base_GHCziTopHandler_runNonIO_closure"
1375+ "-Wl,-u,ghczmprim_GHCziTuple_Z0T_closure"
1376+ "-Wl,-u,ghczmprim_GHCziTypes_True_closure"
1377+ "-Wl,-u,ghczmprim_GHCziTypes_False_closure"
1378+ "-Wl,-u,base_GHCziPack_unpackCString_closure"
1379+ "-Wl,-u,base_GHCziWeak_runFinalizzerBatch_closure"
1380+ "-Wl,-u,base_GHCziIOziException_stackOverflow_closure"
1381+ "-Wl,-u,base_GHCziIOziException_heapOverflow_closure"
1382+ "-Wl,-u,base_GHCziIOziException_allocationLimitExceeded_closure"
1383+ "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnMVar_closure"
1384+ "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnSTM_closure"
1385+ "-Wl,-u,base_GHCziIOziException_cannotCompactFunction_closure"
1386+ "-Wl,-u,base_GHCziIOziException_cannotCompactPinned_closure"
1387+ "-Wl,-u,base_GHCziIOziException_cannotCompactMutable_closure"
1388+ "-Wl,-u,base_ControlziExceptionziBase_absentSumFieldError_closure"
1389+ "-Wl,-u,base_ControlziExceptionziBase_nonTermination_closure"
1390+ "-Wl,-u,base_ControlziExceptionziBase_nestedAtomically_closure"
1391+ "-Wl,-u,base_GHCziEventziThread_blockedOnBadFD_closure"
1392+ "-Wl,-u,base_GHCziConcziSync_runSparks_closure"
1393+ "-Wl,-u,base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
1394+ "-Wl,-u,base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
1395+ "-Wl,-u,base_GHCziConcziSignal_runHandlersPtr_closure"
1396+ "-Wl,-u,base_GHCziTopHandler_flushStdHandles_closure"
1397+ "-Wl,-u,base_GHCziTopHandler_runMainIO_closure"
1398+ "-Wl,-u,ghczmprim_GHCziTypes_Czh_con_info"
1399+ "-Wl,-u,ghczmprim_GHCziTypes_Izh_con_info"
1400+ "-Wl,-u,ghczmprim_GHCziTypes_Fzh_con_info"
1401+ "-Wl,-u,ghczmprim_GHCziTypes_Dzh_con_info"
1402+ "-Wl,-u,ghczmprim_GHCziTypes_Wzh_con_info"
1403+ "-Wl,-u,base_GHCziPtr_Ptr_con_info"
1404+ "-Wl,-u,base_GHCziPtr_FunPtr_con_info"
1405+ "-Wl,-u,base_GHCziInt_I8zh_con_info"
1406+ "-Wl,-u,base_GHCziInt_I16zh_con_info"
1407+ "-Wl,-u,base_GHCziInt_I32zh_con_info"
1408+ "-Wl,-u,base_GHCziInt_I64zh_con_info"
1409+ "-Wl,-u,base_GHCziWord_W8zh_con_info"
1410+ "-Wl,-u,base_GHCziWord_W16zh_con_info"
1411+ "-Wl,-u,base_GHCziWord_W32zh_con_info"
1412+ "-Wl,-u,base_GHCziWord_W64zh_con_info"
1413+ "-Wl,-u,base_GHCziStable_StablePtr_con_info"
1414+ "-Wl,-u,hs_atomic_add8" "-Wl,-u,hs_atomic_add16"
1415+ "-Wl,-u,hs_atomic_add32" "-Wl,-u,hs_atomic_add64"
1416+ "-Wl,-u,hs_atomic_sub8" "-Wl,-u,hs_atomic_sub16"
1417+ "-Wl,-u,hs_atomic_sub32" "-Wl,-u,hs_atomic_sub64"
1418+ "-Wl,-u,hs_atomic_and8" "-Wl,-u,hs_atomic_and16"
1419+ "-Wl,-u,hs_atomic_and32" "-Wl,-u,hs_atomic_and64"
1420+ "-Wl,-u,hs_atomic_nand8" "-Wl,-u,hs_atomic_nand16"
1421+ "-Wl,-u,hs_atomic_nand32" "-Wl,-u,hs_atomic_nand64"
1422+ "-Wl,-u,hs_atomic_or8" "-Wl,-u,hs_atomic_or16"
1423+ "-Wl,-u,hs_atomic_or32" "-Wl,-u,hs_atomic_or64"
1424+ "-Wl,-u,hs_atomic_xor8" "-Wl,-u,hs_atomic_xor16"
1425+ "-Wl,-u,hs_atomic_xor32" "-Wl,-u,hs_atomic_xor64"
1426+ "-Wl,-u,hs_cmpxchg8" "-Wl,-u,hs_cmpxchg16" "-Wl,-u,hs_cmpxchg32"
1427+ "-Wl,-u,hs_cmpxchg64" "-Wl,-u,hs_atomicread8"
1428+ "-Wl,-u,hs_atomicread16" "-Wl,-u,hs_atomicread32"
1429+ "-Wl,-u,hs_atomicread64" "-Wl,-u,hs_atomicwrite8"
1430+ "-Wl,-u,hs_atomicwrite16" "-Wl,-u,hs_atomicwrite32"
1431+ "-Wl,-u,hs_atomicwrite64"
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc-pkg/versionnew file+1
@@ -0,0 +1 @@
1+GHC package manager version 8.10.2
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc/infonew file+67
@@ -0,0 +1,67 @@
1+ [("Project name","The Glorious Glasgow Haskell Compilation System")
2+ ,("GCC extra via C opts","")
3+ ,("C compiler flags","")
4+ ,("C++ compiler flags","")
5+ ,("C compiler link flags","-Wl,-z,noexecstack")
6+ ,("C compiler supports -no-pie","YES")
7+ ,("Haskell CPP flags","-E -undef -traditional")
8+ ,("ld flags","-z noexecstack")
9+ ,("ld supports compact unwind","YES")
10+ ,("ld supports build-id","YES")
11+ ,("ld supports filelist","NO")
12+ ,("ld is GNU ld","YES")
13+ ,("Merge objects flags","-r")
14+ ,("ar flags","q")
15+ ,("ar supports at file","YES")
16+ ,("touch command","touch")
17+ ,("dllwrap command","/bin/false")
18+ ,("windres command","/bin/false")
19+ ,("libtool command","libtool")
20+ ,("cross compiling","YES")
21+ ,("target platform string","aarch64-unknown-linux")
22+ ,("target os","OSLinux")
23+ ,("target arch","ArchARM64")
24+ ,("target word size","8")
25+ ,("target has GNU nonexec stack","YES")
26+ ,("target has .ident directive","YES")
27+ ,("target has subsections via symbols","NO")
28+ ,("target has RTS linker","YES")
29+ ,("Unregisterised","NO")
30+ ,("LLVM target","aarch64-unknown-linux")
31+ ,("LLVM llc command","llc")
32+ ,("LLVM opt command","opt")
33+ ,("LLVM clang command","clang")
34+ ,("integer library","integer-gmp")
35+ ,("Use interpreter","YES")
36+ ,("Use native code generator","NO")
37+ ,("Support SMP","YES")
38+ ,("RTS ways","l debug thr thr_debug thr_l thr_p thr_debug_p debug_p")
39+ ,("Tables next to code","YES")
40+ ,("Leading underscore","NO")
41+ ,("Use LibFFI","YES")
42+ ,("Use Threads","YES")
43+ ,("Use Debugging","NO")
44+ ,("RTS expects libdw","NO")
45+ ,("Project version","8.10.2")
46+ ,("Project Git commit id","29204b1c4f52ea34d84da33593052ee839293bf2")
47+ ,("Booter version","8.6.5")
48+ ,("Stage","1")
49+ ,("Build platform","x86_64-unknown-linux")
50+ ,("Host platform","x86_64-unknown-linux")
51+ ,("Target platform","aarch64-unknown-linux")
52+ ,("Have interpreter","YES")
53+ ,("Object splitting supported","NO")
54+ ,("Have native code generator","NO")
55+ ,("Support dynamic-too","YES")
56+ ,("Support parallel --make","YES")
57+ ,("Support reexported-modules","YES")
58+ ,("Support thinning and renaming package flags","YES")
59+ ,("Support Backpack","YES")
60+ ,("Requires unified installed package IDs","YES")
61+ ,("Uses package keys","YES")
62+ ,("Uses unit IDs","YES")
63+ ,("Dynamic by default","NO")
64+ ,("GHC Dynamic","NO")
65+ ,("GHC Profiled","NO")
66+ ,("Debug on","NO")
67+ ]
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc/numeric-versionnew file+1
@@ -0,0 +1 @@
1+8.10.2
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc/supported-languagesnew file+255
@@ -0,0 +1,255 @@
1+Haskell98
2+Haskell2010
3+Unsafe
4+Trustworthy
5+Safe
6+AllowAmbiguousTypes
7+NoAllowAmbiguousTypes
8+AlternativeLayoutRule
9+NoAlternativeLayoutRule
10+AlternativeLayoutRuleTransitional
11+NoAlternativeLayoutRuleTransitional
12+Arrows
13+NoArrows
14+AutoDeriveTypeable
15+NoAutoDeriveTypeable
16+BangPatterns
17+NoBangPatterns
18+BinaryLiterals
19+NoBinaryLiterals
20+CApiFFI
21+NoCApiFFI
22+CPP
23+NoCPP
24+CUSKs
25+NoCUSKs
26+ConstrainedClassMethods
27+NoConstrainedClassMethods
28+ConstraintKinds
29+NoConstraintKinds
30+DataKinds
31+NoDataKinds
32+DatatypeContexts
33+NoDatatypeContexts
34+DefaultSignatures
35+NoDefaultSignatures
36+DeriveAnyClass
37+NoDeriveAnyClass
38+DeriveDataTypeable
39+NoDeriveDataTypeable
40+DeriveFoldable
41+NoDeriveFoldable
42+DeriveFunctor
43+NoDeriveFunctor
44+DeriveGeneric
45+NoDeriveGeneric
46+DeriveLift
47+NoDeriveLift
48+DeriveTraversable
49+NoDeriveTraversable
50+DerivingStrategies
51+NoDerivingStrategies
52+DerivingVia
53+NoDerivingVia
54+DisambiguateRecordFields
55+NoDisambiguateRecordFields
56+DoAndIfThenElse
57+NoDoAndIfThenElse
58+BlockArguments
59+NoBlockArguments
60+DoRec
61+NoDoRec
62+DuplicateRecordFields
63+NoDuplicateRecordFields
64+EmptyCase
65+NoEmptyCase
66+EmptyDataDecls
67+NoEmptyDataDecls
68+EmptyDataDeriving
69+NoEmptyDataDeriving
70+ExistentialQuantification
71+NoExistentialQuantification
72+ExplicitForAll
73+NoExplicitForAll
74+ExplicitNamespaces
75+NoExplicitNamespaces
76+ExtendedDefaultRules
77+NoExtendedDefaultRules
78+FlexibleContexts
79+NoFlexibleContexts
80+FlexibleInstances
81+NoFlexibleInstances
82+ForeignFunctionInterface
83+NoForeignFunctionInterface
84+FunctionalDependencies
85+NoFunctionalDependencies
86+GADTSyntax
87+NoGADTSyntax
88+GADTs
89+NoGADTs
90+GHCForeignImportPrim
91+NoGHCForeignImportPrim
92+GeneralizedNewtypeDeriving
93+NoGeneralizedNewtypeDeriving
94+GeneralisedNewtypeDeriving
95+NoGeneralisedNewtypeDeriving
96+ImplicitParams
97+NoImplicitParams
98+ImplicitPrelude
99+NoImplicitPrelude
100+ImportQualifiedPost
101+NoImportQualifiedPost
102+ImpredicativeTypes
103+NoImpredicativeTypes
104+IncoherentInstances
105+NoIncoherentInstances
106+TypeFamilyDependencies
107+NoTypeFamilyDependencies
108+InstanceSigs
109+NoInstanceSigs
110+ApplicativeDo
111+NoApplicativeDo
112+InterruptibleFFI
113+NoInterruptibleFFI
114+JavaScriptFFI
115+NoJavaScriptFFI
116+KindSignatures
117+NoKindSignatures
118+LambdaCase
119+NoLambdaCase
120+LiberalTypeSynonyms
121+NoLiberalTypeSynonyms
122+MagicHash
123+NoMagicHash
124+MonadComprehensions
125+NoMonadComprehensions
126+MonadFailDesugaring
127+NoMonadFailDesugaring
128+MonoLocalBinds
129+NoMonoLocalBinds
130+MonoPatBinds
131+NoMonoPatBinds
132+MonomorphismRestriction
133+NoMonomorphismRestriction
134+MultiParamTypeClasses
135+NoMultiParamTypeClasses
136+MultiWayIf
137+NoMultiWayIf
138+NumericUnderscores
139+NoNumericUnderscores
140+NPlusKPatterns
141+NoNPlusKPatterns
142+NamedFieldPuns
143+NoNamedFieldPuns
144+NamedWildCards
145+NoNamedWildCards
146+NegativeLiterals
147+NoNegativeLiterals
148+HexFloatLiterals
149+NoHexFloatLiterals
150+NondecreasingIndentation
151+NoNondecreasingIndentation
152+NullaryTypeClasses
153+NoNullaryTypeClasses
154+NumDecimals
155+NoNumDecimals
156+OverlappingInstances
157+NoOverlappingInstances
158+OverloadedLabels
159+NoOverloadedLabels
160+OverloadedLists
161+NoOverloadedLists
162+OverloadedStrings
163+NoOverloadedStrings
164+PackageImports
165+NoPackageImports
166+ParallelArrays
167+NoParallelArrays
168+ParallelListComp
169+NoParallelListComp
170+PartialTypeSignatures
171+NoPartialTypeSignatures
172+PatternGuards
173+NoPatternGuards
174+PatternSignatures
175+NoPatternSignatures
176+PatternSynonyms
177+NoPatternSynonyms
178+PolyKinds
179+NoPolyKinds
180+PolymorphicComponents
181+NoPolymorphicComponents
182+QuantifiedConstraints
183+NoQuantifiedConstraints
184+PostfixOperators
185+NoPostfixOperators
186+QuasiQuotes
187+NoQuasiQuotes
188+Rank2Types
189+NoRank2Types
190+RankNTypes
191+NoRankNTypes
192+RebindableSyntax
193+NoRebindableSyntax
194+RecordPuns
195+NoRecordPuns
196+RecordWildCards
197+NoRecordWildCards
198+RecursiveDo
199+NoRecursiveDo
200+RelaxedLayout
201+NoRelaxedLayout
202+RelaxedPolyRec
203+NoRelaxedPolyRec
204+RoleAnnotations
205+NoRoleAnnotations
206+ScopedTypeVariables
207+NoScopedTypeVariables
208+StandaloneDeriving
209+NoStandaloneDeriving
210+StarIsType
211+NoStarIsType
212+StaticPointers
213+NoStaticPointers
214+Strict
215+NoStrict
216+StrictData
217+NoStrictData
218+TemplateHaskell
219+NoTemplateHaskell
220+TemplateHaskellQuotes
221+NoTemplateHaskellQuotes
222+StandaloneKindSignatures
223+NoStandaloneKindSignatures
224+TraditionalRecordSyntax
225+NoTraditionalRecordSyntax
226+TransformListComp
227+NoTransformListComp
228+TupleSections
229+NoTupleSections
230+TypeApplications
231+NoTypeApplications
232+TypeInType
233+NoTypeInType
234+TypeFamilies
235+NoTypeFamilies
236+TypeOperators
237+NoTypeOperators
238+TypeSynonymInstances
239+NoTypeSynonymInstances
240+UnboxedTuples
241+NoUnboxedTuples
242+UnboxedSums
243+NoUnboxedSums
244+UndecidableInstances
245+NoUndecidableInstances
246+UndecidableSuperClasses
247+NoUndecidableSuperClasses
248+UnicodeSyntax
249+NoUnicodeSyntax
250+UnliftedFFITypes
251+NoUnliftedFFITypes
252+UnliftedNewtypes
253+NoUnliftedNewtypes
254+ViewPatterns
255+NoViewPatterns
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.2-x86_64-linux/ghc/versionnew file+1
@@ -0,0 +1 @@
1+The Glorious Glasgow Haskell Compilation System, version 8.10.2
materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc-pkg/dump-globalnew file+1443

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc-pkg/dump-globalnew file+1443

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/dump-globalnew file+1446

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.4.20210212-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc-pkg/dump-globalnew file+1443

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc-pkg/dump-globalnew file+1443

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc/infonew file+67

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.6-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc-pkg/dump-globalnew file+1443

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc/infonew file+67

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.10.7-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc-pkg/dump-globalnew file+1221

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.6.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc-pkg/dump-globalnew file+1403

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc-pkg/dump-globalnew file+1404

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc/infonew file+55

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-8.8.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc-pkg/dump-globalnew file+1485

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc/infonew file+70

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.0.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc-pkg/dump-globalnew file+1512

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc/infonew file+66

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc/supported-languagesnew file+268

This diff is too big to show here.

materialized/dummy-ghc/aarch64-unknown-linux-gnu-aarch64-unknown-linux-gnu-ghc-9.2.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc-pkg/dump-globalnew file+1625

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc/infonew file+66

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc-pkg/dump-globalnew file+1625

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc/infonew file+66

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc-pkg/dump-globalnew file+1626

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc/infonew file+67

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc-pkg/dump-globalnew file+1627

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc-pkg/dump-globalnew file+1642

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/dump-globalnew file+1643

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.4.20210212-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.6-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc-pkg/dump-globalnew file+1639

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc/infonew file+75

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.10.7-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc-pkg/dump-globalnew file+1469

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc/supported-languagesnew file+235

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc-pkg/dump-globalnew file+1471

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc/supported-languagesnew file+235

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.4.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc-pkg/dump-globalnew file+1386

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc-pkg/dump-globalnew file+1386

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.6.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc/infonew file+60

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc-pkg/dump-globalnew file+1592

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc/infonew file+60

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc-pkg/dump-globalnew file+1592

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc/infonew file+62

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/ghc-8.8.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc-pkg/dump-globalnew file+1759

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc/infonew file+74

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc-pkg/dump-globalnew file+1760

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc/infonew file+74

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc-pkg/dump-globalnew file+1759

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc/infonew file+76

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc-pkg/dump-globalnew file+1760

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc/infonew file+76

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc-pkg/dump-globalnew file+1766

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc/infonew file+74

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc-pkg/dump-globalnew file+1767

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc/infonew file+74

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc-pkg/dump-globalnew file+1766

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc/infonew file+76

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc-pkg/dump-globalnew file+1767

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc/infonew file+76

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.0.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc-pkg/dump-globalnew file+1826

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc-pkg/dump-globalnew file+1826

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc-pkg/dump-globalnew file+1826

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc-pkg/dump-globalnew file+1826

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc/infonew file+73

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc/supported-languagesnew file+266

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc/supported-languagesnew file+268

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc-pkg/dump-globalnew file+1833

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc/supported-languagesnew file+268

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-aarch64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc-pkg/dump-globalnew file+1834

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc/supported-languagesnew file+268

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc-pkg/dump-globalnew file+1833

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc/infonew file+72

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc/supported-languagesnew file+268

This diff is too big to show here.

materialized/dummy-ghc/ghc-9.2.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc-pkg/dump-globalnew file+1328

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc-pkg/dump-globalnew file+1328

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.6-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc-pkg/dump-globalnew file+1330

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/infonew file+71

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.10.7-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc-pkg/dump-globalnew file+1183

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/infonew file+58

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc-pkg/dump-globalnew file+1122

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/infonew file+59

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.6.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc-pkg/dump-globalnew file+1321

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/infonew file+59

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-darwin/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc-pkg/dump-globalnew file+1321

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/infonew file+59

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc-pkg/dump-globalnew file+1321

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc-pkg/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/infonew file+59

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/numeric-ghc-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/numeric-ghcjs-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/js-unknown-ghcjs-js-unknown-ghcjs-ghc-8.8.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc-pkg/dump-globalnew file+1589

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc/infonew file+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc/infonew file+67

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc-pkg/dump-globalnew file+1603

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/dump-globalnew file+1607

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.4.20210212-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.6-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc-pkg/dump-globalnew file+1638

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc/infonew file+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc/supported-languagesnew file+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.10.7-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc-pkg/dump-globalnew file+1384

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.6.5-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc-pkg/dump-globalnew file+1590

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc-pkg/dump-globalnew file+1590

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.3-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc-pkg/dump-globalnew file+1591

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc/infonew file+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc/supported-languagesnew file+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-8.8.4-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc-pkg/dump-globalnew file+1722

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc/infonew file+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.1-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc-pkg/dump-globalnew file+1729

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc-pkg/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc/infonew file+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc/numeric-versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc/supported-languagesnew file+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.0.2-x86_64-linux/ghc/versionnew file+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc-pkg/dump-global+1788

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc/info+67

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.1-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc-pkg/dump-global+1796

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.2-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc-pkg/dump-global+1796

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.3-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc-pkg/dump-global+1796

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc/supported-languages+268

This diff is too big to show here.

materialized/dummy-ghc/x86_64-unknown-linux-musl-x86_64-unknown-linux-musl-ghc-9.2.4-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc-pkg/dump-global+1437

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc/info+67

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.2-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc-pkg/dump-global+1449

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.3-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc-pkg/dump-global+1449

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc-pkg/dump-global+1449

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/dump-global+1451

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.4.20210212-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc-pkg/dump-global+1449

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc-pkg/dump-global+1449

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.5-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc-pkg/dump-global+1450

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc-pkg/dump-global+1450

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.6-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc-pkg/dump-global+1450

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc-pkg/dump-global+1450

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc/info+69

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc/supported-languages+255

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.10.7-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc-pkg/dump-global+1228

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.6.5-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.2-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.3-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc-pkg/dump-global+1411

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc/info+57

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc/supported-languages+247

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-8.8.4-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc-pkg/dump-global+1504

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc/info+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc/supported-languages+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc-pkg/dump-global+1504

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc/info+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc/supported-languages+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.1-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc-pkg/dump-global+1512

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc/info+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc/supported-languages+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc-pkg/dump-global+1512

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc/info+70

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc/supported-languages+261

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.0.2-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc-pkg/dump-global+1522

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc/info+67

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc-pkg/dump-global+1522

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc/info+67

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.1-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.2-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc/supported-languages+266

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.3-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc/supported-languages+268

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-darwin/ghc/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc-pkg/dump-global+1533

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc-pkg/version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc/info+66

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc/numeric-version+1

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc/supported-languages+268

This diff is too big to show here.

materialized/dummy-ghc/x86_64-w64-mingw32-x86_64-w64-mingw32-ghc-9.2.4-x86_64-linux/ghc/version+1

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8101/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8102/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8103/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8104/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc810420210212/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8105/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8106/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/base.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/ghc.nix+62

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc8107/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/ghc.nix+58

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/ghci.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc844/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/ghc.nix+59

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc863/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc864/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc865/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc882/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883-aarch64/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/ghc-prim.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc883/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884-aarch64/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/Win32.nix+46

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/base.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/bytestring.nix+80

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/ghc-boot.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/hpc.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/integer-gmp.nix+33

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc884/template-haskell.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/Win32.nix+49

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/Win32.nix+49

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/ghci.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc901/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/bytestring.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghc-boot.nix+39

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghc-heap.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc902/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/bytestring.nix+86

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/bytestring.nix+86

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghc.nix+61

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc921/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/bytestring.nix+68

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/bytestring.nix+68

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc922/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/bytestring.nix+65

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/bytestring.nix+65

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc923/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/bytestring.nix+65

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghc-prim.nix+44

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924-aarch64/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/Win32.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/base.nix+48

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/bytestring.nix+65

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/deepseq.nix+47

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghc-bignum.nix+37

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghc-boot.nix+40

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghc-heap.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghc-prim.nix+43

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghc.nix+60

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/ghci.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/hpc.nix+38

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/integer-gmp.nix+35

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/iserv-proxy.nix+45

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/iserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/libiserv.nix+42

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/pretty.nix+56

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/remote-iserv.nix+36

This diff is too big to show here.

materialized/ghc-boot-packages-nix/ghc924/template-haskell.nix+36

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/ghc.nix+585

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8101/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8102/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8103/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8104/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc810420210212/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8105/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8106/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc8107/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/ghc.nix+556

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc865/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc882/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc883/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc884/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc901/default.nix+135

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc902/default.nix+136

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/ghc.nix+663

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc921/default.nix+143

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc922/default.nix+138

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc923/default.nix+138

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/cross/ghc924/default.nix+137

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/ghc.nix+585

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8101/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8102/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8103/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8104/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc810420210212/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8105/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8106/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc8107/default.nix+129

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/bytestring.nix+136

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/ghc-boot.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/ghc.nix+584

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/ghci.nix+69

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc844/default.nix+92

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/ghc.nix+555

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc863/default.nix+126

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/ghc.nix+556

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc864/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/ghc.nix+556

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc865/default.nix+127

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc882/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc883/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc884/default.nix+128

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc901/default.nix+136

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc902/default.nix+136

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/ghc.nix+663

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc921/default.nix+144

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc922/default.nix+138

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc923/default.nix+138

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/default/ghc924/default.nix+138

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8105/default.nix+131

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8106/default.nix+131

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc8107/default.nix+131

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/ghc.nix+554

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc865/default.nix+123

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/ghcjs/ghc884/default.nix+125

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/ghc.nix+585

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8101/default.nix+120

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8102/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8103/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8104/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc810420210212/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8105/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8106/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/ghc-boot.nix+60

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/ghc.nix+586

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc8107/default.nix+121

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/ghc.nix+555

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc863/default.nix+118

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/ghc.nix+556

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc864/default.nix+119

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/ghc.nix+556

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc865/default.nix+119

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc882/default.nix+120

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc883/default.nix+120

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/Win32.nix+155

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/ghc-boot.nix+53

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/ghc.nix+573

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/hpc.nix+51

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc884/default.nix+120

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc901/default.nix+132

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/ghc-boot.nix+61

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/ghc.nix+572

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/ghci.nix+71

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc902/default.nix+132

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/ghc.nix+663

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc921/default.nix+140

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc922/default.nix+134

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc923/default.nix+134

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/Win32.nix+158

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/ghc-boot.nix+64

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/ghc.nix+661

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/ghci.nix+70

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/hpc.nix+52

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/iserv-proxy.nix+55

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/iserv.nix+54

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/libiserv.nix+58

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/.plan.nix/remote-iserv.nix+46

This diff is too big to show here.

materialized/ghc-extra-projects/windows/ghc924/default.nix+134

This diff is too big to show here.

materialized/ghc8101/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8101/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8102/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8102/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8102/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8102/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8102/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc8103/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8103/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8103/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8103/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8103/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc8104/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8104/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8104/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8104/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8104/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc810420210212/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc810420210212/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc810420210212/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc810420210212/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc810420210212/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc8105/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8105/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8105/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8105/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8105/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc8106/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8106/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8106/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8106/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8106/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc8107/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc8107/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc8107/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc8107/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc8107/nix-tools/default.nix+518

This diff is too big to show here.

materialized/ghc863/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc863/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc863/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc863/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc863/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc864/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc864/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc864/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc864/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc864/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc865/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc865/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc865/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc865/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc865/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc882/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc882/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc882/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc882/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc882/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc883/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc883/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc883/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc883/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc883/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc884/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc884/cabal-install/default.nix+180

This diff is too big to show here.

materialized/ghc884/nix-tools/.plan.nix/hackage-db.nix+110

This diff is too big to show here.

materialized/ghc884/nix-tools/.plan.nix/nix-tools.nix+234

This diff is too big to show here.

materialized/ghc884/nix-tools/default.nix+509

This diff is too big to show here.

materialized/ghc901/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc901/cabal-install/default.nix+178

This diff is too big to show here.

materialized/ghc902/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc902/cabal-install/default.nix+183

This diff is too big to show here.

materialized/ghc921/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc921/cabal-install/default.nix+174

This diff is too big to show here.

materialized/ghc922/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc922/cabal-install/default.nix+174

This diff is too big to show here.

materialized/ghc923/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc923/cabal-install/default.nix+174

This diff is too big to show here.

materialized/ghc924/cabal-install/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghc924/cabal-install/default.nix+174

This diff is too big to show here.

materialized/ghcjs/alex/ghc8104/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc8104/default.nix+47

This diff is too big to show here.

materialized/ghcjs/alex/ghc8105/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc8105/default.nix+65

This diff is too big to show here.

materialized/ghcjs/alex/ghc8106/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc8106/default.nix+65

This diff is too big to show here.

materialized/ghcjs/alex/ghc8107/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc8107/default.nix+65

This diff is too big to show here.

materialized/ghcjs/alex/ghc865/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc865/default.nix+65

This diff is too big to show here.

materialized/ghcjs/alex/ghc884/.plan.nix/alex.nix+160

This diff is too big to show here.

materialized/ghcjs/alex/ghc884/default.nix+65

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8104/.plan.nix/cabal-install.nix+361

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8104/default.nix+128

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8105/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8105/default.nix+180

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8106/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8106/default.nix+180

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8107/.plan.nix/cabal-install.nix+292

This diff is too big to show here.

materialized/ghcjs/cabal/ghc8107/default.nix+180

This diff is too big to show here.

materialized/ghcjs/cabal/ghc865/.plan.nix/cabal-install.nix+340

This diff is too big to show here.

materialized/ghcjs/cabal/ghc865/default.nix+173

This diff is too big to show here.

materialized/ghcjs/cabal/ghc884/.plan.nix/cabal-install.nix+340

This diff is too big to show here.

materialized/ghcjs/cabal/ghc884/default.nix+173

This diff is too big to show here.

materialized/ghcjs/ghc8104/.plan.nix/ghcjs-th.nix+48

This diff is too big to show here.

materialized/ghcjs/ghc8104/.plan.nix/ghcjs.nix+985

This diff is too big to show here.

materialized/ghcjs/ghc8104/default.nix+379

This diff is too big to show here.

materialized/ghcjs/ghc8105/.plan.nix/ghcjs-th.nix+48

This diff is too big to show here.

materialized/ghcjs/ghc8105/.plan.nix/ghcjs.nix+985

This diff is too big to show here.

materialized/ghcjs/ghc8105/default.nix+576

This diff is too big to show here.

materialized/ghcjs/ghc8106/.plan.nix/ghcjs-th.nix+48

This diff is too big to show here.

materialized/ghcjs/ghc8106/.plan.nix/ghcjs.nix+985

This diff is too big to show here.

materialized/ghcjs/ghc8106/default.nix+576

This diff is too big to show here.

materialized/ghcjs/ghc8107/.plan.nix/ghcjs-th.nix+48

This diff is too big to show here.

materialized/ghcjs/ghc8107/.plan.nix/ghcjs.nix+985

This diff is too big to show here.

materialized/ghcjs/ghc8107/default.nix+576

This diff is too big to show here.

materialized/ghcjs/ghc865/.plan.nix/ghci-ghcjs.nix+70

This diff is too big to show here.

materialized/ghcjs/ghc865/.plan.nix/ghcjs-th.nix+58

This diff is too big to show here.

materialized/ghcjs/ghc865/.plan.nix/ghcjs.nix+987

This diff is too big to show here.

materialized/ghcjs/ghc865/.plan.nix/haddock-library-ghcjs.nix+103

This diff is too big to show here.

materialized/ghcjs/ghc865/.plan.nix/template-haskell-ghcjs.nix+54

This diff is too big to show here.

materialized/ghcjs/ghc865/default.nix+636

This diff is too big to show here.

materialized/ghcjs/ghc884/.plan.nix/ghcjs-th.nix+52

This diff is too big to show here.

materialized/ghcjs/ghc884/.plan.nix/ghcjs.nix+981

This diff is too big to show here.

materialized/ghcjs/ghc884/default.nix+581

This diff is too big to show here.

materialized/ghcjs/happy/ghc8104/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc8104/default.nix+41

This diff is too big to show here.

materialized/ghcjs/happy/ghc8105/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc8105/default.nix+56

This diff is too big to show here.

materialized/ghcjs/happy/ghc8106/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc8106/default.nix+56

This diff is too big to show here.

materialized/ghcjs/happy/ghc8107/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc8107/default.nix+56

This diff is too big to show here.

materialized/ghcjs/happy/ghc865/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc865/default.nix+56

This diff is too big to show here.

materialized/ghcjs/happy/ghc884/.plan.nix/happy.nix+200

This diff is too big to show here.

materialized/ghcjs/happy/ghc884/default.nix+56

This diff is too big to show here.

materialized/hscolour/.plan.nix/hscolour.nix+70

This diff is too big to show here.

materialized/hscolour/default.nix+33

This diff is too big to show here.

materialized/spdx-3.12/licenses.json+5622

This diff is too big to show here.

materialized/spdx-3.14/licenses.json+5937

This diff is too big to show here.

materialized/spdx-3.16/licenses.json+6090

This diff is too big to show here.

materialized/spdx-3.17/licenses.json+6155

This diff is too big to show here.

mk-local-hackage-repo/default.nix+55

This diff is too big to show here.

mk-local-hackage-repo/mirrors.json+9

This diff is too big to show here.

mk-local-hackage-repo/root.json+34

This diff is too big to show here.

mk-local-hackage-repo/snapshot.json+31

This diff is too big to show here.

mk-local-hackage-repo/timestamp.json+17

This diff is too big to show here.

mkdocs.yml+59

This diff is too big to show here.

modules/cabal-project.nix+134

This diff is too big to show here.

modules/cabal.nix+35

This diff is too big to show here.

modules/compat-driver.nix+19

This diff is too big to show here.

modules/component-driver.nix+103

This diff is too big to show here.

modules/configuration-nix.nix+123

This diff is too big to show here.

modules/error-handler.nix+49

This diff is too big to show here.

modules/hackage-project.nix+60

This diff is too big to show here.

modules/hackage-quirks.nix+88

This diff is too big to show here.

modules/hackage.nix+89

This diff is too big to show here.

modules/hix-project.nix+47

This diff is too big to show here.

modules/package.nix+360

This diff is too big to show here.

modules/plan.nix+322

This diff is too big to show here.

modules/project-common.nix+65

This diff is too big to show here.

modules/project.nix+9

This diff is too big to show here.

modules/stack-project.nix+94

This diff is too big to show here.

overlays/android.nix+28

This diff is too big to show here.

overlays/armv6l-linux.nix+74

This diff is too big to show here.

overlays/bootstrap.nix+1163

This diff is too big to show here.

overlays/darwin.nix+21

This diff is too big to show here.

overlays/default.nix+61

This diff is too big to show here.

overlays/emscripten.nix+7

This diff is too big to show here.

overlays/emscripten/fastcomp/default.nix+28

This diff is too big to show here.

overlays/emscripten/upstream/default.nix+28

This diff is too big to show here.

overlays/ghc-packages.nix+236

This diff is too big to show here.

overlays/ghc.nix+36

This diff is too big to show here.

overlays/ghcjs-asterius-triple.nix+35

This diff is too big to show here.

overlays/ghcjs.nix+60

This diff is too big to show here.

overlays/gobject-introspection.nix+9

This diff is too big to show here.

overlays/haskell.nix+925

This diff is too big to show here.

overlays/hix.nix+51

This diff is too big to show here.

overlays/hydra.nix+9

This diff is too big to show here.

overlays/linux-cross.nix+79

This diff is too big to show here.

overlays/mingw_w64.nix+116

This diff is too big to show here.

overlays/musl.nix+35

This diff is too big to show here.

overlays/nix-prefetch-git-minimal.nix+45

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.0.0.0-drop-pkg-db-check.diff+20

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.0.0.0-no-final-checks.diff+24

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.4-defer-build-tool-depends-7532.patch+63

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.4-speedup-solver-when-tests-enabled-7490.patch+147

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.6.0.0-drop-pkg-db-check.diff+20

This diff is too big to show here.

overlays/patches/Cabal/Cabal-3.6.0.0-no-final-checks.diff+24

This diff is too big to show here.

overlays/patches/Cabal/fix-data-dir.patch+20

This diff is too big to show here.

overlays/patches/clock-0.7.2.patch+59

This diff is too big to show here.

overlays/patches/conduit-1.3.0.2.patch+15

This diff is too big to show here.

overlays/patches/config.guess+1702

This diff is too big to show here.

overlays/patches/config.sub+1865

This diff is too big to show here.

overlays/patches/cryptonite-openssl-0.7.patch+13

This diff is too big to show here.

overlays/patches/ghc-lib-parser-8.10-global-unique-counters-in-rts.patch+20

This diff is too big to show here.

overlays/patches/ghc-lib-parser-9.2-global-unique-counters-in-rts.patch+20

This diff is too big to show here.

overlays/patches/ghc/0001-Stop-the-linker-panic.patch+122

This diff is too big to show here.

overlays/patches/ghc/67738db10010fd28a8e997b5c8f83ea591b88a0e.patch+107

This diff is too big to show here.

overlays/patches/ghc/AC_PROG_CC_99.patch+13

This diff is too big to show here.

overlays/patches/ghc/Cabal-3886.patch+170

This diff is too big to show here.

overlays/patches/ghc/Cabal-unbreak-GHCJS.patch+20

This diff is too big to show here.

overlays/patches/ghc/Cabal2201-allow-test-wrapper.patch+72

This diff is too big to show here.

overlays/patches/ghc/Cabal2201-no-hackage-tests.patch+15

This diff is too big to show here.

overlays/patches/ghc/MR148--T16104-GhcPlugins.patch+21

This diff is too big to show here.

overlays/patches/ghc/MR196--ghc-pkg-shut-up.patch+13

This diff is too big to show here.

overlays/patches/ghc/MR2537-use-one-shot-kqueue-on-macos.patch+52

This diff is too big to show here.

overlays/patches/ghc/MR3214-writable-rel-ro-data.patch+13

This diff is too big to show here.

overlays/patches/ghc/MR3714-backported-to-8.10.2.patch+283

This diff is too big to show here.

overlays/patches/ghc/MR545--ghc-pkg-databases.patch+210

This diff is too big to show here.

overlays/patches/ghc/MR6595-nonmoving-mutvar.patch+521

This diff is too big to show here.

overlays/patches/ghc/MR6617-nonmoving-mvar.patch+174

This diff is too big to show here.

overlays/patches/ghc/MR6654-nonmoving-maxmem.patch+31

This diff is too big to show here.

overlays/patches/ghc/MR948--32bit-cross-th.patch+143

This diff is too big to show here.

overlays/patches/ghc/MR95--ghc-pkg-deadlock-fix.patch+61

This diff is too big to show here.

overlays/patches/ghc/Sphinx_Unicode_Error.patch+20

This diff is too big to show here.

overlays/patches/ghc/T16057--ghci-doa-on-windows.patch+70

This diff is too big to show here.

overlays/patches/ghc/android-base-needs-iconv.patch+14

This diff is too big to show here.

overlays/patches/ghc/bec76733b818b0489ffea0834ab6b1560207577c.patch+43

This diff is too big to show here.

overlays/patches/ghc/cabal-exe-ext-8.4.2.patch+440

This diff is too big to show here.

overlays/patches/ghc/cabal-host.patch+13

This diff is too big to show here.

overlays/patches/ghc/core-field.patch+958

This diff is too big to show here.

overlays/patches/ghc/dll-loader-8.4.2.patch+34

This diff is too big to show here.

overlays/patches/ghc/external-static-8.10.4.patch+219

This diff is too big to show here.

overlays/patches/ghc/ghc-8.0.2-darwin-rec-link.patch+13

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-3434.patch+68

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-darwin-gcc-version-fix.patch+11

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-global-unique-counters-in-rts.patch+55

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-ubxt.patch+1539

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-windows-add-dependent-file.patch+22

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10-z-drive-fix.patch+14

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.3-rts-make-markLiveObject-thread-safe.patch+63

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.3-ubxt.patch+7884

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.5-add-rts-exports.patch+26

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.5-darwin-allocateExec.patch+13

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.5-ubxt.patch+7884

This diff is too big to show here.

overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common.patch+189

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.3-Cabal2201-SMP-test-fix.patch+13

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.3-Cabal2201-allow-test-wrapper.patch+72

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.3-Cabal2201-no-hackage-tests.patch+15

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.3-Cabal2201-response-file-support.patch+59

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.4-backport-dylib-command-size-limit.patch+24

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.4-darwin-rec-link.patch+13

This diff is too big to show here.

overlays/patches/ghc/ghc-8.4.4-reinstallable-lib-ghc.patch+8701

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6-Cabal-fix-datadir.patch+21

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.1-iserv-changes.patch+811

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.3-reinstallable-lib-ghc.patch+5529

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.4-better-plusSimplCountErrors.patch+26

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.4-prim-no-arm-atomics.patch+14

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.4-reenable-th-qq-in-stage1.patch+19

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.4-reinstallable-lib-ghc.patch+4869

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.5-atomic-arm-arch.patch+12

This diff is too big to show here.

overlays/patches/ghc/ghc-8.6.5-reinstallable-lib-ghc.patch+4869

This diff is too big to show here.

overlays/patches/ghc/ghc-8.8-ubxt.patch+1127

This diff is too big to show here.

overlays/patches/ghc/ghc-8.8.1-reinstallable-lib-ghc.patch+5057

This diff is too big to show here.

overlays/patches/ghc/ghc-8.8.2-reinstallable-lib-ghc.patch+5023

This diff is too big to show here.

overlays/patches/ghc/ghc-9.0-macOS-loadArchive-fix.patch+9

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2-3434.patch+68

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2-Cabal-3886.patch+170

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2-cabal-host.patch+13

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2-global-unique-counters-in-rts.patch+83

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2-macOS-loadArchive-fix.patch+9

This diff is too big to show here.

overlays/patches/ghc/ghc-9.2.1-xattr-fix.patch+30

This diff is too big to show here.

overlays/patches/ghc/ghc-acrt-iob-func.patch+12

This diff is too big to show here.

overlays/patches/ghc/ghc-add-keepCAFs-to-rts.patch+12

This diff is too big to show here.

overlays/patches/ghc/ghc-darwin-gcc-version-fix.patch+11

This diff is too big to show here.

overlays/patches/ghc/ghc-macOS-loadArchive-fix.patch+9

This diff is too big to show here.

overlays/patches/ghc/ghc-mprotect-nonzero-len.patch+14

This diff is too big to show here.

overlays/patches/ghc/ghc-no-system-linker.patch+78

This diff is too big to show here.

overlays/patches/ghc/ghc-rts-linker-condbr.patch+73

This diff is too big to show here.

overlays/patches/ghc/global-offset-table-2.patch+26

This diff is too big to show here.

overlays/patches/ghc/global-offset-table.patch+100

This diff is too big to show here.

overlays/patches/ghc/hsc2hs-8.4.2.patch+1197

This diff is too big to show here.

overlays/patches/ghc/iserv-autoconf-8.4.1.patch+131

This diff is too big to show here.

overlays/patches/ghc/iserv-autoconf-8.6.1.patch+252

This diff is too big to show here.

overlays/patches/ghc/iserv-cleanup-8.8.1-prepare-8.4.1.patch+31

This diff is too big to show here.

overlays/patches/ghc/iserv-cleanup-8.8.1-revert-8.4.1.patch+26

This diff is too big to show here.

overlays/patches/ghc/iserv-cleanup-8.8.1.patch+869

This diff is too big to show here.

overlays/patches/ghc/iserv-move-8.4.1.patch+912

This diff is too big to show here.

overlays/patches/ghc/issue-18708.patch+39

This diff is too big to show here.

overlays/patches/ghc/libc-memory-symbols.patch+43

This diff is too big to show here.

overlays/patches/ghc/libraries-prim-os-android.patch+13

This diff is too big to show here.

overlays/patches/ghc/lowercase-8.4.2.patch+57

This diff is too big to show here.

overlays/patches/ghc/lowercase-8.6.patch+37

This diff is too big to show here.

overlays/patches/ghc/mistuke-ghc-err_clean_up_error_handler-8ab1a89af89848f1713e6849f189de66c0ed7898.diff+98

This diff is too big to show here.

overlays/patches/ghc/mmap-next.patch+70

This diff is too big to show here.

overlays/patches/ghc/noinline-set-bit-if.patch+12

This diff is too big to show here.

overlays/patches/ghc/outputtable-assert-8.4.patch+30

This diff is too big to show here.

overlays/patches/ghc/outputtable-assert-8.6.patch+13

This diff is too big to show here.

overlays/patches/ghc/respect-ar-path.patch+12

This diff is too big to show here.

overlays/patches/ghc/rts-android-jemalloc-qemu.patch+48

This diff is too big to show here.

overlays/patches/ghc/stack-protector-symbols.patch+67

This diff is too big to show here.

overlays/patches/ghc/various-8.4.2.patch+57

This diff is too big to show here.

overlays/patches/http-client-0.5.14.patch+18

This diff is too big to show here.

overlays/patches/streaming-commons-0.2.0.0.patch+15

This diff is too big to show here.

overlays/patches/x509-system-1.6.6.patch+13

This diff is too big to show here.

overlays/python.nix+11

This diff is too big to show here.

overlays/tools.nix+92

This diff is too big to show here.

overlays/windows.nix+121

This diff is too big to show here.

overlays/wine.nix+17

This diff is too big to show here.

package-set.nix+95−120

This diff is too big to show here.

patches/darcs-setup.patch+120

This diff is too big to show here.

patches/default.nix+12

This diff is too big to show here.

patches/ghc841/default.nix+2

This diff is too big to show here.

patches/ghc842/default.nix+2

This diff is too big to show here.

patches/ghc843/array-0.5.2.0.patch+13

This diff is too big to show here.

patches/ghc843/deepseq-1.4.3.0.patch+13

This diff is too big to show here.

patches/ghc843/default.nix+11

This diff is too big to show here.

patches/ghc843/hpc-0.6.0.3.patch+17

This diff is too big to show here.

patches/ghc843/parallel-3.2.1.1.patch+13

This diff is too big to show here.

patches/ghc843/parsec-3.1.13.0.patch+24

This diff is too big to show here.

patches/ghc843/random-1.1.patch+410

This diff is too big to show here.

patches/ghc843/time-1.8.0.2.patch+148

This diff is too big to show here.

patches/ghc843/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc843/vector-0.11.0.0.patch+526

This diff is too big to show here.

patches/ghc844/array-0.5.2.0.patch+13

This diff is too big to show here.

patches/ghc844/deepseq-1.4.3.0.patch+13

This diff is too big to show here.

patches/ghc844/default.nix+11

This diff is too big to show here.

patches/ghc844/hpc-0.6.0.3.patch+17

This diff is too big to show here.

patches/ghc844/parallel-3.2.1.1.patch+13

This diff is too big to show here.

patches/ghc844/parsec-3.1.13.0.patch+24

This diff is too big to show here.

patches/ghc844/random-1.1.patch+410

This diff is too big to show here.

patches/ghc844/time-1.8.0.2.patch+148

This diff is too big to show here.

patches/ghc844/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc844/vector-0.11.0.0.patch+526

This diff is too big to show here.

patches/ghc861/array-0.5.2.0.patch+308

This diff is too big to show here.

patches/ghc861/binary-0.8.6.0.patch+20

This diff is too big to show here.

patches/ghc861/containers-0.6.0.1.patch+117

This diff is too big to show here.

patches/ghc861/default.nix+11

This diff is too big to show here.

patches/ghc861/hpc-0.6.0.3.patch+18

This diff is too big to show here.

patches/ghc861/parsec-3.1.13.0.patch+36

This diff is too big to show here.

patches/ghc861/process-1.6.3.0.patch+160

This diff is too big to show here.

patches/ghc861/time-1.8.0.2.patch+148

This diff is too big to show here.

patches/ghc861/transformers-0.5.5.0.patch+544

This diff is too big to show here.

patches/ghc861/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc862/binary-0.8.6.0.patch+20

This diff is too big to show here.

patches/ghc862/containers-0.6.0.1.patch+117

This diff is too big to show here.

patches/ghc862/default.nix+11

This diff is too big to show here.

patches/ghc862/hpc-0.6.0.3.patch+18

This diff is too big to show here.

patches/ghc862/parsec-3.1.13.0.patch+36

This diff is too big to show here.

patches/ghc862/process-1.6.3.0.patch+160

This diff is too big to show here.

patches/ghc862/singletons-2.5.1.patch+22

This diff is too big to show here.

patches/ghc862/time-1.8.0.2.patch+148

This diff is too big to show here.

patches/ghc862/transformers-0.5.5.0.patch+544

This diff is too big to show here.

patches/ghc862/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc863/binary-0.8.6.0.patch+20

This diff is too big to show here.

patches/ghc863/containers-0.6.0.1.patch+117

This diff is too big to show here.

patches/ghc863/default.nix+11

This diff is too big to show here.

patches/ghc863/hpc-0.6.0.3.patch+18

This diff is too big to show here.

patches/ghc863/parsec-3.1.13.0.patch+36

This diff is too big to show here.

patches/ghc863/process-1.6.3.0.patch+160

This diff is too big to show here.

patches/ghc863/singletons-2.5.1.patch+22

This diff is too big to show here.

patches/ghc863/time-1.8.0.2.patch+148

This diff is too big to show here.

patches/ghc863/transformers-0.5.5.0.patch+544

This diff is too big to show here.

patches/ghc863/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc864/binary-0.8.6.0.patch+20

This diff is too big to show here.

patches/ghc864/containers-0.6.0.1.patch+117

This diff is too big to show here.

patches/ghc864/default.nix+8

This diff is too big to show here.

patches/ghc864/hpc-0.6.0.3.patch+18

This diff is too big to show here.

patches/ghc864/parsec-3.1.13.0.patch+36

This diff is too big to show here.

patches/ghc864/singletons-2.5.1.patch+22

This diff is too big to show here.

patches/ghc864/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghc865/binary-0.8.6.0.patch+20

This diff is too big to show here.

patches/ghc865/containers-0.6.0.1.patch+117

This diff is too big to show here.

patches/ghc865/default.nix+8

This diff is too big to show here.

patches/ghc865/hpc-0.6.0.3.patch+18

This diff is too big to show here.

patches/ghc865/parsec-3.1.13.0.patch+36

This diff is too big to show here.

patches/ghc865/singletons-2.5.1.patch+22

This diff is too big to show here.

patches/ghc865/unix-2.7.2.2.patch+111

This diff is too big to show here.

patches/ghcide-1.7-plutus-ghc.patch+13

This diff is too big to show here.

patches/ghcide-1.7-unboxed-tuple-fix-issue-1455.patch+76

This diff is too big to show here.

patches/hnix.patch+13

This diff is too big to show here.

patches/js-ghc8107/buffer-builder.patch+79

This diff is too big to show here.

patches/js-ghc8107/conduit-extra.patch+48

This diff is too big to show here.

patches/js-ghc8107/default.nix+7

This diff is too big to show here.

patches/js-ghc8107/double-conversion.patch+64

This diff is too big to show here.

patches/js-ghc8107/network.patch+16

This diff is too big to show here.

patches/js-ghc8107/say.patch+22

This diff is too big to show here.

patches/languge-c-int128.patch+146

This diff is too big to show here.

patches/update-patches.sh+15

This diff is too big to show here.

release-linux-only.nix+5

This diff is too big to show here.

release.nix+69

This diff is too big to show here.

scripts/check-closure-size.nix+29

This diff is too big to show here.

scripts/check-compiler-materialization/default.nix+48

This diff is too big to show here.

scripts/check-hydra.nix+42

This diff is too big to show here.

scripts/check-materialization-concurrency/check.nix+23

This diff is too big to show here.

scripts/check-materialization-concurrency/default.nix+28

This diff is too big to show here.

scripts/check-path-support.nix+13

This diff is too big to show here.

scripts/git.env+25

This diff is too big to show here.

scripts/options-doc.nix+61

This diff is too big to show here.

scripts/update-docs.nix+49

This diff is too big to show here.

scripts/update-external.nix+39

This diff is too big to show here.

scripts/update-hackage.nix+34

This diff is too big to show here.

scripts/update-index-state-hashes.nix+41

This diff is too big to show here.

scripts/update-pins.nix+28

This diff is too big to show here.

scripts/update-stackage.nix+27

This diff is too big to show here.

shell.nix+1

This diff is too big to show here.

snapshots.nix+76

This diff is too big to show here.

stackage-src.json+10

This diff is too big to show here.

test/README.md+17

This diff is too big to show here.

test/buildable/Main.hs+4

This diff is too big to show here.

test/buildable/buildable-test.cabal+31

This diff is too big to show here.

test/buildable/default.nix+35

This diff is too big to show here.

test/builder-haddock/.plan.nix/test-haddock.nix+35

This diff is too big to show here.

test/builder-haddock/Setup.hs+2

This diff is too big to show here.

test/builder-haddock/TestHaddock.hs+6

This diff is too big to show here.

test/builder-haddock/default.nix+86

This diff is too big to show here.

test/builder-haddock/pkgs.nix+43

This diff is too big to show here.

test/builder-haddock/test-haddock.cabal+15

This diff is too big to show here.

test/builder-haddock/test-haddock.nix+65

This diff is too big to show here.

test/c-ffi/c-ffi.cabal+24

This diff is too big to show here.

test/c-ffi/cbits/test.c+7

This diff is too big to show here.

test/c-ffi/default.nix+65

This diff is too big to show here.

test/c-ffi/exe/Main.hs+15

This diff is too big to show here.

test/c-ffi/jsbits/bindings.js+6

This diff is too big to show here.

test/c-ffi/src/Lib.hs+6

This diff is too big to show here.

test/ca-derivations-include/default.nix+57

This diff is too big to show here.

test/ca-derivations/default.nix+59

This diff is too big to show here.

test/cabal-22/Main.hs+6

This diff is too big to show here.

test/cabal-22/Setup.hs+2

This diff is too big to show here.

test/cabal-22/default.nix+75

This diff is too big to show here.

test/cabal-22/lib/Lib.hs+4

This diff is too big to show here.

test/cabal-22/project.cabal+45

This diff is too big to show here.

test/cabal-22/test/LibSpec.hs+11

This diff is too big to show here.

test/cabal-22/test/Main.hs+1

This diff is too big to show here.

test/cabal-doctests/Setup.hs+6

This diff is too big to show here.

test/cabal-doctests/cabal-doctests-test.cabal+31

This diff is too big to show here.

test/cabal-doctests/default.nix+48

This diff is too big to show here.

test/cabal-doctests/doctests/Doctests.hs+16

This diff is too big to show here.

test/cabal-doctests/src/Lib.hs+18

This diff is too big to show here.

test/cabal-hpack/Setup.hs+2

This diff is too big to show here.

test/cabal-hpack/app/Main.hs+4

This diff is too big to show here.

test/cabal-hpack/default.nix+65

This diff is too big to show here.

test/cabal-hpack/package.yaml+34

This diff is too big to show here.

test/cabal-simple-debug/Main.hs+4

This diff is too big to show here.

test/cabal-simple-debug/Setup.hs+2

This diff is too big to show here.

test/cabal-simple-debug/cabal-simple.cabal+37

This diff is too big to show here.

test/cabal-simple-debug/default.nix+52

This diff is too big to show here.

test/cabal-simple-prof/Main.hs+4

This diff is too big to show here.

test/cabal-simple-prof/Setup.hs+2

This diff is too big to show here.

test/cabal-simple-prof/cabal-simple.cabal+37

This diff is too big to show here.

test/cabal-simple-prof/default.nix+62

This diff is too big to show here.

test/cabal-simple/Main.hs+4

This diff is too big to show here.

test/cabal-simple/Setup.hs+2

This diff is too big to show here.

test/cabal-simple/cabal-simple.cabal+37

This diff is too big to show here.

test/cabal-simple/default.nix+72

This diff is too big to show here.

test/cabal-source-repo-comments/Main.hs+4

This diff is too big to show here.

test/cabal-source-repo-comments/cabal.project+15

This diff is too big to show here.

test/cabal-source-repo-comments/default.nix+34

This diff is too big to show here.

test/cabal-source-repo-comments/use-cabal-simple.cabal+26

This diff is too big to show here.

test/cabal-source-repo/Main.hs+4

This diff is too big to show here.

test/cabal-source-repo/cabal.project+11

This diff is too big to show here.

test/cabal-source-repo/default.nix+34

This diff is too big to show here.

test/cabal-source-repo/use-cabal-simple.cabal+26

This diff is too big to show here.

test/cabal-sublib/Main.hs+4

This diff is too big to show here.

test/cabal-sublib/Setup.hs+2

This diff is too big to show here.

test/cabal-sublib/cabal-sublib.cabal+42

This diff is too big to show here.

test/cabal-sublib/default.nix+65

This diff is too big to show here.

test/call-cabal-project-to-nix/default.nix+48

This diff is too big to show here.

test/call-stack-to-nix/.gitignore+3

This diff is too big to show here.

test/call-stack-to-nix/Setup.hs+2

This diff is too big to show here.

test/call-stack-to-nix/app/Main.hs+6

This diff is too big to show here.

test/call-stack-to-nix/default.nix+41

This diff is too big to show here.

test/call-stack-to-nix/package.yaml+48

This diff is too big to show here.

test/call-stack-to-nix/src/Lib.hs+6

This diff is too big to show here.

test/call-stack-to-nix/stack.yaml+66

This diff is too big to show here.

test/call-stack-to-nix/test/Spec.hs+2

This diff is too big to show here.

test/coverage-golden/default.nix+53

This diff is too big to show here.

test/coverage-golden/golden.json+2069

This diff is too big to show here.

test/coverage-no-libs/cabal.project+1

This diff is too big to show here.

test/coverage-no-libs/default.nix+104

This diff is too big to show here.

test/coverage-no-libs/pkga/MainA.hs+4

This diff is too big to show here.

test/coverage-no-libs/pkga/Setup.hs+2

This diff is too big to show here.

test/coverage-no-libs/pkga/pkga.cabal+19

This diff is too big to show here.

test/coverage-no-libs/stack.yaml+4

This diff is too big to show here.

test/coverage/cabal.project+2

This diff is too big to show here.

test/coverage/conduit.hs+19

This diff is too big to show here.

test/coverage/default.nix+133

This diff is too big to show here.

test/coverage/pkga/MainA.hs+4

This diff is too big to show here.

test/coverage/pkga/PkgA.hs+16

This diff is too big to show here.

test/coverage/pkga/Setup.hs+2

This diff is too big to show here.

test/coverage/pkga/pkga.cabal+26

This diff is too big to show here.

test/coverage/pkgb/Setup.hs+2

This diff is too big to show here.

test/coverage/pkgb/app/Main.hs+10

This diff is too big to show here.

test/coverage/pkgb/app/tests.hs+7

This diff is too big to show here.

test/coverage/pkgb/pkgb.cabal+43

This diff is too big to show here.

test/coverage/pkgb/src/ConduitExample.hs+21

This diff is too big to show here.

test/coverage/pkgb/src/PkgB.hs+7

This diff is too big to show here.

test/coverage/pkgb/src/conduit-test.hs+5

This diff is too big to show here.

test/coverage/stack.yaml+5

This diff is too big to show here.

test/default.nix+250

This diff is too big to show here.

test/exe-dlls/default.nix+25

This diff is too big to show here.

test/exe-dlls/exe-dlls.cabal+18

This diff is too big to show here.

test/exe-dlls/src/Main.hs+14

This diff is too big to show here.

test/exe-lib-dlls/default.nix+25

This diff is too big to show here.

test/exe-lib-dlls/exe-lib-dlls.cabal+24

This diff is too big to show here.

test/exe-lib-dlls/exes/Main.hs+6

This diff is too big to show here.

test/exe-lib-dlls/src/Lib.hs+14

This diff is too big to show here.

test/exe-only/Main.hs+4

This diff is too big to show here.

test/exe-only/Setup.hs+2

This diff is too big to show here.

test/exe-only/default.nix+54

This diff is too big to show here.

test/exe-only/exe-only.cabal+15

This diff is too big to show here.

test/external-static-plugin/cabal.project+1

This diff is too big to show here.

test/external-static-plugin/default.nix+27

This diff is too big to show here.

test/external-static-plugin/plugin/CHANGELOG.md+5

This diff is too big to show here.

test/external-static-plugin/plugin/plugin.cabal+12

This diff is too big to show here.

test/external-static-plugin/plugin/src/Plugin.hs+16

This diff is too big to show here.

test/external-static-plugin/prog/CHANGELOG.md+5

This diff is too big to show here.

test/external-static-plugin/prog/app/Main.hs+4

This diff is too big to show here.

test/external-static-plugin/prog/prog.cabal+12

This diff is too big to show here.

test/extra-hackage/01-index.tar.gz

This diff is too big to show here.

test/extra-hackage/README.md+11

This diff is too big to show here.

test/extra-hackage/default.nix+65

This diff is too big to show here.

test/extra-hackage/external-package-demo-0.1.0.0.tar.gz

This diff is too big to show here.

test/extra-hackage/external-package-demo/CHANGELOG.md+5

This diff is too big to show here.

test/extra-hackage/external-package-demo/Main.hs+8

This diff is too big to show here.

test/extra-hackage/external-package-demo/MyLib.hs+4

This diff is too big to show here.

test/extra-hackage/external-package-demo/Setup.hs+2

This diff is too big to show here.

test/extra-hackage/external-package-demo/external-package-demo.cabal+32

This diff is too big to show here.

test/extra-hackage/external-package-user/CHANGELOG.md+5

This diff is too big to show here.

test/extra-hackage/external-package-user/Main.hs+8

This diff is too big to show here.

test/extra-hackage/external-package-user/MyLib.hs+4

This diff is too big to show here.

test/extra-hackage/external-package-user/Setup.hs+2

This diff is too big to show here.

test/extra-hackage/external-package-user/cabal.project+8

This diff is too big to show here.

test/extra-hackage/external-package-user/external-package-user.cabal+33

This diff is too big to show here.

test/extra-hackage/hackage/default.nix+9

This diff is too big to show here.

test/extra-hackage/hackage/hackage.json+15

This diff is too big to show here.

test/extra-hackage/hackage/hackage/external-package-demo-0.1.0.0-r0-3230db0813f2b468afb3ff7d8bbfcf570019a7faa4a0f59b2ea96743932105e7.nix+76

This diff is too big to show here.

test/fully-static/cross.nix+15

This diff is too big to show here.

test/fully-static/default.nix+74

This diff is too big to show here.

test/fully-static/stack.yaml+6

This diff is too big to show here.

test/ghc-options/.gitignore+2

This diff is too big to show here.

test/ghc-options/Setup.hs+2

This diff is too big to show here.

test/ghc-options/app/Main.hs+9

This diff is too big to show here.

test/ghc-options/cabal.nix+43

This diff is too big to show here.

test/ghc-options/cabal.project+4

This diff is too big to show here.

test/ghc-options/src/Lib.hs+9

This diff is too big to show here.

test/ghc-options/stack.nix+45

This diff is too big to show here.

test/ghc-options/stack.yaml+9

This diff is too big to show here.

test/ghc-options/test-ghc-options.cabal+20

This diff is too big to show here.

test/ghcjs-overlay/CHANGELOG.md+5

This diff is too big to show here.

test/ghcjs-overlay/Main.hs+8

This diff is too big to show here.

test/ghcjs-overlay/MyLib.hs+4

This diff is too big to show here.

test/ghcjs-overlay/Setup.hs+2

This diff is too big to show here.

test/ghcjs-overlay/cabal.project+2

This diff is too big to show here.

test/ghcjs-overlay/default.nix+60

This diff is too big to show here.

test/ghcjs-overlay/ghcjs-overlay-test.cabal+21

This diff is too big to show here.

test/githash/default.nix+71

This diff is too big to show here.

test/githash/githash-test.cabal+16

This diff is too big to show here.

test/githash/src/Main.hs+15

This diff is too big to show here.

test/haskell-language-server/cabal.nix+12

This diff is too big to show here.

test/haskell-language-server/stack.nix+26

This diff is too big to show here.

test/index-state/default.nix+50

This diff is too big to show here.

test/project-flags/.gitignore+2

This diff is too big to show here.

test/project-flags/Setup.hs+2

This diff is too big to show here.

test/project-flags/app/Main.hs+9

This diff is too big to show here.

test/project-flags/cabal.nix+36

This diff is too big to show here.

test/project-flags/cabal.project+4

This diff is too big to show here.

test/project-flags/src/Lib.hs+9

This diff is too big to show here.

test/project-flags/stack.nix+37

This diff is too big to show here.

test/project-flags/stack.yaml+8

This diff is too big to show here.

test/project-flags/test-project-flags.cabal+28

This diff is too big to show here.

test/regen.nix+68

This diff is too big to show here.

test/setup-deps/cabal.project+1

This diff is too big to show here.

test/setup-deps/default.nix+47

This diff is too big to show here.

test/setup-deps/pkg/Setup.hs+32

This diff is too big to show here.

test/setup-deps/pkg/app/Main.hs+6

This diff is too big to show here.

test/setup-deps/pkg/pkg.cabal+37

This diff is too big to show here.

test/setup-deps/pkg/src/conduit-test.hs+5

This diff is too big to show here.

test/sha256map/default.nix+21

This diff is too big to show here.

test/shell-for-setup-deps/cabal.project+1

This diff is too big to show here.

test/shell-for-setup-deps/default.nix+60

This diff is too big to show here.

test/shell-for-setup-deps/pkg/Setup.hs+23

This diff is too big to show here.

test/shell-for-setup-deps/pkg/app/Main.hs+6

This diff is too big to show here.

test/shell-for-setup-deps/pkg/pkg.cabal+34

This diff is too big to show here.

test/shell-for-setup-deps/pkg/src/conduit-test.hs+5

This diff is too big to show here.

test/shell-for/.plan.nix/pkga.nix+42

This diff is too big to show here.

test/shell-for/.plan.nix/pkgb.nix+63

This diff is too big to show here.

test/shell-for/cabal.project+2

This diff is too big to show here.

test/shell-for/conduit.hs+19

This diff is too big to show here.

test/shell-for/default.nix+90

This diff is too big to show here.

test/shell-for/pkga/MainA.hs+4

This diff is too big to show here.

test/shell-for/pkga/PkgA.hs+16

This diff is too big to show here.

test/shell-for/pkga/Setup.hs+2

This diff is too big to show here.

test/shell-for/pkga/pkga.cabal+26

This diff is too big to show here.

test/shell-for/pkgb/Setup.hs+2

This diff is too big to show here.

test/shell-for/pkgb/app/Main.hs+10

This diff is too big to show here.

test/shell-for/pkgb/app/tests.hs+6

This diff is too big to show here.

test/shell-for/pkgb/pkgb.cabal+43

This diff is too big to show here.

test/shell-for/pkgb/src/ConduitExample.hs+21

This diff is too big to show here.

test/shell-for/pkgb/src/PkgB.hs+7

This diff is too big to show here.

test/shell-for/pkgb/src/conduit-test.hs+5

This diff is too big to show here.

test/shell-for/pkgs.nix+282

This diff is too big to show here.

test/shell-for/single.project+1

This diff is too big to show here.

test/snapshots/default.nix+44

This diff is too big to show here.

test/stack-local-resolver-subdir/.gitignore+2

This diff is too big to show here.

test/stack-local-resolver-subdir/default.nix+16

This diff is too big to show here.

test/stack-local-resolver-subdir/package.yaml+7

This diff is too big to show here.

test/stack-local-resolver-subdir/snapshot/snapshot.yaml+4

This diff is too big to show here.

test/stack-local-resolver-subdir/src/Lib.hs+6

This diff is too big to show here.

test/stack-local-resolver-subdir/stack.yaml+4

This diff is too big to show here.

test/stack-local-resolver/.gitignore+2

This diff is too big to show here.

test/stack-local-resolver/default.nix+16

This diff is too big to show here.

test/stack-local-resolver/package.yaml+7

This diff is too big to show here.

test/stack-local-resolver/snapshot.yaml+4

This diff is too big to show here.

test/stack-local-resolver/src/Lib.hs+6

This diff is too big to show here.

test/stack-local-resolver/stack.yaml+4

This diff is too big to show here.

test/stack-remote-resolver/.gitignore+2

This diff is too big to show here.

test/stack-remote-resolver/default.nix+17

This diff is too big to show here.

test/stack-remote-resolver/package.yaml+7

This diff is too big to show here.

test/stack-remote-resolver/src/Lib.hs+6

This diff is too big to show here.

test/stack-remote-resolver/stack.yaml+4

This diff is too big to show here.

test/stack-simple/.gitignore+3

This diff is too big to show here.

test/stack-simple/Setup.hs+2

This diff is too big to show here.

test/stack-simple/app/Main.hs+6

This diff is too big to show here.

test/stack-simple/default.nix+25

This diff is too big to show here.

test/stack-simple/package.yaml+48

This diff is too big to show here.

test/stack-simple/pkgs.nix+18

This diff is too big to show here.

test/stack-simple/src/Lib.hs+6

This diff is too big to show here.

test/stack-simple/stack-simple.cabal+61

This diff is too big to show here.

test/stack-simple/stack-simple.nix+52

This diff is too big to show here.

test/stack-simple/stack.yaml+69

This diff is too big to show here.

test/stack-simple/test/Spec.hs+2

This diff is too big to show here.

test/stack-source-repo/.gitignore+2

This diff is too big to show here.

test/stack-source-repo/default.nix+16

This diff is too big to show here.

test/stack-source-repo/package.yaml+8

This diff is too big to show here.

test/stack-source-repo/src/Lib.hs+6

This diff is too big to show here.

test/stack-source-repo/stack.yaml+12

This diff is too big to show here.

test/sublib-docs/Setup.hs+2

This diff is too big to show here.

test/sublib-docs/default.nix+61

This diff is too big to show here.

test/sublib-docs/lib/Lib.hs+6

This diff is too big to show here.

test/sublib-docs/slib/Slib.hs+6

This diff is too big to show here.

test/sublib-docs/src/Main.hs+4

This diff is too big to show here.

test/sublib-docs/sublib-docs.cabal+47

This diff is too big to show here.

test/tests.sh+141

This diff is too big to show here.

test/th-dlls/apps/Main.hs+9

This diff is too big to show here.

test/th-dlls/default.nix+24

This diff is too big to show here.

test/th-dlls/src/Lib.hs+14

This diff is too big to show here.

test/th-dlls/th-dlls.cabal+24

This diff is too big to show here.

test/unit.nix+231

This diff is too big to show here.

test/util.nix+8

This diff is too big to show here.

test/with-packages/.plan.nix/test-with-packages.nix+35

This diff is too big to show here.

test/with-packages/Point.hs+12

This diff is too big to show here.

test/with-packages/Setup.hs+2

This diff is too big to show here.

test/with-packages/TestWithPackages.hs+6

This diff is too big to show here.

test/with-packages/default.nix+109

This diff is too big to show here.

test/with-packages/pkgs.nix+200

This diff is too big to show here.

test/with-packages/test-with-packages.cabal+15

This diff is too big to show here.