2687 files changed+500452−3335
.buildkite/pipeline.yml+49−2
@@ -1,5 +1,52 @@
11steps:
2− - label: 'Run tests'
3− command: "./test/tests.sh"
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 ''
451 agents:
552 system: x86_64-linux
.buildkite/updates.yml+6−13
@@ -1,21 +1,14 @@
11steps:
2− - label: 'Update hackage.nix'
2+ - label: 'Update hackage.nix and stackage.nix'
33 command:
4− - nix-build -A maintainer-scripts.update-hackage -o update-hackage.sh
4+ - nix-build build.nix -A maintainer-scripts.update-hackage -o update-hackage.sh
55 - echo "+++ Updating hackage.nix"
66 - ./update-hackage.sh
7− artifact_paths:
8− - "hackage-src.json"
9− agents:
10− system: x86_64-linux
11−
12− - label: 'Update stackage.nix'
13− command:
14− - nix-build -A maintainer-scripts.update-stackage -o update-stackage.sh
7+ - nix-build build.nix -A maintainer-scripts.update-stackage -o update-stackage.sh
158 - echo "+++ Updating stackage.nix"
169 - ./update-stackage.sh
1710 artifact_paths:
18− - "stackage-src.json"
11+ - "flake.lock"
1912 agents:
2013 system: x86_64-linux
2114
@@ -24,8 +17,8 @@ steps:
2417
2518 - label: 'Update pins'
2619 command:
27− - 'buildkite-agent artifact download "*.json" .'
28− - nix-build -A maintainer-scripts.update-pins -o update-pins.sh
20+ - 'buildkite-agent artifact download "flake.lock" .'
21+ - nix-build build.nix -A maintainer-scripts.update-pins -o update-pins.sh
2922 - ./update-pins.sh
3023 agents:
3124 system: x86_64-linux
.gitattributes+2−1
@@ -2,5 +2,6 @@
22# Hide stuff that is generated by nix-tools plan-to-nix
33
44nix-tools/.plan.nix/*.nix linguist-generated=true
5−nix-tools/.plan-pkgs.nix linguist-generated=true
5+nix-tools/pkgs.nix linguist-generated=true
66.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
18
29# Created by https://www.gitignore.io/api/haskell,emacs,vim
310
@@ -92,3 +99,4 @@ tags
9299
93100
94101# End of https://www.gitignore.io/api/haskell,emacs,vim
102+nix-tools-src-new.json
.travis.ymldeleted−22
@@ -1,22 +0,0 @@
1−language: nix
2−matrix:
3− include:
4− - name: 18.09 macOS
5− env: CHANNEL=nixpkgs-18.09-darwin
6− os: osx
7− - name: NixOS 18.09
8− env: CHANNEL=nixos-18.09
9− - name: NixOS Unstable
10− env: CHANNEL=nixos-unstable
11−
12−sudo: required
13−before_script:
14−- sudo mount -o remount,exec,size=4G,mode=755 /run/user || true
15−- sudo mkdir -p /etc/nix
16−- echo "trusted-users = root $USER" | sudo tee -a /etc/nix/nix.conf
17−- sudo launchctl kickstart -k system/org.nixos.nix-daemon || true
18−
19−script:
20−- nix-env -if https://github.com/cachix/cachix/tarball/master --extra-substituters https://cachix.cachix.org --trusted-public-keys 'cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cachix.cachix.org-1:eWNHQldwUO7G2VkjpnjDbWwy4KQ/HNxht7H4SSoMckM='
21−- cachix use nix-tools
22−- NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/${CHANNEL}.tar.gz NIX_BUILD_ARGS="--cores 0 --max-jobs 2" ./test/tests.sh
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://buildkite.com/input-output-hk/haskell-dot-nix)
20+[](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+
README.orgdeleted−42
@@ -1,42 +0,0 @@
1−#+STARTUP: showall hidestars
2−
3−* Alternative Haskell Infrastructure for Nixpkgs
4−
5−[[https://travis-ci.org/input-output-hk/haskell.nix][https://travis-ci.org/input-output-hk/haskell.nix.svg?branch=master]]
6−[[https://buildkite.com/input-output-hk/haskell-dot-nix][https://badge.buildkite.com/d453edcd29bd2f8f3f3b32c9b7d6777a33773d9671c37a6ccc.svg]]
7−
8−=haskell.nix= is an experimental new builder for Haskell packages.
9−
10−It works by automatically translating your Cabal or Stack project and
11−its dependencies into Nix code. Most of your dependencies are already
12−translated, so you generally won't have too much generated code.
13−
14−For the documentation, see https://input-output-hk.github.io/haskell.nix/.
15−
16−** Quickstart
17−
18−This will download and build =nix-tools=.
19−
20−#+begin_src sh
21−nix build -f https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz nix-tools -o nt
22−./nt/bin/cabal-to-nix --help
23−#+end_src
24−
25−** Related repos
26−
27−The =haskell.nix= repository contains the runtime system for building
28−Haskell packages in Nix. It depends on other repos, which are:
29−
30−- [[https://github.com/input-output-hk/nix-tools][nix-tools]] — provides the programs for generating Nix expressions from
31− Haskell projects.
32−
33−- [[https://github.com/input-output-hk/hackage.nix][hackage.nix]] — the latest contents of the [[https://hackage.haskell.org/][Hackage]] databases,
34− converted to Nix expressions.
35−
36−- [[https://github.com/input-output-hk/stackage.nix][stackage.nix]] — all of the [[https://www.stackage.org/][Stackage]] snapshots, converted to Nix
37− expressions.
38−
39−** IRC Channel
40−
41−Join the [[https://www.irccloud.com/invite?channel=%23haskell.nix&hostname=irc.freenode.net&port=6697&ssl=1][#haskell.nix]] channel on [[https://freenode.net/][irc.freenode.net]] to get help or discuss
42−the development of =haskell.nix= and =nix-tools=.
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.nix+555−304
@@ -1,9 +1,10 @@
1−{ stdenv, buildPackages, ghc, lib, pkgconfig, writeText, runCommand, haskellLib, nonReinstallablePkgs, withPackage, hsPkgs }:
2−
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 =
34{ componentId
45, component
56, package
6−, name
7+, name # This is the package name
78, setup
89, src
910, flags
@@ -12,334 +13,584 @@
1213, cabal-generator
1314, patches ? []
1415
15−, preUnpack ? null, postUnpack ? null
16−, preConfigure ? null, postConfigure ? null
17−, preBuild ? null, postBuild ? null
18−, preCheck ? null, postCheck ? null
19−, preInstall ? null, postInstall ? null
20−, preHaddock ? null, postHaddock ? null
21−, shellHook ? null
22−
23−, doCheck ? component.doCheck || haskellLib.isTest componentId
24−, doCrossCheck ? component.doCrossCheck || false
25−, dontPatchELF ? true
26−, dontStrip ? true
27−
28−, static ? stdenv.hostPlatform.isMusl
29−, deadCodeElimination ? true
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
3054
3155# Options for Haddock generation
3256, doHaddock ? component.doHaddock # Enable haddock and hoogle generation
33−, doHoogle ? true # Also build a hoogle index
34−, hyperlinkSource ? true # Link documentation to the source code
35−}:
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:
3689
3790let
38− fullName = if haskellLib.isAll componentId
39− then "${name}-all"
40− else "${name}-${componentId.ctype}-${componentId.cname}";
41−
42− flagsAndConfig = field: xs: lib.optionalString (xs != []) ''
43− echo ${lib.concatStringsSep " " (map (x: "--${field}=${x}") xs)} >> $out/configure-flags
44− echo "${field}: ${lib.concatStringsSep " " xs}" >> $out/cabal.config
45− '';
46−
47− flatDepends =
48− let
49− makePairs = map (p: rec { key="${val}"; val=(p.components.library or p); });
50− closure = builtins.genericClosure {
51− startSet = makePairs component.depends;
52− operator = {val,...}: makePairs val.config.depends;
53− };
54− in map ({val,...}: val) closure;
55−
56− exactDep = pdbArg: p: ''
57− if id=$(target-pkg ${pdbArg} field ${p} id --simple-output); then
58− echo "--dependency=${p}=$id" >> $out/configure-flags
59− fi
60− if ver=$(target-pkg ${pdbArg} field ${p} version --simple-output); then
61− echo "constraint: ${p} == $ver" >> $out/cabal.config
62− echo "constraint: ${p} installed" >> $out/cabal.config
63− fi
64− '';
65−
66− envDep = pdbArg: p: ''
67− if id=$(target-pkg ${pdbArg} field ${p} id --simple-output); then
68− echo "package-id $id" >> $out/ghc-environment
69− fi
70− '';
71−
72− configFiles = runCommand "${fullName}-config" { nativeBuildInputs = [ghc]; } (''
73− mkdir -p $out
74−
75− # Calls ghc-pkg for the target platform
76− target-pkg() {
77− ${ghc.targetPrefix}ghc-pkg "$@"
78− }
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+ };
79143
80− target-pkg init $out/package.conf.d
81−
82− ${lib.concatStringsSep "\n" (lib.mapAttrsToList flagsAndConfig {
83− "extra-lib-dirs" = map (p: "${lib.getLib p}/lib") component.libs;
84− "extra-include-dirs" = map (p: "${lib.getDev p}/include") component.libs;
85− "extra-framework-dirs" = map (p: "${p}/Library/Frameworks") component.frameworks;
86− })}
87−
88− # Copy over the nonReinstallablePkgs from the global package db.
89− # Note: we need to use --global-package-db with ghc-pkg to prevent it
90− # from looking into the implicit global package db when registering the package.
91− ${lib.concatMapStringsSep "\n" (p: ''
92− target-pkg describe ${p} | target-pkg --force --global-package-db $out/package.conf.d register - || true
93− '') nonReinstallablePkgs}
94−
95− ${lib.concatMapStringsSep "\n" (p: ''
96− target-pkg --package-db ${p}/package.conf.d dump | target-pkg --force --package-db $out/package.conf.d register -
97− '') flatDepends}
98−
99− # Note: we pass `clear` first to ensure that we never consult the implicit global package db.
100− ${flagsAndConfig "package-db" ["clear" "$out/package.conf.d"]}
101−
102− echo ${lib.concatStringsSep " " (lib.mapAttrsToList (fname: val: "--flags=${lib.optionalString (!val) "-" + fname}") flags)} >> $out/configure-flags
103−
104− # Provide a GHC environment file
105− cat > $out/ghc-environment <<EOF
106− package-db $out/package.conf.d
107− EOF
108− ${lib.concatMapStringsSep "\n" (p: envDep "--package-db ${p.components.library or p}/package.conf.d" p.identifier.name) component.depends}
109− ${lib.concatMapStringsSep "\n" (envDep "") (lib.remove "ghc" nonReinstallablePkgs)}
110−
111− '' + lib.optionalString component.doExactConfig ''
112− echo "--exact-configuration" >> $out/configure-flags
113− echo "allow-newer: ${package.identifier.name}:*" >> $out/cabal.config
114− echo "allow-older: ${package.identifier.name}:*" >> $out/cabal.config
115−
116− ${lib.concatMapStringsSep "\n" (p: exactDep "--package-db ${p.components.library}/package.conf.d" p.identifier.name) component.depends}
117− ${lib.concatMapStringsSep "\n" (exactDep "") nonReinstallablePkgs}
118−
119− ''
120− # This code originates in the `generic-builder.nix` from nixpkgs. However GHC has been fixed
121− # to drop unused libraries referneced from libraries; and this patch is usually included in the
122− # nixpkgs's GHC builds. This doesn't sadly make this stupid hack unnecessary. It resurfes in
123− # the form of Cabal trying to be smart. Cabal when linking a library figures out that you likely
124− # need those `rpath` entries, and passes `-optl-Wl,-rpath,...` for each dynamic library path to
125− # GHC, thus subverting the linker and forcing it to insert all those RPATHs weather or not they
126− # are needed. We therfore reuse the linker hack here to move all al dynamic lirbaries into a
127− # common folder (as links) and thus prevent Cabal from going nuts.
128− #
129− # TODO: Fix Cabal.
130− # TODO: this is only needed if we do dynamic libraries.
131− + lib.optionalString stdenv.isDarwin ''
132− # Work around a limit in the macOS Sierra linker on the number of paths
133− # referenced by any one dynamic library:
134− #
135− # Create a local directory with symlinks of the *.dylib (macOS shared
136− # libraries) from all the dependencies.
137− local dynamicLinksDir="$out/lib/links"
138− mkdir -p $dynamicLinksDir
139− for d in $(grep dynamic-library-dirs "$out/package.conf.d/"*|awk '{print $2}'|sort -u); do
140− ln -s "$d/"*.dylib $dynamicLinksDir
141− done
142− # Edit the local package DB to reference the links directory.
143− for f in "$out/package.conf.d/"*.conf; do
144− sed -i "s,dynamic-library-dirs: .*,dynamic-library-dirs: $dynamicLinksDir," $f
145− done
146− '' + ''
147− target-pkg --package-db $out/package.conf.d recache
148− '' + ''
149− target-pkg --package-db $out/package.conf.d check
150− '');
144+ enableFeature = enable: feature:
145+ (if enable then "--enable-" else "--disable-") + feature;
146+
147+ disableFeature = disable: enableFeature (!disable);
151148
152149 finalConfigureFlags = lib.concatStringsSep " " (
153150 [ "--prefix=$out"
154− "${haskellLib.componentTarget componentId}"
155− "$(cat ${configFiles}/configure-flags)"
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 = ([
156172 # GHC
157173 "--with-ghc=${ghc.targetPrefix}ghc"
158174 "--with-ghc-pkg=${ghc.targetPrefix}ghc-pkg"
159175 "--with-hsc2hs=${ghc.targetPrefix}hsc2hs"
160− # CC
161− "--with-gcc=${stdenv.cc.targetPrefix}cc"
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+ ] ++
162182 # BINTOOLS
163− "--with-ld=${stdenv.cc.bintools.targetPrefix}ld"
164− "--with-ar=${stdenv.cc.bintools.targetPrefix}ar"
165− "--with-strip=${stdenv.cc.bintools.targetPrefix}strip"
166− # other flags
167− "--enable-executable-stripping"
168− "--enable-library-stripping"
169− ] ++ lib.optional doHaddock' "--docdir=${docdir "$doc"}"
170− ++ lib.optional (deadCodeElimination && stdenv.hostPlatform.isLinux) "--enable-split-sections"
171− ++ lib.optional (static) "--enable-static"
172− ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) (
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 (
173217 map (arg: "--hsc2hs-option=" + arg) (["--cross-compile"] ++ lib.optionals (stdenv.hostPlatform.isWindows) ["--via-asm"])
174218 ++ lib.optional (package.buildType == "Configure") "--configure-option=--host=${stdenv.hostPlatform.config}" )
175− ++ component.configureFlags
176− );
177−
178− executableToolDepends = lib.concatMap (c: if c.isHaskell or false
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
179240 then builtins.attrValues (c.components.exes or {})
180− else [c]) component.build-tools;
241+ else [c]) build-tools) ++
242+ lib.optional (pkgconfig != []) buildPackages.pkgconfig;
181243
182244 # Unfortunately, we need to wrap ghc commands for cabal builds to
183245 # work in the nix-shell. See ../doc/removing-with-package-wrapper.md.
184− shellWrappers = withPackage {
185− inherit package configFiles;
246+ shellWrappers = ghcForComponent {
247+ componentName = fullName;
248+ inherit configFiles enableDWARF;
249+ inherit (component) plugins;
186250 };
187251
188− # the target dir for haddock documentation
189− docdir = docoutput: docoutput + "/share/doc/" + componentId.cname;
190−
191− doHaddock' = doHaddock
192− && (haskellLib.isLibrary componentId)
193− && stdenv.hostPlatform == stdenv.buildPlatform;
194−
195−in stdenv.lib.fix (drv:
196−
197−stdenv.mkDerivation ({
198− name = fullName;
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+ };
199310
200− inherit src doCheck doCrossCheck dontPatchELF dontStrip;
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;
201316
202− passthru = {
203− inherit (package) identifier;
204− config = component;
205− inherit configFiles;
206− env = shellWrappers;
207−
208− # The directory containing the haddock documentation.
209− # `null' if no haddock documentation was built.
210− haddockDir = if doHaddock' then "${docdir drv.doc}/html" else null;
317+ componentDrv = drv;
211318 };
212319
213− meta = {
214− homepage = package.homepage;
215− description = package.synopsis;
216− license =
217− let
218− license-map = import ../lib/cabal-licenses.nix lib;
219− in license-map.${package.license} or
220− (builtins.trace "WARNING: license \"${package.license}\" not found" license-map.LicenseRef-OtherLicense);
320+ contentAddressedAttrs = lib.optionalAttrs contentAddressed {
321+ __contentAddressed = true;
322+ outputHashMode = "recursive";
323+ outputHashAlgo = "sha256";
221324 };
222−
223− CABAL_CONFIG = configFiles + /cabal.config;
224− GHC_ENVIRONMENT = configFiles + /ghc-environment;
225− LANG = "en_US.UTF-8"; # GHC needs the locale configured during the Haddock phase.
226− LC_ALL = "en_US.UTF-8";
227−
228− enableParallelBuilding = true;
229−
230− buildInputs = component.libs
231− ++ component.frameworks
232− ++ component.pkgconfig;
233−
234− nativeBuildInputs =
235− [ghc buildPackages.removeReferencesTo]
236− ++ lib.optional (component.pkgconfig != []) pkgconfig
237− ++ executableToolDepends;
238−
239− SETUP_HS = setup + /bin/Setup;
240−
241− outputs = ["out" ] ++ (lib.optional doHaddock' "doc");
242−
243− # Phases
244− preInstallPhases = lib.optional doHaddock' "haddockPhase";
245−
246− prePatch = if (cabalFile != null)
247− then ''cat ${cabalFile} > ${package.identifier.name}.cabal''
248− else lib.optionalString (cabal-generator == "hpack") ''
249− ${hsPkgs.hpack.components.exes.hpack}/bin/hpack
250− '';
251−
252− configurePhase = ''
253− runHook preConfigure
254− echo Configure flags:
255− printf "%q " ${finalConfigureFlags}
256− echo
257− $SETUP_HS configure ${finalConfigureFlags}
258− runHook postConfigure
259− '';
260−
261− buildPhase = ''
262− runHook preBuild
263− $SETUP_HS build -j$NIX_BUILD_CORES ${lib.concatStringsSep " " component.setupBuildFlags}
264− runHook postBuild
265− '';
266−
267− checkPhase = ''
268− runHook preCheck
269− $SETUP_HS test ${lib.concatStringsSep " " component.setupTestFlags}
270− mkdir -p $out/${name}
271− cp dist/test/*.log $out/${name}/
272− runHook postCheck
273− '';
274−
275− haddockPhase = ''
276− runHook preHaddock
277− docdir="${docdir "$doc"}"
278− mkdir -p "$docdir"
279−
280− $SETUP_HS haddock \
281− "--html" \
282− ${lib.optionalString doHoogle "--hoogle"} \
283− ${lib.optionalString hyperlinkSource "--hyperlink-source"} \
284− ${lib.concatStringsSep " " component.setupHaddockFlags}
285−
286− html="dist/doc/html/${componentId.cname}"
287−
288− if [ -d "$html" ]; then
289− # Ensure that libraries are not pulled into the docs closure.
290− # As an example, the prettified source code of a
291− # Paths_package module will contain store paths of the library package.
292− for x in "$html/src/"*.html; do
293− remove-references-to -t $out $x
294− done
295−
296− cp -R "$html" "$docdir"/html
297− fi
298− runHook postHaddock
299− '';
300−
301− # Note: Cabal does *not* copy test executables during the `install` phase.
302− #
303− # Note 2: if a package contains multiple libs (lib + sublibs) SETUP register will generate a
304− # folder isntead of a file for the configuration. Therfore if the result is a folder,
305− # we need to register each and every element of that folder.
306− installPhase = ''
307− runHook preInstall
308− $SETUP_HS copy ${lib.concatStringsSep " " component.setupInstallFlags}
309− ${lib.optionalString (haskellLib.isLibrary componentId || haskellLib.isAll componentId) ''
310− $SETUP_HS register --gen-pkg-config=${name}.conf
311− ${ghc.targetPrefix}ghc-pkg -v0 init $out/package.conf.d
312− if [ -d "${name}.conf" ]; then
313− for pkg in ${name}.conf/*; do
314− ${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/package.conf.d -f $out/package.conf.d register "$pkg"
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 \;
315530 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"
316575 else
317− ${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/package.conf.d -f $out/package.conf.d register ${name}.conf
318− fi
319− ''}
320− ${lib.optionalString (haskellLib.isTest componentId || haskellLib.isAll componentId) ''
321− mkdir -p $out/${name}
322− if [ -f "dist/build/${componentId.cname}/${componentId.cname}" ]; then
323− cp dist/build/${componentId.cname}/${componentId.cname} $out/${name}/
324− fi
325− if [ -f "dist/build/${componentId.cname}/${componentId.cname}.exe" ]; then
326− cp dist/build/${componentId.cname}/${componentId.cname}.exe $out/${name}/
576+ echo "ERROR: $out/package.conf.d/${name}-*.conf was not created"
577+ exit 1
327578 fi
328− ''}
329− runHook postInstall
330− '';
331−
332− shellHook = ''
333− export PATH="${shellWrappers}/bin:$PATH"
334− ${toString shellHook}
335− '';
336−}
337−# patches can (if they like) depend on the version and revision of the package.
338−// lib.optionalAttrs (patches != []) { patches = map (p: if builtins.isFunction p then p { inherit (package.identifier) version; inherit revision; } else p) patches; }
339−// haskellLib.optionalHooks {
340− inherit preUnpack postUnpack preConfigure postConfigure
341− preBuild postBuild preCheck postCheck
342− preInstall postInstall preHaddock postHaddock;
343−}
344−// lib.optionalAttrs (stdenv.buildPlatform.libc == "glibc"){ LOCALE_ARCHIVE = "${buildPackages.glibcLocales}/lib/locale/locale-archive"; }
345−))
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.nix+80−78
@@ -1,91 +1,93 @@
1−{ pkgs, buildPackages, stdenv, lib, haskellLib, ghc, buildGHC, fetchurl, writeText, runCommand, pkgconfig, nonReinstallablePkgs, withPackage, hsPkgs }:
1+{ pkgs, buildPackages, evalPackages, stdenv, lib, haskellLib, ghc, compiler-nix-name, fetchurl, pkgconfig, nonReinstallablePkgs, hsPkgs, compiler }:
22
3−{ flags
4−, package
5−, components
6−, cabal-generator
7−
8−, name
9−, sha256
10−, src
11−, revision
12−, revisionSha256
13−, patches
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+ };
148
15−, preUnpack
16−, postUnpack
17−, preConfigure
18−, postConfigure
19−, preBuild
20−, postBuild
21−, preCheck
22−, postCheck
23−, preInstall
24−, postInstall
25−, preHaddock
26−, postHaddock
9+ haddockBuilder = haskellLib.weakCallPackage pkgs ./haddock-builder.nix {
10+ inherit ghc ghcForComponent haskellLib makeConfigFiles nonReinstallablePkgs;
11+ };
2712
28−, shellHook
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+ };
2924
30−, ...
31−}@config:
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+ };
3233
33−let
34− cabalFile = if revision == null || revision == 0 then null else
35− fetchurl {
36− name = "${name}-${toString revision}.cabal";
37− url = "https://hackage.haskell.org/package/${name}/revision/${toString revision}.cabal";
38− sha256 = revisionSha256;
39− };
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+ };
4044
41− defaultSetupSrc = builtins.toFile "Setup.hs" ''
42− import Distribution.Simple
43− main = defaultMain
44− '';
45− defaultSetup = buildPackages.runCommand "default-Setup" { nativeBuildInputs = [buildGHC]; } ''
46− cat ${defaultSetupSrc} > Setup.hs
47− mkdir -p $out/bin
48− ${buildGHC.targetPrefix}ghc Setup.hs --make -o $out/bin/Setup
49− '';
5045
51− setup = if package.buildType == "Simple"
52− then defaultSetup
53− else stdenv.mkDerivation {
54− name = "${name}-setup";
55− nativeBuildInputs = [buildGHC];
56− inherit src;
57− phases = ["unpackPhase" "buildPhase" "installPhase"];
58− buildPhase = ''
59− for f in Setup.hs Setup.lhs; do
60− if [ -f $f ]; then
61− echo Compiling package $f
62− ghc $f --make -o ./Setup
63− setup=$(pwd)/Setup
64− fi
65− done
66− [ -f ./Setup ] || (echo Failed to build Setup && exit 1)
67− '';
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;
6867
69− installPhase = ''
70− mkdir -p $out/bin
71− install ./Setup $out/bin/Setup
72− '';
73− };
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+ };
7473
75− comp-builder = haskellLib.weakCallPackage pkgs ./comp-builder.nix { inherit ghc haskellLib nonReinstallablePkgs withPackage hsPkgs; };
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;
7681
77− buildComp = componentId: component: comp-builder {
78− inherit componentId component package name src flags setup cabalFile cabal-generator patches revision
79− preUnpack postUnpack preConfigure postConfigure
80− preBuild postBuild preCheck postCheck
81− preInstall postInstall preHaddock postHaddock
82− shellHook
83− ;
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;
8487 };
8588
86−in {
87− components = haskellLib.applyComponents buildComp config;
88− inherit (package) identifier;
89− inherit setup cabalFile;
90− isHaskell = true;
89+ inherit shellFor makeConfigFiles;
90+
91+ ghcWithPackages = withPackages { withHoogle = false; };
92+ ghcWithHoogle = withPackages { withHoogle = true; };
9193}
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+ })
builder/with-package-wrapper.nixdeleted−77
@@ -1,77 +0,0 @@
1−# This is a simplified version of the ghcWithPackages wrapper in
2−# nixpkgs, adapted to work with the package database of a single
3−# component.
4−{ lib, stdenv, ghc, runCommand, lndir, makeWrapper
5−}:
6−
7−{ package
8−, configFiles
9−, postBuild ? ""
10−}:
11−
12−let
13− isGhcjs = ghc.isGhcjs or false;
14− ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
15− ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
16− ghcCommandCaps= lib.toUpper ghcCommand';
17− libDir = "$out/lib/${ghcCommand}-${ghc.version}";
18− docDir = "$out/share/doc/ghc/html";
19− packageCfgDir = "${libDir}/package.conf.d";
20−
21−in runCommand "${ghc.name}-with-${package.identifier.name}" {
22− preferLocalBuild = true;
23− passthru = {
24− inherit (ghc) version meta;
25− baseGhc = ghc;
26− inherit package;
27− };
28−} (
29− ''
30− . ${makeWrapper}/nix-support/setup-hook
31−
32− # Start with a ghc...
33− mkdir -p $out/bin
34− ${lndir}/bin/lndir -silent ${ghc} $out
35−
36− # ...and replace package database with the one from target package config.
37− rm -rf ${libDir}
38− mkdir -p ${libDir}
39− ln -s ${configFiles}/package.conf.d ${packageCfgDir}
40−
41− # Wrap compiler executables with correct env variables.
42− # The NIX_ variables are used by the patched Paths_ghc module.
43− # The GHC_ENVIRONMENT variable forces ghc to use the build
44− # dependencies of the component.
45−
46− for prg in ${ghcCommand} ${ghcCommand}i ${ghcCommand}-${ghc.version} ${ghcCommand}i-${ghc.version} runghc runhaskell; do
47− if [[ -x "${ghc}/bin/$prg" ]]; then
48− rm -f $out/bin/$prg
49− makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
50− --set "NIX_${ghcCommandCaps}" "$out/bin/${ghcCommand}" \
51− --set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
52− --set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
53− --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}" \
54− --set "${ghcCommandCaps}_ENVIRONMENT" "${configFiles}/ghc-environment"
55− fi
56− done
57−
58− # Point ghc-pkg to the package database of the component using the
59− # GHC_PACKAGE_PATH variable.
60−
61− for prg in ${ghcCommand}-pkg ${ghcCommand}-pkg-${ghc.version}; do
62− if [[ -x "${ghc}/bin/$prg" ]]; then
63− rm -f $out/bin/$prg
64− makeWrapper ${ghc}/bin/$prg $out/bin/$prg \
65− --set "${ghcCommandCaps}_PACKAGE_PATH" "${configFiles}/package.conf.d"
66− fi
67− done
68−
69− # fixme: check if this is needed
70− # haddock was referring to the base ghc, https://github.com/NixOS/nixpkgs/issues/36976
71− if [[ -x "${ghc}/bin/haddock" ]]; then
72− rm -f $out/bin/haddock
73− makeWrapper ${ghc}/bin/haddock $out/bin/haddock \
74− --set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}"
75− fi
76− ''
77−)
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+)
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+26−121
@@ -1,124 +1,29 @@
1−{ pkgs ? import nixpkgs {}
2−# Use a pinned nixpkgs rather than the one on NIX_PATH
3−, nixpkgs ? ./nixpkgs
4−
5−# You can provide different pins for hackage.nix and stackage.nix if required.
6−# It's also possible to override these sources with NIX_PATH.
7−, hackageSourceJSON ? ./hackage-src.json
8−, stackageSourceJSON ? ./stackage-src.json
9−}:
1+{...}@args:
102
113let
12− # pkg-def's may reference boot packages, but those
13− # are not guaranteed to be available on hackage, as
14− # it is a manual process. They might eventually show
15− # up much later on hackage; but are not installable
16− # anyway. Therefore we just strip them out of the
17− # pkg-def's packages.
18− #
19− # Note: these will need to be provided by alternative
20− # means outside of hackage.
21− boot-pkgs = [ "rts" "ghc" "ghc-boot-th" "ghc-boot" "ghci"
22− "ghc-heap" # since ghc 8.6.
23− ];
24− strip-pkg-def = pkgs: pkg-def: hackage: with pkgs.lib;
25− mapAttrs (k: v: if k == "packages"
26− then filterAttrs (k: _: !(builtins.elem k boot-pkgs)) v
27− else v)
28− (pkg-def hackage);
29−
30− # ghc hackage patches.
31− # these are patches that turn hackage packages into the same as the ones
32− # ghc ships with the supposedly same version. See GHC Track Issue: 16199
33− ghcHackagePatches = import ./patches;
34−
35− compat = import ./lib/compat.nix;
36−
37− # Utility function for downloading a pinned git repo, that can be
38− # overridden with NIX_PATH.
39− fetchExternal = import ./lib/fetch-external.nix;
40−
41− # All packages from Hackage as Nix expressions
42− hackage = import (fetchExternal {
43− name = "hackage-exprs-source";
44− specJSON = hackageSourceJSON;
45− override = "hackage";
46− });
47−
48− # The set of all Stackage snapshots
49− stackage = import (fetchExternal {
50− name = "stackage-snapshot-source";
51− specJSON = stackageSourceJSON;
52− override = "stackage";
53− });
54−
55− packages = self: ({
56− # Utility functions for working with the component builder.
57− haskellLib = let hl = import ./lib { inherit (pkgs) lib; haskellLib = hl; }; in hl;
58−
59− # Create a Haskell package set based on a cabal build plan (plan-to-nix)
60− # and Nix expressions representing cabal packages (cabal-to-nix).
61− mkPkgSet =
62− { pkg-def # Base package set. Either from stackage (via stack-to-nix) or from a cabal projects plan file (via plan-to-nix)
63− , pkg-def-extras ? [] # Additional packages to augment the Base package set `pkg-def` with.
64− , modules ? []
65− }@args:
66−
67− import ./package-set.nix (args // {
68− inherit hackage pkgs;
69− pkg-def = strip-pkg-def pkgs pkg-def;
70− });
71−
72− # Create a Haskell package set based on a Stack configuration.
73− mkStackPkgSet =
74− { stack-pkgs # Path to the output of stack-to-nix
75− , pkg-def-extras ? []
76− , modules ? []
77− }@args:
78−
79− let
80− # The Stackage release referenced in the stack config
81− pkg-def = stackage.${stack-pkgs.resolver};
82− # The compiler referenced in the stack config
83− compiler = (stack-pkgs.extras hackage).compiler or (pkg-def hackage).compiler;
84− in self.mkPkgSet {
85− inherit pkg-def;
86− pkg-def-extras = [ stack-pkgs.extras ] ++ pkg-def-extras;
87− modules = [ ghcHackagePatches.${compiler.nix-name} ] ++ modules;
88− };
89−
90− # Create a Haskell package set based on a Cabal configuration.
91− mkCabalProjectPkgSet =
92− { plan-pkgs # Path to the output of plan-to-nix
93− , pkg-def-extras ? []
94− , modules ? []
95− }@args:
96−
97− let
98− pkg-def = plan-pkgs.pkgs;
99− # The compiler referenced in the stack config
100− compiler = (plan-pkgs.extras hackage).compiler or (pkg-def hackage).compiler;
101− in self.mkPkgSet {
102− inherit pkg-def;
103− pkg-def-extras = [ plan-pkgs.extras ] ++ pkg-def-extras;
104− modules = [ ghcHackagePatches.${compiler.nix-name} ] ++ modules;
105− };
106−
107− # Programs for generating Nix expressions from Cabal and Stack
108− # files.
109− nix-tools = self.callPackage ./nix-tools { inherit fetchExternal; };
110−
111− # Snapshots of Hackage and Stackage, converted to Nix expressions,
112− # regularly updated.
113− inherit hackage stackage;
114−
115− # Scripts for keeping Hackage and Stackage up to date.
116− maintainer-scripts = {
117− update-hackage = self.callPackage ./scripts/update-hackage.nix {};
118− update-stackage = self.callPackage ./scripts/update-stackage.nix {};
119− update-pins = self.callPackage ./scripts/update-pins.nix {};
4+ nixpkgsSrc =
5+ builtins.fetchTarball {
6+ url = "https://github.com/NixOS/nixpkgs/archive/110a2c9ebbf5d4a94486854f18a37a938cfacbbb.tar.gz";
7+ sha256 = "sha256-leWXLchbAbqOlLT6tju631G40SzQWPqaAXQG3zH1Imw=";
1208 };
121− });
122−
123−in
124− pkgs.lib.makeScope pkgs.newScope packages
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.md+12−8
@@ -43,22 +43,26 @@ nix-tools is a Haskell package that provides the following tools:
4343
4444as well as a few other tools used to generate `hackage.nix` and `stackage.nix`.
4545
46−## [haskell.nix](https://github.com/input-output-hk/haskell.nix)
46+## [haskell.nix][]
4747
48−haskell.nix is the runtime system for this Haskell infrastructure. It
49−contains the component builder, as well as the system package and
48+[Haskell.nix][] is the runtime system for this Haskell infrastructure.
49+It contains the component builder, as well as the system package and
5050license mapping. Without haskell.nix the expressions generated by
5151either of the `nix-tools` tools make little sense on their own.
5252
53−## [hackage.nix](https://github.com/input-output-hk/hackage.nix)
53+## [hackage.nix][]
5454
55−hackage.nix provides all cabal expressions from hackage as nix
55+[hackage.nix][] provides all cabal expressions from hackage as nix
5656expressions. It is periodically updated to keep in sync with the set
5757of packages available on hackage.
5858
59−## [stackage.nix](https://github.com/input-output-hk/stackage.nix)
59+## [stackage.nix][]
6060
61−stackage.nix is similar to hackage.nix but provides all stackage
61+[stackage.nix][] is similar to hackage.nix but provides all stackage
6262snapshots (lts, and nightly) as nix expressions. It naturally depends
6363on hackage.nix to resolve package names, versions and revisions to the
64−repsective packages from hackage.nix.
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-architecture.md → docs/dev/dev-architecture.mdrenamed+1−1
@@ -77,7 +77,7 @@ nixpkgs (*This has undergone substantially less testing*).
7777
7878### Component builder
7979
80−To prevent depending on mutliple instances of the same libraries, the
80+To prevent depending on multiple instances of the same libraries, the
8181component builder will try to build every package from scratch and
8282rely as little as possible on packages that are shipped with the GHC
8383distribution. The exceptions are packages that are known to not be
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/maintainer-scripts.md → docs/dev/maintainer-scripts.mdrenamed+2−2
@@ -8,10 +8,10 @@ scripts in this repo.
88
99To run the updater scripts manually, use:
1010
11− nix-build -A maintainer-scripts.update-hackage -o update-hackage.sh
11+ nix-build build.nix -A maintainer-scripts.update-hackage -o update-hackage.sh
1212 ./update-hackage.sh
1313
14− nix-build -A maintainer-scripts.update-stackage -o update-stackage.sh
14+ nix-build build.nix -A maintainer-scripts.update-stackage -o update-stackage.sh
1515 ./update-stackage.sh
1616
1717The scripts will clone the repo, generate the latest data, then
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/removing-with-package-wrapper.md → docs/dev/removing-with-package-wrapper.mdrenamed
The content is the same.
docs/dev/tests.mdnew file+1
@@ -0,0 +1 @@
1+../../test/README.md
docs/index.md+8−83
@@ -1,90 +1,15 @@
11# haskell.nix
22
3−haskell.nix is an alternative Haskell infrastructure for nixpkgs. See
4−[Nixpkgs current Users' Guide to Haskell Infrastructure](https://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure) for comparison.
3+`haskell.nix` is an alternative Haskell infrastructure for Nix[^1].
54
6−## Motivation
5+## Features
76
8−Why do we need another Haskell infrastructure for nix? Doesn't nixpkgs
9−provide a sufficiently good Haskell infrastructure already? These are
10−good questions. And it boils down to the following reasons for us to
11−embark on a new infrastructure:
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
1212
13−- first class support for cross compilation
14−- first class support for package sets
15−- component level control when building packages
16−- reduction of `dontCheck` for cyclic dependencies
17−- reducing build times by building libraries and tests in parallel
18−- more logic encoded in nix expressions
19−- decoupling of Haskell and nixpkgs
13+[^1]: See [Nixpkgs current Users' Guide to Haskell Infrastructure](https://haskell4nix.readthedocs.io/) for comparison.
2014
21−### cross compilation
2215
23−`nixpkgs` has quite good support for cross compilation, however the
24−Haskell infrastructure suffers from the fact that it heavily relies on
25−the `cabal2nix` tool. `cabal2nix` (as well as tools that depend on it
26−like `stack2nix`) flattens the `.cabal` file at conversion time to a
27−given os/arch/flags configuration. Thus to make cross compilation
28−work with `cabal2nix` you will have to generate a separate `nix`
29−expression for each configuration. This becomes a major maintenance
30−burden over time. Therefore the tooling that translates cabal files
31−into nix-expressions for use with Haskell.nix retains the full
32−conditional tree from the cabal file and exposes it to `nix`. In
33−addition it will also expose the `build-type` value, which allows us
34−to cache the `Setup.hs` for build-type simple and not have to rebuild
35−it every time.
36−
37−### package sets
38−
39−We often rely on either package sets as provided by stackage or
40−computed by cabal. `nixpkgs` provides it's own curated package set
41−which might or might not work for the projects we work on.
42−`stack2nix` tries to solve this issue, here we go one step further and
43−provide the infrastructure to allow any form of package set.
44−
45−### component level control
46−
47−The Haskell builder in `nixpkgs` provides control over executables and
48−libraries, to build a specific executable only however is rather
49−tricky to do. This also leads to the cyclic dependencies issue.
50−
51−### cyclic dependencies
52−
53−The Haskell builder in `nixpkgs` exposes packages at the
54−package level. If packages mutually depend on each other through tests
55−and libraries, this leads to cyclic dependencies that nix can't resolve. By
56−exposing the components to nix as separate derivations this will only
57−occur if you have mutually dependent components.
58−
59−### build times
60−
61−The Haskell builder in nixpkgs build package sequentially, first the
62−library than the executables and finally the tests. It then executes
63−the tests before the package is considered done. The upshot of this
64−is that packages are only considered done if the test-suites
65−passed. The downside is that if you have to compile multiple packages
66−the likelihood of them failing is low, you have unnecessarily
67−serialized you build. In a more aggressive setting libraries could
68−start building as early as their dependent libraries are built. Of
69−course they will have to be invalidated later should the test-suites
70−of their dependencies fail, but this way we can make use of parallel
71−building. In an ideal scenario this will reduce build times close to
72−the optimum.
73−
74−### more logic in nix
75−
76−The `cabal2nix` tool has a resolver that resolves system dependencies
77−and licenses to values in `nixpkgs`. This logic ends up being a simple
78−dictionary lookup and therefore can be a simple nix expression. This also
79−offloads some of the work the cabal to nix translation tool needs to
80−do into nix, and as such if changes are necessary (or needed to be
81−performed ad hoc) there is no need to rebuild the conversion tool and
82−subsequently mark every derived expression as out of date.
83−
84−### decoupling
85−
86−Finally, by treating Haskell.nix and nixpkgs as separate entities we
87−can decouple the Haskell packages and infrastructure from the nixpkgs
88−package set, and rely on it to provide us with system packages while
89−staying up to date with Haskell packages from hackage while retaining
90−a stable (or known to be good) nixpkgs revision.
docs/iohk-nix.md+1−10
@@ -52,14 +52,6 @@ let
5252 # our packages
5353 stack-pkgs = import ./.stack-pkgs.nix;
5454
55− # packages which will require TH and thus
56− # will need -fexternal-interpreter treatment
57− # when cross compiling.
58− th-packages = [
59− "hedgehog" "cardano-crypto-wrapper"
60− "cardano-crypto-test" "cardano-chain"
61− "small-steps" "cs-ledger" ];
62−
6355 # Build the packageset with module support.
6456 # We can essentially override anything in the modules
6557 # section.
@@ -93,8 +85,7 @@ let
9385 # work when cross compiling. For now we need to
9486 # list the packages that require template haskell
9587 # explicity here.
96− (iohk-module { nixpkgs = pkgs;
97− inherit th-packages; })
88+ iohk-module
9889 ];
9990 };
10091in
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+```
docs/user-guide-cabal.mddeleted−64
@@ -1,64 +0,0 @@
1−# User Guide (cabal project)
2−
3−Here we will look into how to generate the `pkgs.nix` file for a
4−`cabal.project` project. For the full integration please see the [User
5−Guide](/user-guide)
6−
7−## Using `plan-to-nix`
8−
9−*We currently don't have a `project-to-nix` tool yet, as such creating
10− the relevant `pkgs.nix` file for a `cabal.project` is slightly more
11− involved than for a corresponding stack project*.
12−
13−With [nix-tools](https://github.com/input-output-hk/nix-tools) in
14−`PATH`, we can simply run the following command on a cabal package:
15−
16−```bash
17−# make sure the cabal project is configured (the plan.json file is generated)
18−cabal new-configure
19−# convert the plan.json file into a pkgs.nix file
20−plan-to-nix dist-newstyle/cache/plan.json > nix/plan.nix
21−```
22−
23−This will produce a `nix/plan.nix` file that looks like the following:
24−```nix
25−hackage:
26− {
27− packages = {
28− "o-clock" = hackage.o-clock."0.1.1".revisions.default;
29− ...
30− };
31− compiler = { ... };
32− }
33−```
34−
35−it specifically does not include any of our local packages yet. We
36−will need to run
37−
38−```bash
39−cabal-to-nix $path > nix/$pkg.nix
40−```
41−or
42−```bash
43−cabal-to-nix $url $rev > nix/$pkg.nix
44−```
45−for each local (or source) package.
46−
47−With this in place we can then proceed to build the `nix/pkgs.nix`
48−file as follows:
49−
50−```nix
51−let plan = import ./plan.nix; in
52−{ pkg-def = plan;
53− extras =
54− { local-package-a = ./local-package-a.nix;
55− local-package-b = ./local-package-b.nix;
56− source-import-a = ./source-import-a.nix;
57− source-import-b = ./source-import-b.nix;
58− ...
59− };
60−}
61−```
62−
63−*If you came here from the [User Guide](/user-guide), go back and
64− complete the setup.*
docs/user-guide-stack.mddeleted−39
@@ -1,39 +0,0 @@
1−# User Guide (stack project)
2−
3−Here we will look into how to generate the `pkgs.nix` file for a
4−`stack.yaml` project. For the full integration please see the [User
5−Guide](/user-guide)
6−
7−## Using `stack-to-nix`
8−
9−With [nix-tools](https://github.com/input-output-hk/nix-tools) in
10−`PATH`, we can simply run the following command on a stack project:
11−
12−```bash
13−stack-to-nix -o nix --stack-yaml stack.yaml
14−```
15−
16−This will produce a `nix/pkgs.nix` file that looks like the following:
17−```nix
18−{
19− resolver = "lts-12.17";
20− extras = hackage:
21− {
22− packages = {
23− "o-clock" = hackage.o-clock."0.1.1".revisions.default;
24− ...
25− } // {
26− my-package = ./my-package.nix;
27− ...
28− };
29− };
30−}
31−```
32−
33−This file contains the stackage resolver, as well as set of extra
34−packages. The extras specifies which `extra-deps` (here: o-clock-0.1.1)
35−we wanted to add over the stackage snapshot, and what local
36−packages we want (here: my-package).
37−
38−*If you came here from the [User Guide](/user-guide), go back and
39− complete the setup.*
docs/user-guide.mddeleted−120
@@ -1,120 +0,0 @@
1−# User Guide
2−
3−So you want to use `haskell.nix` with your stack or cabal project. The
4−general approach will be to pick the right tool from `nix-tools` and
5−produce a `pkgs.nix` expressions. Getting a copy of the haskell.nix,
6−hackage.nix (and potentially stackage.nix) source will then equip us
7−to produce derivations that we can `nix build`.
8−
9−## Installing `nix-tools`
10−
11−To build the latest `nix-tools` and store the result at `./nt`, run:
12−
13−```bash
14−nix build -f https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz nix-tools --out-link nt
15−```
16−
17−If you would like to then install `nix-tools` into your profile, run:
18−
19−```bash
20−nix-env -i ./nt
21−```
22−
23−## Setup
24−
25−The general structure will be the same for haskell.nix, independent of
26−the use of stack or cabal. Let us assume for now that we have
27−generated a `pkgs.nix` expression in `nix`.
28−
29−- [Generating a `pkgs.nix` for a stack project](/user-guide-stack)
30−- [Generating a `pkgs.nix` for a cabal project](/user-guide-cabal)
31−
32−## default.nix
33−
34−We will start with defining a helper function in our `default.nix`
35−that will allow us to override the source imports with `-I
36−haskell=/path/to/haskell.nix` in case we need it.
37−
38−```nix
39−{ pkgs ? import <nixpkgs> {}
40−}:
41−let
42− overrideWith = override: default:
43− let
44− try = builtins.tryEval (builtins.findFile builtins.nixPath override);
45− in if try.success then
46− builtins.trace "using search host <${override}>" try.value
47− else
48− default;
49−in
50−```
51−
52−Next we will use this to import `haskell.nix`.
53−
54−**NOTE**: update the `rev` and `sha256` values to the recent ones as
55− found on GitHub. Especially `haskell.hackage` and `haskell.stackage`
56− will evolve with package release on hackage and stackage releases
57− respectively.
58−
59−```nix
60−let
61− haskellLib = pkgs.fetchFromGitHub {
62− owner = "input-output-hk";
63− repo = "haskell.nix";
64− rev = "5180ae9d78756509c81b98b8e6d974e350b15752";
65− sha256 = "0fbnnvymdp2qb09wlqy6ga8wsyhglx607cjdfg510s1gs756v9yx";
66− name = "haskell-lib-source";
67− };
68− haskell = import (overrideWith "haskell" haskellLib) { inherit pkgs; };
69−in
70−```
71−
72−Finally we string this together and produce a package set:
73−
74−```nix
75−let
76− # Import the file you will create in the stack-to-nix or cabal-to-nix step.
77− my-pkgs = import ./nix/pkgs.nix;
78−
79− # Stack projects use the mkStackPkgSet helper function
80− pkgSet = haskell.mkStackPkgSet {
81− stack-pkgs = my-pkgs;
82− pkg-def-overlays = [];
83− modules = [];
84− };
85−
86− # Cabal projects use mkPkgSet
87− pkgSet = haskell.mkPkgSet {
88− pkg-def = my-pkgs.pkg-def;
89− pkg-def-extras = [
90− # these extras will provide additional packages
91− # ontop of the package set. E.g. extra-deps
92− # for stack packages. or local packages for
93− # cabal.projects
94− my-pkgs.extras
95− ];
96− modules = [
97− # specific package overrides would go here
98− # example:
99− # packages.cbors.patches = [ ./one.patch ];
100− # packages.cbors.flags.optimize-gmp = false;
101− ];
102− };
103−
104−in pkgSet.config.hsPkgs // { _config = pkgSet.config; }
105−```
106−
107−With this setup you can then start building the components of
108−interest:
109−
110−```bash
111−nix build -f default.nix $pkg.components.library
112−```
113−
114−to build the library for `$pkg` or
115−
116−```bash
117−nix build -f default.nix $pkg.components.exes.$exe
118−```
119−
120−to build a specific executable. The same holds for test suites and benchmarks.
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.json+7−4
@@ -1,7 +1,10 @@
11{
22 "url": "https://github.com/input-output-hk/hackage.nix",
3− "rev": "d745a1420bdabc6b4b85fa38e0b7b99a426adca2",
4− "date": "2019-05-03T01:09:26+00:00",
5− "sha256": "1lj4vn27k9w8666fz2hn987410nh6c11nlfigvyd3chxh17l9apx",
6− "fetchSubmodules": false
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
710}
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.nix+18−16
@@ -1,19 +1,21 @@
1−lib: with lib.licenses;
2−{ BSD-3-Clause = bsd3;
3− BSD-2-Clause = bsd2;
4− MIT = mit;
5− "MPL-2.0" = mpl20;
6− ISC = isc;
7− "LGPL-2.1-only" = lgpl21;
8− "LGPL-3.0-only" = lgpl3;
9− "GPL-2.0-only" = gpl2;
10− "GPL-3.0-only" = gpl3;
11− "Apache-2.0" = asl20;
1+pkgs:
2+let licenses = import spdx/licenses.nix pkgs;
3+in licenses // {
124 # Generic
13− LicenseRef-Apache = "Apache";
14− LicenseRef-GPL = "GPL";
15− LicenseRef-LGPL = "LGPL";
16− LicenseRef-PublicDomain = publicDomain;
17− LicenseRef-OtherLicense = null;
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+ };
1820 NONE = null;
1921}
lib/cabal-os-arch-comp.nix+1−1
@@ -43,7 +43,7 @@
4343 isPPC64 = false;
4444 isSparc = false;
4545 isArm = false;
46− isAArch64= false;
46+ isAarch64= false;
4747 isMips = false;
4848 isSH = false;
4949 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/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.nix+280−17
@@ -1,8 +1,29 @@
1−{ lib, haskellLib }:
1+{ pkgs, stdenv, lib, haskellLib, recurseIntoAttrs, srcOnly }:
2+
23
34with haskellLib;
45
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 {
627 # Within the package components, these are the attribute names of
728 # nested attrsets.
829 subComponentTypes = [
@@ -19,7 +40,8 @@ with haskellLib;
1940 foldComponents = tys: f: z: conf:
2041 let
2142 comps = conf.components or {};
22− libComp = acc: if comps ? library then f comps.library acc else acc;
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;
2345 subComps = acc:
2446 lib.foldr
2547 (ty: acc': foldrAttrVals f acc' (comps.${ty} or {}))
@@ -30,36 +52,61 @@ with haskellLib;
3052 getAllComponents = foldComponents subComponentTypes (c: acc: [c] ++ acc) [];
3153
3254 componentPrefix = {
33− # Are all of these right?
3455 sublibs = "lib";
35− foreignlibs = "foreignlib";
56+ foreignlibs = "flib";
3657 exes = "exe";
3758 tests = "test";
3859 benchmarks = "bench";
3960 };
4061
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+
4168 applyComponents = f: config:
4269 let
4370 comps = config.components;
4471 applyLibrary = cname: f { cname = config.package.identifier.name; ctype = "lib"; };
45− applySubComp = ctype: cname: f { inherit cname; ctype = componentPrefix.${ctype}; };
46− applyAllComp = f { cname = config.package.identifier.name; ctype = "all"; };
47− libComp = if comps.library == null then {} else lib.mapAttrs applyLibrary (removeAttrs comps (subComponentTypes ++ [ "all" ]));
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" ]));
4881 subComps = lib.mapAttrs
49− (ctype: lib.mapAttrs (applySubComp ctype))
82+ (ctype: attrs: lib.mapAttrs (applySubComp ctype) (buildableAttrs attrs))
5083 (builtins.intersectAttrs (lib.genAttrs subComponentTypes (_: null)) comps);
51− allComp = { all = applyAllComp comps.all; };
52− in subComps // libComp // allComp;
84+ in subComps // libComp;
5385
5486 isLibrary = componentId: componentId.ctype == "lib";
55− isAll = componentId: componentId.ctype == "all";
87+ isExe = componentId: componentId.ctype == "exe";
5688 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;
57106
58107 # Format a componentId as it should appear as a target on the
59108 # command line of the setup script.
60− componentTarget = componentId:
61− if componentId.ctype == "all" then ""
62− else "${componentId.ctype}:${componentId.cname}";
109+ componentTarget = componentId:"${componentId.ctype}:${componentId.cname}";
63110
64111 # Remove null or empty values from an attrset.
65112 optionalHooks = lib.filterAttrs (_: hook: hook != null && hook != "");
@@ -78,6 +125,222 @@ with haskellLib;
78125 #
79126 weakCallPackage = scope: f: args:
80127 let f' = if lib.isFunction f then f else import f;
81− args' = scope // args;
82− in f' (builtins.intersectAttrs (builtins.functionArgs f') args');
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+ };
83346}
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-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.nix+16−2
@@ -1,13 +1,24 @@
1−stdenv: with stdenv.hostPlatform; {
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; {
211 os = if isLinux then "Linux" else
312 if isWindows then "Windows" else
4− if isDarwin then "Osx" else
13+ if isDarwin then "Osx" else
514 if isFreeBSD then "Freebsd" else
615 if isOpenBSD then "Openbsd" else
716 if isNetBSD then "Netbsd" else
817 if isHurd then "Hurd" else
918 if isiOS then "Ios" else
1019 if isAndroid then "Android" else
20+ if isGhcjs then "Ghcjs" else
21+ if isAsterius then "Asterius" else
1122 throw "Unknown OS";
1223 arch = if isx86 && is32bit then "I386" else
1324 if isx86 && is64bit then "X86_64" else
@@ -16,5 +27,8 @@ stdenv: with stdenv.hostPlatform; {
1627 if isAarch32 then "Arm" else
1728 if isAarch64 then "Aarch64" else
1829 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
1933 throw "Unknown Arch";
2034}
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/pkgconf-nixpkgs-map.nix+188−10
@@ -1,11 +1,189 @@
11# pkgconfig entries to nixpkgs map
2−pkgs: {
3− cairo-pdf = pkgs.cairo;
4− cairo-ps = pkgs.cairo;
5− cairo-svg = pkgs.cairo;
6− xft = pkgs.xorg.libXft;
7− xau = pkgs.xorg.libXau;
8− libR = pkgs.R;
9− fftw3f = pkgs.fftwFloat;
10− fftw3 = pkgs.fftw;
11− }
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.nix+122−33
@@ -1,47 +1,136 @@
1−# Maps of system pkg refenreces from
2−# cabal file to nixpkgs pkgs.
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
35pkgs:
4−# fetchgit should always come from the buildPackages
5−# if it comes from the targetPackages we won't even
6−# be able to execute it.
7− { fetchgit = pkgs.buildPackages.fetchgit; }
8−# haskell lib -> nix lib mapping
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
920# -- linux
10−// { crypto = pkgs.openssl;
11− "c++" = null; # no libc++
12− "stdc++" = null; "stdc++-6" = null;
13− ssl = pkgs.openssl;
14− z = pkgs.zlib;
15− pthread = null; # available by default
16− GL = pkgs.libGL;
17− GLU = pkgs.libGLU;
18− alut = pkgs.freealut;
19− X11 = pkgs.xorg.libX11;
20− Xrandr = pkgs.xorg.libXrandr;
21− Xext = pkgs.xorg.libXext;
22− Xi = pkgs.xorg.libXi;
23− Xxf86vm = pkgs.xorg.libXxf86vm;
24− Xcursor = pkgs.xorg.libXcursor;
25− Xinerama = pkgs.xorg.libXinerama;
26− mysqlclient = pkgs.mysql;
27− Imlib2 = pkgs.imlib2;
28− asound = pkgs.alsaLib;
29− ffi = null;
30− }
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+}
31118# -- windows
32119// { advapi32 = null; gdi32 = null; imm32 = null; msimg32 = null;
33120 shell32 = null; shfolder = null; shlwapi = null; user32 = null;
34− winmm = null;
121+ ole32 = null; rpcrt4 = null;
122+ winmm = null; userenv = null;
35123 kernel32 = null; ws2_32 = null;
36124 # this should be bundled with gcc.
37125 # if it's not we have more severe
38126 # issues anyway.
39− gcc_s_seh-1 = null;
40− ssl32 = null; eay32 = pkgs.openssl;
127+ ssl32 = null; eay32 = [ openssl ];
41128 iphlpapi = null; # IP Help API
42129 msvcrt = null; # this is the libc
43130 Crypt32 = null;
131+ mswsock = null;
132+ bcrypt = null;
44133 }
45134# -- os x
46−# NB: these map almost 1:1 to the famework names
47−// pkgs.darwin.apple_sdk.frameworks
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
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
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+35−7
This diff is too big to show here.
modules/cabal-project.nix+134
This diff is too big to show here.
modules/cabal.nix+6−1
This diff is too big to show here.
modules/component-driver.nix+70−23
This diff is too big to show here.
modules/configuration-nix.nix+115−3
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+7−2
This diff is too big to show here.
modules/hix-project.nix+47
This diff is too big to show here.
modules/package.nix+209−36
This diff is too big to show here.
modules/plan.nix+171−32
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.
nix-tools/.plan-pkgs.nix−381
This diff is too big to show here.
nix-tools/.plan.nix/hackage-db.nix−67
This diff is too big to show here.
nix-tools/.plan.nix/haskell-src-meta.nix−50
This diff is too big to show here.
nix-tools/.plan.nix/hnix.nix−197
This diff is too big to show here.
nix-tools/.plan.nix/nix-tools.nix−149
This diff is too big to show here.
nix-tools/default.nix−32
This diff is too big to show here.
nix-tools/nix-tools-src.json−7
This diff is too big to show here.
nix-tools/pkgs.nix−424
This diff is too big to show here.
nixpkgs/default.nix−7
This diff is too big to show here.
nixpkgs/github.json−6
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+25−7
This diff is too big to show here.
patches/darcs-setup.patch+120
This diff is too big to show here.
patches/default.nix+2
This diff is too big to show here.
patches/ghc862/default.nix+1
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/ghc863/default.nix+1
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/ghc864/default.nix+1
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/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+6−2
This diff is too big to show here.
release-linux-only.nix+5
This diff is too big to show here.
release.nix+68−5
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/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+6−5
This diff is too big to show here.
scripts/update-hackage.nix+11−2
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+3−3
This diff is too big to show here.
scripts/update-stackage.nix+4−16
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+7−4
This diff is too big to show here.
test/README.md+12−1
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/default.nix+11−13
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/plan.nix−23
This diff is too big to show here.
test/builder-haddock/test-haddock.cabal+1−1
This diff is too big to show here.
test/builder-haddock/test-haddock.nix+48−19
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/default.nix+38−17
This diff is too big to show here.
test/cabal-22/plan.nix−19
This diff is too big to show here.
test/cabal-22/project.cabal+21−7
This diff is too big to show here.
test/cabal-22/project.nix−41
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/cabal-simple.cabal+2−2
This diff is too big to show here.
test/cabal-simple/cabal-simple.nix−48
This diff is too big to show here.
test/cabal-simple/default.nix+41−36
This diff is too big to show here.
test/cabal-simple/plan.nix−111
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/cabal-sublib.cabal+4−3
This diff is too big to show here.
test/cabal-sublib/cabal-sublib.nix−33
This diff is too big to show here.
test/cabal-sublib/default.nix+35−37
This diff is too big to show here.
test/cabal-sublib/plan.nix−111
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+237−14
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/.stack.nix/stack-simple.nix−32
This diff is too big to show here.
test/stack-simple/default.nix+14−24
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/stack-pkgs.nix−5
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+8−3
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+87−3
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+187−10
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/default.nix+68−48
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/plan.nix−99
This diff is too big to show here.
test/with-packages/test-with-packages.cabal+1−1
This diff is too big to show here.
test/with-packages/test-with-packages.nix−36
This diff is too big to show here.