git.iko.soy/typeable/stackage2nix
on master help sign in
30 files changed+6845−308
since splitsnapshots
unifiedsplit
.gitignore+3−2 .travis.yml+27−3 CHANGELOG.md+49 README.md+118−3 ci-stackage2nix+26 nix-test−23 nix/README.md+25 nix/haskell-packages/configuration-packages.nix+40 nix/haskell-packages/default.nix+187 nix/haskell-packages/packages.nix+4832 nix/lib.nix+60 nix/stackage2nix/default.nix+22 src/AllCabalHashes.hs+88 src/Distribution/Nixpkgs/Haskell/FromStack.hs+101 src/Distribution/Nixpkgs/Haskell/FromStack/Package.hs+151 src/Distribution/Nixpkgs/Haskell/Packages/PrettyPrinting.hs+2 src/Distribution/Nixpkgs/Haskell/Stack.hs+54−70 src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+114−30 src/Language/Nix/FilePath.hs+7−4 src/LtsHaskell.hs+98 src/Runner.hs+170−42 src/Runner/Cli.hs+123−36 src/Stack/Config.hs+138−37 src/Stack/Config/Yaml.hs+68−18 src/Stack/Types.hs+3−4 stack.yaml+10−9 stack2nix.cabal → stackage2nix.cabal+29−14 app/Main.hs → stackage2nix/Main.hs test/Stack/Config/YamlSpec.hs+109−13 test/Stack/ConfigSpec.hs+191
.gitignore+3−2
@@ -1,3 +1,4 @@
11.stack-work
2−default.nix
3−/nix
2+Paths_stackage2nix.hs
3+/*.nix
4+/result*
.travis.yml+27−3
@@ -1,15 +1,38 @@
1−sudo: false
1+sudo: required
2+
3+language: generic
24
35addons:
46 apt:
57 packages:
68 - libgmp-dev
79
8−# Caching so the next build will be fast too.
910cache:
1011 directories:
12+ - $HOME/.local/bin
1113 - $HOME/.stack
1214
15+jobs:
16+ include:
17+ - stage: build
18+ - stage: bootstrap
19+ install:
20+ # Install Nix
21+ - mkdir -p ~/.nix
22+ - sudo mkdir -p /nix
23+ - sudo chmod a+w /nix
24+ - sudo mount --bind ~/.nix /nix
25+ - curl https://nixos.org/nix/install | sh
26+ - source ~/.nix-profile/etc/profile.d/nix.sh
27+ # nixpkgs-unstable not supported
28+ - nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
29+ - nix-channel --update
30+ script:
31+ - nix-env -i cabal-install nix-prefetch-scripts
32+ - cabal update
33+ - nix-build nix/stackage2nix --dry-run
34+ - ./ci-stackage2nix --dry-run
35+
1336before_install:
1437# Download and unpack the stack executable
1538- mkdir -p ~/.local/bin
@@ -17,4 +40,5 @@ before_install:
1740- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
1841
1942script:
20−- stack -j2 --no-terminal --install-ghc test
43+- stack --no-terminal --install-ghc build --test --haddock --no-haddock-deps --copy-bins --fast --pedantic
44+
CHANGELOG.mdnew file+49
@@ -0,0 +1,49 @@
1+# 0.7.2
2+- Build with ghc-8.4
3+- Drop compatibility with Cabal<2.2
4+- Don't check extra-deps when generating derivation from stack.yaml
5+
6+# 0.7.1
7+- Generate stack packages `stack-yaml-packages.nix`
8+
9+# 0.7.0
10+- Add compatibility with nixos-18.03
11+- Drop compatibility with nixos-17-09
12+- Add partial support for new stack extra-deps syntax.
13+ https://docs.haskellstack.org/en/stable/yaml_configuration/#packages-and-extra-deps
14+ Supported same syntax for packages and extra-deps sections
15+
16+# 0.6.1
17+- Pass extra `buildHaskellPackages` argument to `makePackageSet` function
18+
19+# 0.6.0
20+- Replace call to `<nixpkgs/pkgs/development/haskell-modules>` in generated
21+ Haskell packages with `makePackageSet` library function
22+
23+# 0.5.0
24+- Add `--with-stackage` and `--with-stackage-closure` flag generates stackage
25+- Add `--extra-deps-revision-latest` flag. Changes generation strategy for the
26+ direct dependencies of the stack.yaml extra-deps. Default strategy is to
27+ generate exact revision defined in the Stackage config. With this flag
28+ enabled, direct dependencies of the stack.yaml extra-deps will be generated
29+ with latest revision available on Hackage. This may help when Cabal fails to
30+ resolve dependencies of extra-deps, and dependences are fixed in the latest
31+ revision
32+- Upd by default stackage2nix generates override of pre-generated Stackage
33+ packages set.
34+- Upd generated Stackage packages with `doCheck` and `runHaddock` enabled by
35+ default
36+- Remove `--do-check-stackage` flag (enabled by default)
37+- Remove `--do-haddock-stackage` flag (enabled by default)
38+- Remove `--no-packages-closure` flag (use `--with-stackage-closure`)
39+- Remove `cabal2nix < 2.7.2` support #45
40+
41+# 0.4.0
42+- Add `--resolver` option to generate full stackage packages set
43+- Add Nix wrapper, see `nix/README.md`
44+- Upd support cabal2nix >2.5
45+- Fix honor `--hackage-db` flag
46+
47+# 0.3.0
48+- Initial Hackage release
49+- Add CHANGELOG.md
README.md+118−3
@@ -1,5 +1,120 @@
1−# stack2nix
1+# stackage2nix (DEPRECATED)
22
3−[![Build Status](https://travis-ci.org/4e6/stack2nix.svg?branch=master)](https://travis-ci.org/4e6/stack2nix)
3+[![Build Status](https://travis-ci.org/typeable/stackage2nix.svg?branch=master)](https://travis-ci.org/typeable/stackage2nix)
44
5−`stack2nix` converts a single Stack file into a Nix build expression.
5+`stackage2nix` converts a Stack file into a Nix Haskell packages set.
6+
7+# Create build derivation from stack.yaml
8+
9+## Generate targets from stack.yaml only
10+
11+```
12+stack exec -- stackage2nix .
13+```
14+
15+Command creates file `default.nix` which overrides `haskell.packages.stackage`
16+packages set. You should use
17+[typeable/nixpkgs-stackage](https://github.com/typeable/nixpkgs-stackage) overlay that
18+adds LTS Stackage packages to Nixpkgs.
19+
20+Build package with overlay installed:
21+
22+```
23+nix-build -A stackage2nix
24+```
25+
26+## Generate Stackage packages for the build
27+
28+If you don't want to use Stackage overlay, stackage2nix can generate required
29+packages with `--with-stackage-closure` flag.
30+
31+``` bash
32+stack exec -- stackage2nix \
33+ --all-cabal-hashes /path/to/commercialhaskell/all-cabal-hashes \
34+ --lts-haskell /path/to/fpco/lts-haskell \
35+ --with-stackage-closure \
36+ ./stack.yaml
37+```
38+
39+To generate Stackage packages, supply the `--all-cabal-hashes` flag
40+with the path to a local clone of
41+[all-cabal-hashes](https://github.com/commercialhaskell/all-cabal-hashes)
42+checked out on the `hackage` branch and supply the `--lts-haskell` flag
43+with the path to a local clone of
44+[lts-haskell](https://github.com/commercialhaskell/lts-haskell).
45+
46+### stackage2nix wrapper
47+
48+You can use stackage2nix wrapper from `nix` directory that adds required flags:
49+
50+```
51+nix-env -i -f ./nix/stackage2nix
52+stackage2nix --with-stackage-closure ./stack.yaml
53+```
54+
55+This command will produce `packages.nix` and `configuration-packages.nix`
56+Stackage packages and its override in `default.nix`
57+
58+## Generate full Stackage
59+
60+`--with-stackage` parameter generates full Stackage LTS in addition to the
61+targets from `stack.yaml`
62+
63+```
64+nix-env -i -f ./nix/stackage2nix
65+stackage2nix --with-stackage ./stack.yaml
66+```
67+
68+## Generate Stackage from LTS resolver
69+
70+You can also generate only Stackage packages set from the resolver:
71+
72+```
73+nix-env -i -f ./nix/stackage2nix
74+stackage2nix --resolver lts-10.0
75+```
76+
77+This command will produce Stackage packages `packages.nix`, packages config
78+`configuration-packages.nix` and a Haskell packages set `default.nix`.
79+
80+## Runtime dependencies
81+
82+- `nix-env` is required to be on PATH by the
83+ [distribution-nixpkgs](https://hackage.haskell.org/package/distribution-nixpkgs)
84+ dependency
85+- `nix-prefetch-scripts` is required on PATH if you have git dependencies in
86+ `stack.yaml`
87+
88+## Override result derivation
89+
90+Complex projects may require some extra customization.
91+Snippet `override.nix` below shows a minimal example of how to apply additional
92+overrides on top of Haskell packages set produced by `stackage2nix`.
93+
94+``` nix
95+with import <nixpkgs> {};
96+with haskell.lib;
97+let haskellPackages = import ./. {};
98+in haskellPackages.override {
99+ overrides = self: super: {
100+ stackage2nix = disableSharedExecutables super.stackage2nix;
101+ };
102+}
103+```
104+
105+```
106+nix-build -A stackage2nix override.nix
107+```
108+
109+For more complex overrides and detailed information on how to work with Haskell packages in Nix, see Nixpkgs manual [User’s Guide to the Haskell Infrastructure](http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure)
110+
111+## Tests
112+
113+Integration tests that build stackage2nix form different yaml configs:
114+
115+``` bash
116+STACKAGE_REPO=<path/to/stackage/repo> \
117+ALL_CABAL_HASHES=<path/to/all-cabal-hashes/repo> \
118+STACK_FILE=stack-ghc-7103.yaml \
119+./ci-stackage2nix
120+```
ci-stackage2nixnew file+26
@@ -0,0 +1,26 @@
1+#!/usr/bin/env bash
2+
3+set -e
4+
5+STACKAGE2NIX_WORK_DIR=${STACKAGE2NIX_WORK_DIR:-$HOME}
6+STACKAGE_REPO=${STACKAGE_REPO:-$STACKAGE2NIX_WORK_DIR/lts-haskell}
7+ALL_CABAL_HASHES_REPO=${ALL_CABAL_HASHES_REPO:-$STACKAGE2NIX_WORK_DIR/all-cabal-hashes}
8+STACK_FILE=${STACK_YAML:-stack.yaml}
9+
10+if [ ! -d "$STACKAGE_REPO" ]; then
11+ git clone --depth 1 https://github.com/commercialhaskell/lts-haskell.git "$STACKAGE_REPO"
12+fi
13+
14+if [ ! -d "$ALL_CABAL_HASHES_REPO" ]; then
15+ git clone --branch hackage https://github.com/commercialhaskell/all-cabal-hashes.git "$ALL_CABAL_HASHES_REPO"
16+fi
17+
18+set -x
19+time stackage2nix \
20+ --lts-haskell "$STACKAGE_REPO" \
21+ --all-cabal-hashes "$ALL_CABAL_HASHES_REPO" \
22+ --hackage-db "$HOME/.cabal/packages/hackage.haskell.org/01-index.tar" \
23+ --with-stackage-closure \
24+ "$STACK_FILE"
25+
26+nix-build -o "result-$(basename $STACK_FILE)" -A stackage2nix "$@"
nix-testdeleted−23
@@ -1,23 +0,0 @@
1−#!/usr/bin/env bash
2−
3−set -e
4−
5−LTS_HASKELL_DIR=${LTS_HASKELL_DIR:-~/lts-haskell}
6−ALL_CABAL_HASHES_DIR=${ALL_CABAL_HASHES_DIR:-~/all-cabal-hashes}
7−
8−if [ ! -d "$LTS_HASKELL_DIR" ]; then
9− git clone --depth 1 https://github.com/fpco/lts-haskell.git "$LTS_HASKELL_DIR"
10−fi
11−
12−if [ ! -d "$ALL_CABAL_HASHES_DIR" ]; then
13− git clone --depth 1 --branch hackage https://github.com/commercialhaskell/all-cabal-hashes.git "$ALL_CABAL_HASHES_DIR"
14−fi
15−
16−set -x
17−stack exec -- stack2nix \
18− --lts-haskell "$LTS_HASKELL_DIR" \
19− --all-cabal-hashes "$ALL_CABAL_HASHES_DIR" \
20− .
21−set +x
22−
23−nix-build -A stack2nix "$@"
nix/README.mdnew file+25
@@ -0,0 +1,25 @@
1+# Nix
2+
3+Nix infrastructure.
4+
5+## stackage2nix
6+
7+Provides ready-to-use `stackage2nix` wrapper with
8+`--all-cabal-hashes` and `--lts-haskell` flags set up. It also has all
9+required executables on `PATH`.
10+
11+Install stackage2nix:
12+
13+```
14+$ nix-env -i -f ./stackage2nix
15+```
16+
17+## haskell-packages
18+
19+Directory contains Stackage LTS packages generated by `stackage2nix` from this
20+project's `stack.yaml`.
21+
22+## lib.nix
23+
24+Provides Nix expressions for `hackage-db`, `all-cabal-hashes` and `lts-haskell`
25+sources.
nix/haskell-packages/configuration-packages.nixnew file+40
@@ -0,0 +1,40 @@
1+# Generated by stackage2nix 0.7.1 from "/home/dbushev/projects/commercialhaskell/lts-haskell/lts-12.2.yaml"
2+{ pkgs, haskellLib }:
3+
4+with haskellLib; self: super: {
5+
6+ # core packages
7+ "array" = null;
8+ "base" = null;
9+ "binary" = null;
10+ "bytestring" = null;
11+ "containers" = null;
12+ "deepseq" = null;
13+ "directory" = null;
14+ "filepath" = null;
15+ "ghc-boot" = null;
16+ "ghc-boot-th" = null;
17+ "ghc-prim" = null;
18+ "ghci" = null;
19+ "hpc" = null;
20+ "integer-gmp" = null;
21+ "pretty" = null;
22+ "process" = null;
23+ "rts" = null;
24+ "template-haskell" = null;
25+ "terminfo" = null;
26+ "time" = null;
27+ "transformers" = null;
28+ "unix" = null;
29+ # break cycle: HUnit call-stack nanospec hspec hspec-core clock tasty async hashable test-framework-hunit tasty-quickcheck tasty-hunit hspec-expectations hspec-meta quickcheck-io silently temporary exceptions hspec-discover stringbuilder
30+ "stringbuilder" = dontCheck super.stringbuilder;
31+ "hspec-discover" = dontCheck super.hspec-discover;
32+ "exceptions" = dontCheck super.exceptions;
33+ "temporary" = dontCheck super.temporary;
34+ "silently" = dontCheck super.silently;
35+ "hashable" = dontCheck super.hashable;
36+ "async" = dontCheck super.async;
37+ "clock" = dontCheck super.clock;
38+ "nanospec" = dontCheck super.nanospec;
39+
40+}
nix/haskell-packages/default.nixnew file+187
@@ -0,0 +1,187 @@
1+# Generated by stackage2nix 0.7.1 from "../../stack.yaml"
2+{ nixpkgs ? import <nixpkgs> {} }:
3+
4+with nixpkgs;
5+let
6+ inherit (stdenv.lib) extends;
7+ haskellLib = callPackage (nixpkgs.path + "/pkgs/development/haskell-modules/lib.nix") {};
8+ stackagePackages = import ./packages.nix;
9+ stackageConfig = import ./configuration-packages.nix { inherit pkgs haskellLib; };
10+ stackPackages =
11+ { pkgs, stdenv, callPackage }:
12+
13+ self: {
14+ "stackage2nix" = callPackage
15+ ({ mkDerivation, aeson, base, bytestring, Cabal, cabal2nix
16+ , containers, deepseq, distribution-nixpkgs, exceptions, filepath
17+ , gitlib, gitlib-libgit2, hopenssl, hspec, inflections
18+ , language-nix, lens, network-uri, optparse-applicative, pretty
19+ , QuickCheck, shakespeare, stackage-curator, text
20+ , unordered-containers, yaml
21+ }:
22+ mkDerivation {
23+ pname = "stackage2nix";
24+ version = "0.7.1";
25+ src = ../../.;
26+ isLibrary = true;
27+ isExecutable = true;
28+ libraryHaskellDepends = [
29+ aeson base bytestring Cabal cabal2nix containers deepseq
30+ distribution-nixpkgs exceptions filepath gitlib gitlib-libgit2
31+ hopenssl inflections language-nix lens network-uri
32+ optparse-applicative pretty QuickCheck stackage-curator text
33+ unordered-containers yaml
34+ ];
35+ executableHaskellDepends = [ base ];
36+ testHaskellDepends = [
37+ base bytestring Cabal hspec network-uri pretty shakespeare text
38+ yaml
39+ ];
40+ homepage = "https://github.com/typeable/stackage2nix#readme";
41+ description = "Convert Stack files into Nix build instructions";
42+ license = stdenv.lib.licenses.bsd3;
43+ }) {};
44+ "yaml" = callPackage
45+ ({ mkDerivation, aeson, attoparsec, base, bytestring, conduit
46+ , containers, directory, filepath, resourcet, scientific
47+ , semigroups, template-haskell, text, transformers
48+ , unordered-containers, vector
49+ }:
50+ mkDerivation {
51+ pname = "yaml";
52+ version = "0.8.31.1";
53+ sha256 = "1ba1451917e6cb1df6081e2e14c2e4dcec6969b9b25a5d72db96942c3e6d8b53";
54+ isLibrary = true;
55+ isExecutable = true;
56+ libraryHaskellDepends = [
57+ aeson attoparsec base bytestring conduit containers directory
58+ filepath resourcet scientific semigroups template-haskell text
59+ transformers unordered-containers vector
60+ ];
61+ doHaddock = false;
62+ doCheck = false;
63+ homepage = "http://github.com/snoyberg/yaml/";
64+ description = "Support for parsing and rendering YAML documents";
65+ license = stdenv.lib.licenses.bsd3;
66+ }) {};
67+ "stackage-curator" = callPackage
68+ ({ mkDerivation, aeson, amazonka, amazonka-core, amazonka-s3, async
69+ , base, blaze-html, bytestring, Cabal, classy-prelude-conduit
70+ , conduit, conduit-extra, containers, cryptonite
71+ , cryptonite-conduit, data-default-class, directory, exceptions
72+ , fetchgit, filepath, hashable, html-conduit, http-client
73+ , http-client-tls, http-conduit, lucid, memory, mime-types
74+ , mono-traversable, mtl, old-locale, optparse-applicative
75+ , optparse-simple, process, resourcet, safe, semigroups, stm, store
76+ , streaming-commons, syb, tar, temporary, text, time, transformers
77+ , unix-compat, unordered-containers, utf8-string, vector
78+ , xml-conduit, xml-types, yaml, zlib
79+ }:
80+ mkDerivation {
81+ pname = "stackage-curator";
82+ version = "0.17.0.0";
83+ src = fetchgit {
84+ url = "https://github.com/fpco/stackage-curator.git";
85+ sha256 = "0hymmzn59aszqxqs5s0mba8pzrky8wpkmy7hdgaxqrhg0syc6mkw";
86+ rev = "73c5ed06602990c33d3fec1711e27875f283b6bf";
87+ };
88+ isLibrary = true;
89+ isExecutable = true;
90+ libraryHaskellDepends = [
91+ aeson amazonka amazonka-core amazonka-s3 async base blaze-html
92+ bytestring Cabal classy-prelude-conduit conduit conduit-extra
93+ containers cryptonite cryptonite-conduit data-default-class
94+ directory exceptions filepath hashable html-conduit http-client
95+ http-client-tls http-conduit lucid memory mime-types
96+ mono-traversable mtl old-locale process resourcet safe semigroups
97+ stm store streaming-commons syb tar temporary text time
98+ transformers unix-compat unordered-containers utf8-string vector
99+ xml-conduit xml-types yaml zlib
100+ ];
101+ executableHaskellDepends = [
102+ aeson amazonka amazonka-core amazonka-s3 async base blaze-html
103+ bytestring Cabal classy-prelude-conduit conduit conduit-extra
104+ containers cryptonite cryptonite-conduit data-default-class
105+ directory exceptions filepath hashable html-conduit http-client
106+ http-client-tls http-conduit lucid memory mime-types
107+ mono-traversable mtl old-locale optparse-applicative
108+ optparse-simple process resourcet safe semigroups stm store
109+ streaming-commons syb tar temporary text time transformers
110+ unix-compat unordered-containers utf8-string vector xml-conduit
111+ xml-types yaml zlib
112+ ];
113+ doHaddock = false;
114+ doCheck = false;
115+ homepage = "https://github.com/fpco/stackage-curator#readme";
116+ description = "Tools for curating Stackage bundles";
117+ license = stdenv.lib.licenses.mit;
118+ }) {};
119+ "gitlib" = callPackage
120+ ({ mkDerivation, base, base16-bytestring, bytestring, conduit
121+ , conduit-combinators, containers, directory, exceptions, fetchgit
122+ , filepath, hashable, mtl, resourcet, semigroups, tagged, text
123+ , time, transformers, unix, unliftio, unliftio-core
124+ , unordered-containers
125+ }:
126+ mkDerivation {
127+ pname = "gitlib";
128+ version = "3.1.2";
129+ src = fetchgit {
130+ url = "https://github.com/jwiegley/gitlib.git";
131+ sha256 = "0rp6lnbbbf9m6fvmx7mzknrk89ly0gbqaxsfx38cn6qdy7r54xcm";
132+ rev = "70c99759b8b9377f67492fe29afb32f05882409d";
133+ };
134+ postUnpack = "sourceRoot+=/gitlib; echo source root reset to $sourceRoot";
135+ libraryHaskellDepends = [
136+ base base16-bytestring bytestring conduit conduit-combinators
137+ containers directory exceptions filepath hashable mtl resourcet
138+ semigroups tagged text time transformers unix unliftio
139+ unliftio-core unordered-containers
140+ ];
141+ doHaddock = false;
142+ doCheck = false;
143+ homepage = "https://github.com/jwiegley/gitlib";
144+ description = "API library for working with Git repositories";
145+ license = stdenv.lib.licenses.mit;
146+ }) {};
147+ "gitlib-libgit2" = callPackage
148+ ({ mkDerivation, base, bytestring, conduit, conduit-combinators
149+ , containers, directory, exceptions, fast-logger, fetchgit
150+ , filepath, gitlib, hlibgit2, mmorph, monad-loops, mtl, resourcet
151+ , stm, stm-conduit, tagged, template-haskell, text, text-icu, time
152+ , transformers, transformers-base, unliftio, unliftio-core
153+ }:
154+ mkDerivation {
155+ pname = "gitlib-libgit2";
156+ version = "3.1.1";
157+ src = fetchgit {
158+ url = "https://github.com/jwiegley/gitlib.git";
159+ sha256 = "0rp6lnbbbf9m6fvmx7mzknrk89ly0gbqaxsfx38cn6qdy7r54xcm";
160+ rev = "70c99759b8b9377f67492fe29afb32f05882409d";
161+ };
162+ postUnpack = "sourceRoot+=/gitlib-libgit2; echo source root reset to $sourceRoot";
163+ libraryHaskellDepends = [
164+ base bytestring conduit conduit-combinators containers directory
165+ exceptions fast-logger filepath gitlib hlibgit2 mmorph monad-loops
166+ mtl resourcet stm stm-conduit tagged template-haskell text text-icu
167+ time transformers transformers-base unliftio unliftio-core
168+ ];
169+ doHaddock = false;
170+ doCheck = false;
171+ description = "Libgit2 backend for gitlib";
172+ license = stdenv.lib.licenses.mit;
173+ }) {};
174+ };
175+
176+ pkgOverrides = self: stackPackages {
177+ inherit pkgs stdenv;
178+ inherit (self) callPackage;
179+ };
180+in callPackage (nixpkgs.path + "/pkgs/development/haskell-modules") {
181+ ghc = pkgs.haskell.compiler.ghc843;
182+ buildHaskellPackages = buildPackages.haskell.packages.ghc843;
183+ compilerConfig = self: extends pkgOverrides (stackageConfig self);
184+ initialPackages = stackagePackages;
185+ configurationCommon = args: self: super: {};
186+ inherit haskellLib;
187+}
nix/haskell-packages/packages.nixnew file+4832
@@ -0,0 +1,4832 @@
1+# Generated by stackage2nix 0.7.1 from "/home/dbushev/projects/commercialhaskell/lts-haskell/lts-12.2.yaml"
2+{ pkgs, stdenv, callPackage }:
3+
4+self: {
5+ "Cabal" = callPackage
6+ ({ mkDerivation, array, base, binary, bytestring, containers
7+ , deepseq, directory, filepath, mtl, parsec, pretty, process, text
8+ , time, transformers, unix
9+ }:
10+ mkDerivation {
11+ pname = "Cabal";
12+ version = "2.2.0.1";
13+ sha256 = "0yqa6fm9jvr0ka6b1mf17bf43092dc1bai6mqyiwwwyz0h9k1d82";
14+ setupHaskellDepends = [ mtl parsec ];
15+ libraryHaskellDepends = [
16+ array base binary bytestring containers deepseq directory filepath
17+ mtl parsec pretty process text time transformers unix
18+ ];
19+ doCheck = false;
20+ homepage = "http://www.haskell.org/cabal/";
21+ description = "A framework for packaging Haskell software";
22+ license = stdenv.lib.licenses.bsd3;
23+ }) {};
24+ "ChasingBottoms" = callPackage
25+ ({ mkDerivation, array, base, containers, mtl, QuickCheck, random
26+ , syb
27+ }:
28+ mkDerivation {
29+ pname = "ChasingBottoms";
30+ version = "1.3.1.4";
31+ sha256 = "06cynx6hcbfpky7qq3b3mjjgwbnaxkwin3znbwq4b9ikiw0ng633";
32+ libraryHaskellDepends = [
33+ base containers mtl QuickCheck random syb
34+ ];
35+ testHaskellDepends = [
36+ array base containers mtl QuickCheck random syb
37+ ];
38+ description = "For testing partial and infinite values";
39+ license = stdenv.lib.licenses.mit;
40+ }) {};
41+ "Glob" = callPackage
42+ ({ mkDerivation, base, containers, directory, dlist, filepath
43+ , HUnit, QuickCheck, test-framework, test-framework-hunit
44+ , test-framework-quickcheck2, transformers, transformers-compat
45+ }:
46+ mkDerivation {
47+ pname = "Glob";
48+ version = "0.9.2";
49+ sha256 = "1rbwcq9w9951qsnp13vqcm9r01yax2yh1wk8s4zxa3ckk9717iwg";
50+ libraryHaskellDepends = [
51+ base containers directory dlist filepath transformers
52+ transformers-compat
53+ ];
54+ testHaskellDepends = [
55+ base containers directory dlist filepath HUnit QuickCheck
56+ test-framework test-framework-hunit test-framework-quickcheck2
57+ transformers transformers-compat
58+ ];
59+ homepage = "http://iki.fi/matti.niemenmaa/glob/";
60+ description = "Globbing library";
61+ license = stdenv.lib.licenses.bsd3;
62+ }) {};
63+ "HTTP" = callPackage
64+ ({ mkDerivation, array, base, bytestring, case-insensitive, conduit
65+ , conduit-extra, deepseq, http-types, httpd-shed, HUnit, mtl
66+ , network, network-uri, parsec, pureMD5, split, test-framework
67+ , test-framework-hunit, time, wai, warp
68+ }:
69+ mkDerivation {
70+ pname = "HTTP";
71+ version = "4000.3.12";
72+ sha256 = "140r6qy1ay25piv0z3hih11zhigyi08nkwc32097j43pjff6mzx3";
73+ libraryHaskellDepends = [
74+ array base bytestring mtl network network-uri parsec time
75+ ];
76+ testHaskellDepends = [
77+ base bytestring case-insensitive conduit conduit-extra deepseq
78+ http-types httpd-shed HUnit mtl network network-uri pureMD5 split
79+ test-framework test-framework-hunit wai warp
80+ ];
81+ doCheck = false;
82+ homepage = "https://github.com/haskell/HTTP";
83+ description = "A library for client-side HTTP";
84+ license = stdenv.lib.licenses.bsd3;
85+ }) {};
86+ "HUnit" = callPackage
87+ ({ mkDerivation, base, call-stack, deepseq, filepath }:
88+ mkDerivation {
89+ pname = "HUnit";
90+ version = "1.6.0.0";
91+ sha256 = "1pnhwqq5v8h48gbp3ibv3skfj25mf4zs5svxcavq93p9cswycj3l";
92+ libraryHaskellDepends = [ base call-stack deepseq ];
93+ testHaskellDepends = [ base call-stack deepseq filepath ];
94+ homepage = "https://github.com/hspec/HUnit#readme";
95+ description = "A unit testing framework for Haskell";
96+ license = stdenv.lib.licenses.bsd3;
97+ }) {};
98+ "Only" = callPackage
99+ ({ mkDerivation, base, deepseq }:
100+ mkDerivation {
101+ pname = "Only";
102+ version = "0.1";
103+ sha256 = "0rdj3a629fk2vp121jq8mf2smkblrz5w3cxhlsyx6my2x29s2ymb";
104+ revision = "1";
105+ editedCabalFile = "1ahk7p34kmh041mz7lyc10nhcxgv2i4z8nvzxvqm2x34gslmsbzr";
106+ libraryHaskellDepends = [ base deepseq ];
107+ description = "The 1-tuple type or single-value \"collection\"";
108+ license = stdenv.lib.licenses.bsd3;
109+ }) {};
110+ "QuickCheck" = callPackage
111+ ({ mkDerivation, base, containers, deepseq, random
112+ , template-haskell, tf-random, transformers
113+ }:
114+ mkDerivation {
115+ pname = "QuickCheck";
116+ version = "2.11.3";
117+ sha256 = "0xhqk35fkzlbjcqbabg6962jkv8d688nzmz7ng4bm84x2d95d328";
118+ libraryHaskellDepends = [
119+ base containers deepseq random template-haskell tf-random
120+ transformers
121+ ];
122+ testHaskellDepends = [ base ];
123+ homepage = "https://github.com/nick8325/quickcheck";
124+ description = "Automatic testing of Haskell programs";
125+ license = stdenv.lib.licenses.bsd3;
126+ }) {};
127+ "StateVar" = callPackage
128+ ({ mkDerivation, base, stm, transformers }:
129+ mkDerivation {
130+ pname = "StateVar";
131+ version = "1.1.1.0";
132+ sha256 = "102f4x240zj3jwa7gx6vp813j76cjhlc3zbi9i5kiz6268kcv28s";
133+ libraryHaskellDepends = [ base stm transformers ];
134+ homepage = "https://github.com/haskell-opengl/StateVar";
135+ description = "State variables";
136+ license = stdenv.lib.licenses.bsd3;
137+ }) {};
138+ "abstract-deque" = callPackage
139+ ({ mkDerivation, array, base, containers, random, time }:
140+ mkDerivation {
141+ pname = "abstract-deque";
142+ version = "0.3";
143+ sha256 = "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9";
144+ libraryHaskellDepends = [ array base containers random time ];
145+ homepage = "https://github.com/rrnewton/haskell-lockfree/wiki";
146+ description = "Abstract, parameterized interface to mutable Deques";
147+ license = stdenv.lib.licenses.bsd3;
148+ }) {};
149+ "abstract-par" = callPackage
150+ ({ mkDerivation, base, deepseq }:
151+ mkDerivation {
152+ pname = "abstract-par";
153+ version = "0.3.3";
154+ sha256 = "0q6qsniw4wks2pw6wzncb1p1j3k6al5njnvm2v5n494hplwqg2i4";
155+ libraryHaskellDepends = [ base deepseq ];
156+ homepage = "https://github.com/simonmar/monad-par";
157+ description = "Type classes generalizing the functionality of the 'monad-par' library";
158+ license = stdenv.lib.licenses.bsd3;
159+ }) {};
160+ "adjunctions" = callPackage
161+ ({ mkDerivation, array, base, comonad, containers, contravariant
162+ , distributive, free, generic-deriving, hspec, hspec-discover, mtl
163+ , profunctors, semigroupoids, semigroups, tagged, transformers
164+ , transformers-compat, void
165+ }:
166+ mkDerivation {
167+ pname = "adjunctions";
168+ version = "4.4";
169+ sha256 = "1sbal7cbhm12crfnfhkk322jnzgx7lhw3jzq0p463bipagsjwz2h";
170+ revision = "1";
171+ editedCabalFile = "0582nnn3fab63nd7ng8smk2c8j7pciiyzfj1na34wqid2hs675as";
172+ libraryHaskellDepends = [
173+ array base comonad containers contravariant distributive free mtl
174+ profunctors semigroupoids semigroups tagged transformers
175+ transformers-compat void
176+ ];
177+ testHaskellDepends = [ base distributive generic-deriving hspec ];
178+ testToolDepends = [ hspec-discover ];
179+ homepage = "http://github.com/ekmett/adjunctions/";
180+ description = "Adjunctions and representable functors";
181+ license = stdenv.lib.licenses.bsd3;
182+ }) {};
183+ "aeson" = callPackage
184+ ({ mkDerivation, attoparsec, base, base-compat, bytestring
185+ , containers, deepseq, dlist, ghc-prim, hashable, scientific
186+ , tagged, template-haskell, text, th-abstraction, time
187+ , time-locale-compat, unordered-containers, uuid-types, vector
188+ }:
189+ mkDerivation {
190+ pname = "aeson";
191+ version = "1.3.1.1";
192+ sha256 = "1i1ig840fvsb1lnklcv32zsc0zscirc301lw1mpfxhc6h4pk0gw4";
193+ libraryHaskellDepends = [
194+ attoparsec base base-compat bytestring containers deepseq dlist
195+ ghc-prim hashable scientific tagged template-haskell text
196+ th-abstraction time time-locale-compat unordered-containers
197+ uuid-types vector
198+ ];
199+ doCheck = false;
200+ homepage = "https://github.com/bos/aeson";
201+ description = "Fast JSON parsing and encoding";
202+ license = stdenv.lib.licenses.bsd3;
203+ }) {};
204+ "aeson-pretty" = callPackage
205+ ({ mkDerivation, aeson, attoparsec, base, base-compat, bytestring
206+ , cmdargs, scientific, text, unordered-containers, vector
207+ }:
208+ mkDerivation {
209+ pname = "aeson-pretty";
210+ version = "0.8.7";
211+ sha256 = "1m977gs0s9gf3lwzlbs5y7bl6ansc5pywmn2qjk09l5bwg2yrhf1";
212+ isLibrary = true;
213+ isExecutable = true;
214+ libraryHaskellDepends = [
215+ aeson base base-compat bytestring scientific text
216+ unordered-containers vector
217+ ];
218+ executableHaskellDepends = [
219+ aeson attoparsec base bytestring cmdargs
220+ ];
221+ homepage = "http://github.com/informatikr/aeson-pretty";
222+ description = "JSON pretty-printing library and command-line tool";
223+ license = stdenv.lib.licenses.bsd3;
224+ }) {};
225+ "amazonka" = callPackage
226+ ({ mkDerivation, amazonka-core, base, bytestring, conduit
227+ , conduit-extra, directory, exceptions, http-client, http-conduit
228+ , http-types, ini, mmorph, monad-control, mtl, resourcet, retry
229+ , tasty, tasty-hunit, text, time, transformers, transformers-base
230+ , transformers-compat, void
231+ }:
232+ mkDerivation {
233+ pname = "amazonka";
234+ version = "1.6.0";
235+ sha256 = "07647x7lq9kaq6bqh38rvdiajji4ks6s7nvxv2xi4v4lhwn8j89p";
236+ libraryHaskellDepends = [
237+ amazonka-core base bytestring conduit conduit-extra directory
238+ exceptions http-client http-conduit http-types ini mmorph
239+ monad-control mtl resourcet retry text time transformers
240+ transformers-base transformers-compat void
241+ ];
242+ testHaskellDepends = [ base tasty tasty-hunit ];
243+ homepage = "https://github.com/brendanhay/amazonka";
244+ description = "Comprehensive Amazon Web Services SDK";
245+ license = stdenv.lib.licenses.mpl20;
246+ }) {};
247+ "amazonka-core" = callPackage
248+ ({ mkDerivation, aeson, attoparsec, base, bifunctors, bytestring
249+ , case-insensitive, conduit, conduit-extra, cryptonite
250+ , data-ordlist, deepseq, exceptions, hashable, http-client
251+ , http-conduit, http-types, lens, memory, mtl, QuickCheck
252+ , quickcheck-unicode, resourcet, scientific, semigroups, tagged
253+ , tasty, tasty-hunit, tasty-quickcheck, template-haskell, text
254+ , time, transformers, transformers-compat, unordered-containers
255+ , xml-conduit, xml-types
256+ }:
257+ mkDerivation {
258+ pname = "amazonka-core";
259+ version = "1.6.0";
260+ sha256 = "1j9x17zhyxrg4ds5pdxfjdb4z7hpzn42cydx34j25h5d9avwbqdg";
261+ libraryHaskellDepends = [
262+ aeson attoparsec base bifunctors bytestring case-insensitive
263+ conduit conduit-extra cryptonite deepseq exceptions hashable
264+ http-client http-conduit http-types lens memory mtl resourcet
265+ scientific semigroups tagged text time transformers
266+ transformers-compat unordered-containers xml-conduit xml-types
267+ ];
268+ testHaskellDepends = [
269+ aeson base bytestring case-insensitive conduit data-ordlist
270+ http-conduit http-types lens QuickCheck quickcheck-unicode tasty
271+ tasty-hunit tasty-quickcheck template-haskell text time
272+ ];
273+ doCheck = false;
274+ homepage = "https://github.com/brendanhay/amazonka";
275+ description = "Core data types and functionality for Amazonka libraries";
276+ license = stdenv.lib.licenses.mpl20;
277+ }) {};
278+ "amazonka-s3" = callPackage
279+ ({ mkDerivation, amazonka-core, amazonka-test, base, bytestring
280+ , lens, tasty, tasty-hunit, text, time, unordered-containers
281+ }:
282+ mkDerivation {
283+ pname = "amazonka-s3";
284+ version = "1.6.0";
285+ sha256 = "0irz8vyklapjy3w3qasidpvq4hk2qwkmhrnrd23sf4yzs2xqx8gc";
286+ libraryHaskellDepends = [ amazonka-core base lens text ];
287+ testHaskellDepends = [
288+ amazonka-core amazonka-test base bytestring tasty tasty-hunit text
289+ time unordered-containers
290+ ];
291+ homepage = "https://github.com/brendanhay/amazonka";
292+ description = "Amazon Simple Storage Service SDK";
293+ license = stdenv.lib.licenses.mpl20;
294+ }) {};
295+ "amazonka-test" = callPackage
296+ ({ mkDerivation, aeson, amazonka-core, base, bifunctors, bytestring
297+ , case-insensitive, conduit, conduit-extra, groom, http-client
298+ , http-types, process, resourcet, tasty, tasty-hunit
299+ , template-haskell, temporary, text, time, unordered-containers
300+ , yaml
301+ }:
302+ mkDerivation {
303+ pname = "amazonka-test";
304+ version = "1.6.0";
305+ sha256 = "0a6xfp97hijhqmhj9nv4aqax08ry8y809jpjhyj2819p01wvga26";
306+ libraryHaskellDepends = [
307+ aeson amazonka-core base bifunctors bytestring case-insensitive
308+ conduit conduit-extra groom http-client http-types process
309+ resourcet tasty tasty-hunit template-haskell temporary text time
310+ unordered-containers yaml
311+ ];
312+ homepage = "https://github.com/brendanhay/amazonka";
313+ description = "Common functionality for Amazonka library test-suites";
314+ license = stdenv.lib.licenses.mpl20;
315+ }) {};
316+ "ansi-terminal" = callPackage
317+ ({ mkDerivation, base, colour }:
318+ mkDerivation {
319+ pname = "ansi-terminal";
320+ version = "0.8.0.4";
321+ sha256 = "0428gq8m3fdnb7ldcsyk97qcch76hcxbgh2666p6f76fs2qbhg7b";
322+ isLibrary = true;
323+ isExecutable = true;
324+ libraryHaskellDepends = [ base colour ];
325+ homepage = "https://github.com/feuerbach/ansi-terminal";
326+ description = "Simple ANSI terminal support, with Windows compatibility";
327+ license = stdenv.lib.licenses.bsd3;
328+ }) {};
329+ "ansi-wl-pprint" = callPackage
330+ ({ mkDerivation, ansi-terminal, base }:
331+ mkDerivation {
332+ pname = "ansi-wl-pprint";
333+ version = "0.6.8.2";
334+ sha256 = "0gnb4mkqryv08vncxnj0bzwcnd749613yw3cxfzw6y3nsldp4c56";
335+ isLibrary = true;
336+ isExecutable = true;
337+ libraryHaskellDepends = [ ansi-terminal base ];
338+ homepage = "http://github.com/ekmett/ansi-wl-pprint";
339+ description = "The Wadler/Leijen Pretty Printer for colored ANSI terminal output";
340+ license = stdenv.lib.licenses.bsd3;
341+ }) {};
342+ "appar" = callPackage
343+ ({ mkDerivation, base, bytestring }:
344+ mkDerivation {
345+ pname = "appar";
346+ version = "0.1.4";
347+ sha256 = "09jb9ij78fdkz2qk66rw99q19qnm504dpv0yq0pjsl6xwjmndsjq";
348+ libraryHaskellDepends = [ base bytestring ];
349+ description = "A simple applicative parser";
350+ license = stdenv.lib.licenses.bsd3;
351+ }) {};
352+ "asn1-encoding" = callPackage
353+ ({ mkDerivation, asn1-types, base, bytestring, hourglass, mtl
354+ , tasty, tasty-quickcheck, text
355+ }:
356+ mkDerivation {
357+ pname = "asn1-encoding";
358+ version = "0.9.5";
359+ sha256 = "0adgbamyq0mj1l1hdq4zyyllay714bac1wl0rih3fv1z6vykp1hy";
360+ libraryHaskellDepends = [ asn1-types base bytestring hourglass ];
361+ testHaskellDepends = [
362+ asn1-types base bytestring hourglass mtl tasty tasty-quickcheck
363+ text
364+ ];
365+ homepage = "http://github.com/vincenthz/hs-asn1";
366+ description = "ASN1 data reader and writer in RAW, BER and DER forms";
367+ license = stdenv.lib.licenses.bsd3;
368+ }) {};
369+ "asn1-parse" = callPackage
370+ ({ mkDerivation, asn1-encoding, asn1-types, base, bytestring }:
371+ mkDerivation {
372+ pname = "asn1-parse";
373+ version = "0.9.4";
374+ sha256 = "025prsihk5g6rdv9xlfmj0zpa0wa3qjzj5i4ilzvg7f6f3sji8y6";
375+ libraryHaskellDepends = [
376+ asn1-encoding asn1-types base bytestring
377+ ];
378+ homepage = "https://github.com/vincenthz/hs-asn1";
379+ description = "Simple monadic parser for ASN1 stream types";
380+ license = stdenv.lib.licenses.bsd3;
381+ }) {};
382+ "asn1-types" = callPackage
383+ ({ mkDerivation, base, bytestring, hourglass, memory }:
384+ mkDerivation {
385+ pname = "asn1-types";
386+ version = "0.3.2";
387+ sha256 = "05vjchyqiy9n275cygffhn0ma7fz7jx52j0dcdm9qm8h9bziymqc";
388+ libraryHaskellDepends = [ base bytestring hourglass memory ];
389+ homepage = "http://github.com/vincenthz/hs-asn1-types";
390+ description = "ASN.1 types";
391+ license = stdenv.lib.licenses.bsd3;
392+ }) {};
393+ "async" = callPackage
394+ ({ mkDerivation, base, hashable, HUnit, stm, test-framework
395+ , test-framework-hunit
396+ }:
397+ mkDerivation {
398+ pname = "async";
399+ version = "2.2.1";
400+ sha256 = "09whscli1q5z7lzyq9rfk0bq1ydplh6pjmc6qv0x668k5818c2wg";
401+ isLibrary = true;
402+ isExecutable = true;
403+ libraryHaskellDepends = [ base hashable stm ];
404+ testHaskellDepends = [
405+ base HUnit stm test-framework test-framework-hunit
406+ ];
407+ homepage = "https://github.com/simonmar/async";
408+ description = "Run IO operations asynchronously and wait for their results";
409+ license = stdenv.lib.licenses.bsd3;
410+ }) {};
411+ "attoparsec" = callPackage
412+ ({ mkDerivation, array, base, bytestring, case-insensitive
413+ , containers, criterion, deepseq, directory, filepath, ghc-prim
414+ , http-types, parsec, scientific, text, transformers
415+ , unordered-containers, vector
416+ }:
417+ mkDerivation {
418+ pname = "attoparsec";
419+ version = "0.13.2.2";
420+ sha256 = "0j6qcwd146yzlkc9mcvzvnixsyl65n2a68l28322q5v9p4g4g4yx";
421+ libraryHaskellDepends = [
422+ array base bytestring containers deepseq scientific text
423+ transformers
424+ ];
425+ benchmarkHaskellDepends = [
426+ array base bytestring case-insensitive containers criterion deepseq
427+ directory filepath ghc-prim http-types parsec scientific text
428+ transformers unordered-containers vector
429+ ];
430+ doCheck = false;
431+ homepage = "https://github.com/bos/attoparsec";
432+ description = "Fast combinator parsing for bytestrings and text";
433+ license = stdenv.lib.licenses.bsd3;
434+ }) {};
435+ "auto-update" = callPackage
436+ ({ mkDerivation, base }:
437+ mkDerivation {
438+ pname = "auto-update";
439+ version = "0.1.4";
440+ sha256 = "09dlh2alsx2mw5kvj931yhbj0aw7jmly2cm9xbscm2sf098w35jy";
441+ libraryHaskellDepends = [ base ];
442+ homepage = "https://github.com/yesodweb/wai";
443+ description = "Efficiently run periodic, on-demand actions";
444+ license = stdenv.lib.licenses.mit;
445+ }) {};
446+ "base-compat" = callPackage
447+ ({ mkDerivation, base, unix }:
448+ mkDerivation {
449+ pname = "base-compat";
450+ version = "0.10.4";
451+ sha256 = "0ksp990gxs731mq19rzbxrbs43nazfljjc8krlx5bjqblw3kfs8d";
452+ libraryHaskellDepends = [ base unix ];
453+ description = "A compatibility layer for base";
454+ license = stdenv.lib.licenses.mit;
455+ }) {};
456+ "base-compat-batteries" = callPackage
457+ ({ mkDerivation, base, base-compat, hspec, hspec-discover
458+ , QuickCheck
459+ }:
460+ mkDerivation {
461+ pname = "base-compat-batteries";
462+ version = "0.10.1";
463+ sha256 = "1j8ky6241mj1ymbwm9scvyvbknj7n2r56cnkg9y1zf2xwjpqnmqm";
464+ libraryHaskellDepends = [ base base-compat ];
465+ testHaskellDepends = [ base hspec QuickCheck ];
466+ testToolDepends = [ hspec-discover ];
467+ description = "base-compat with extra batteries";
468+ license = stdenv.lib.licenses.mit;
469+ }) {};
470+ "base-orphans" = callPackage
471+ ({ mkDerivation, base, ghc-prim, hspec, hspec-discover, QuickCheck
472+ }:
473+ mkDerivation {
474+ pname = "base-orphans";
475+ version = "0.7";
476+ sha256 = "057f9npnqk71ccfh95djfkpd54dzazphj06grwxa3fyhwcwxrb8a";
477+ libraryHaskellDepends = [ base ghc-prim ];
478+ testHaskellDepends = [ base hspec QuickCheck ];
479+ testToolDepends = [ hspec-discover ];
480+ homepage = "https://github.com/haskell-compat/base-orphans#readme";
481+ description = "Backwards-compatible orphan instances for base";
482+ license = stdenv.lib.licenses.mit;
483+ }) {};
484+ "base-prelude" = callPackage
485+ ({ mkDerivation, base }:
486+ mkDerivation {
487+ pname = "base-prelude";
488+ version = "1.3";
489+ sha256 = "1zk728sd09hh2r4xwz4lazsrrgg5cshydn64932sm0vckplndk73";
490+ libraryHaskellDepends = [ base ];
491+ doCheck = false;
492+ homepage = "https://github.com/nikita-volkov/base-prelude";
493+ description = "The most complete prelude formed solely from the \"base\" package";
494+ license = stdenv.lib.licenses.mit;
495+ }) {};
496+ "base16-bytestring" = callPackage
497+ ({ mkDerivation, base, bytestring, ghc-prim }:
498+ mkDerivation {
499+ pname = "base16-bytestring";
500+ version = "0.1.1.6";
501+ sha256 = "0jf40m3yijqw6wd1rwwvviww46fasphaay9m9rgqyhf5aahnbzjs";
502+ libraryHaskellDepends = [ base bytestring ghc-prim ];
503+ homepage = "http://github.com/bos/base16-bytestring";
504+ description = "Fast base16 (hex) encoding and decoding for ByteStrings";
505+ license = stdenv.lib.licenses.bsd3;
506+ }) {};
507+ "base64-bytestring" = callPackage
508+ ({ mkDerivation, base, bytestring, containers, HUnit, QuickCheck
509+ , test-framework, test-framework-hunit, test-framework-quickcheck2
510+ }:
511+ mkDerivation {
512+ pname = "base64-bytestring";
513+ version = "1.0.0.1";
514+ sha256 = "0l1v4ddjdsgi9nqzyzcxxj76rwar3lzx8gmwf2r54bqan3san9db";
515+ libraryHaskellDepends = [ base bytestring ];
516+ testHaskellDepends = [
517+ base bytestring containers HUnit QuickCheck test-framework
518+ test-framework-hunit test-framework-quickcheck2
519+ ];
520+ homepage = "https://github.com/bos/base64-bytestring";
521+ description = "Fast base64 encoding and decoding for ByteStrings";
522+ license = stdenv.lib.licenses.bsd3;
523+ }) {};
524+ "basement" = callPackage
525+ ({ mkDerivation, base, ghc-prim }:
526+ mkDerivation {
527+ pname = "basement";
528+ version = "0.0.8";
529+ sha256 = "194jw567di4q2758943q9rrwkbf9gl261my7qc21i9xhyabipx67";
530+ libraryHaskellDepends = [ base ghc-prim ];
531+ homepage = "https://github.com/haskell-foundation/foundation#readme";
532+ description = "Foundation scrap box of array & string";
533+ license = stdenv.lib.licenses.bsd3;
534+ }) {};
535+ "basic-prelude" = callPackage
536+ ({ mkDerivation, base, bytestring, containers, filepath, hashable
537+ , text, transformers, unordered-containers, vector
538+ }:
539+ mkDerivation {
540+ pname = "basic-prelude";
541+ version = "0.7.0";
542+ sha256 = "0yckmnvm6i4vw0mykj4fzl4ldsf67v8d2h0vp1bakyj84n4myx8h";
543+ libraryHaskellDepends = [
544+ base bytestring containers filepath hashable text transformers
545+ unordered-containers vector
546+ ];
547+ homepage = "https://github.com/snoyberg/basic-prelude#readme";
548+ description = "An enhanced core prelude; a common foundation for alternate preludes";
549+ license = stdenv.lib.licenses.mit;
550+ }) {};
551+ "bifunctors" = callPackage
552+ ({ mkDerivation, base, base-orphans, comonad, containers, hspec
553+ , hspec-discover, QuickCheck, semigroups, tagged, template-haskell
554+ , th-abstraction, transformers, transformers-compat
555+ }:
556+ mkDerivation {
557+ pname = "bifunctors";
558+ version = "5.5.3";
559+ sha256 = "1jn9rxg643xnlhrknmjz88nblcpsr45xwjkwwnn5nxpasa7m4d6l";
560+ libraryHaskellDepends = [
561+ base base-orphans comonad containers semigroups tagged
562+ template-haskell th-abstraction transformers
563+ ];
564+ testHaskellDepends = [
565+ base hspec QuickCheck template-haskell transformers
566+ transformers-compat
567+ ];
568+ testToolDepends = [ hspec-discover ];
569+ homepage = "http://github.com/ekmett/bifunctors/";
570+ description = "Bifunctors";
571+ license = stdenv.lib.licenses.bsd3;
572+ }) {};
573+ "bindings-DSL" = callPackage
574+ ({ mkDerivation, base }:
575+ mkDerivation {
576+ pname = "bindings-DSL";
577+ version = "1.0.25";
578+ sha256 = "0kqrd78nspl3lk4a0fqn47d8dirjg3b24dkvkigcrlb81hw35pk3";
579+ libraryHaskellDepends = [ base ];
580+ homepage = "https://github.com/jwiegley/bindings-dsl/wiki";
581+ description = "FFI domain specific language, on top of hsc2hs";
582+ license = stdenv.lib.licenses.bsd3;
583+ }) {};
584+ "blaze-builder" = callPackage
585+ ({ mkDerivation, base, bytestring, deepseq, HUnit, QuickCheck
586+ , test-framework, test-framework-hunit, test-framework-quickcheck2
587+ , text, utf8-string
588+ }:
589+ mkDerivation {
590+ pname = "blaze-builder";
591+ version = "0.4.1.0";
592+ sha256 = "05681dih2d8s96an945wkbwl05w8ddbcfx8n3r3ck79ydyb8pz4i";
593+ libraryHaskellDepends = [ base bytestring deepseq text ];
594+ testHaskellDepends = [
595+ base bytestring HUnit QuickCheck test-framework
596+ test-framework-hunit test-framework-quickcheck2 text utf8-string
597+ ];
598+ homepage = "http://github.com/lpsmith/blaze-builder";
599+ description = "Efficient buffered output";
600+ license = stdenv.lib.licenses.bsd3;
601+ }) {};
602+ "blaze-html" = callPackage
603+ ({ mkDerivation, base, blaze-builder, blaze-markup, bytestring
604+ , text
605+ }:
606+ mkDerivation {
607+ pname = "blaze-html";
608+ version = "0.9.1.1";
609+ sha256 = "06xv8fqhclfjj61z74cgggn4lmx1s7diakxg84mnkgfvk11983pa";
610+ libraryHaskellDepends = [
611+ base blaze-builder blaze-markup bytestring text
612+ ];
613+ doCheck = false;
614+ homepage = "http://jaspervdj.be/blaze";
615+ description = "A blazingly fast HTML combinator library for Haskell";
616+ license = stdenv.lib.licenses.bsd3;
617+ }) {};
618+ "blaze-markup" = callPackage
619+ ({ mkDerivation, base, blaze-builder, bytestring, text }:
620+ mkDerivation {
621+ pname = "blaze-markup";
622+ version = "0.8.2.1";
623+ sha256 = "0ih1c3qahkdgzbqihdhny5s313l2m66fbb88w8jbx7yz56y7rawh";
624+ libraryHaskellDepends = [ base blaze-builder bytestring text ];
625+ doCheck = false;
626+ homepage = "http://jaspervdj.be/blaze";
627+ description = "A blazingly fast markup combinator library for Haskell";
628+ license = stdenv.lib.licenses.bsd3;
629+ }) {};
630+ "bsb-http-chunked" = callPackage
631+ ({ mkDerivation, base, bytestring, bytestring-builder }:
632+ mkDerivation {
633+ pname = "bsb-http-chunked";
634+ version = "0.0.0.2";
635+ sha256 = "1x6m6xkrcw6jiaig1bb2wb5pqyw31x8xr9k9pxgq2g3ng44pbjr8";
636+ libraryHaskellDepends = [ base bytestring bytestring-builder ];
637+ homepage = "http://github.com/sjakobi/bsb-http-chunked";
638+ description = "Chunked HTTP transfer encoding for bytestring builders";
639+ license = stdenv.lib.licenses.bsd3;
640+ }) {};
641+ "byteable" = callPackage
642+ ({ mkDerivation, base, bytestring }:
643+ mkDerivation {
644+ pname = "byteable";
645+ version = "0.1.1";
646+ sha256 = "1qizg0kxxjqnd3cbrjhhidk5pbbciz0pb3z5kzikjjxnnnhk8fr4";
647+ enableSeparateDataOutput = true;
648+ libraryHaskellDepends = [ base bytestring ];
649+ homepage = "http://github.com/vincenthz/hs-byteable";
650+ description = "Type class for sequence of bytes";
651+ license = stdenv.lib.licenses.bsd3;
652+ }) {};
653+ "byteorder" = callPackage
654+ ({ mkDerivation, base }:
655+ mkDerivation {
656+ pname = "byteorder";
657+ version = "1.0.4";
658+ sha256 = "06995paxbxk8lldvarqpb3ygcjbg4v8dk4scib1rjzwlhssvn85x";
659+ libraryHaskellDepends = [ base ];
660+ homepage = "http://community.haskell.org/~aslatter/code/byteorder";
661+ description = "Exposes the native endianness or byte ordering of the system";
662+ license = stdenv.lib.licenses.bsd3;
663+ }) {};
664+ "bytestring-builder" = callPackage
665+ ({ mkDerivation, base, bytestring, deepseq }:
666+ mkDerivation {
667+ pname = "bytestring-builder";
668+ version = "0.10.8.1.0";
669+ sha256 = "1hnvjac28y44yn78c9vdp1zvrknvlw98ky3g4n5vivr16rvh8x3d";
670+ libraryHaskellDepends = [ base bytestring deepseq ];
671+ doHaddock = false;
672+ description = "The new bytestring builder, packaged outside of GHC";
673+ license = stdenv.lib.licenses.bsd3;
674+ }) {};
675+ "cabal-doctest" = callPackage
676+ ({ mkDerivation, base, Cabal, directory, filepath }:
677+ mkDerivation {
678+ pname = "cabal-doctest";
679+ version = "1.0.6";
680+ sha256 = "0bgd4jdmzxq5y465r4sf4jv2ix73yvblnr4c9wyazazafddamjny";
681+ revision = "1";
682+ editedCabalFile = "1bk85avgc93yvcggwbk01fy8nvg6753wgmaanhkry0hz55h7mpld";
683+ libraryHaskellDepends = [ base Cabal directory filepath ];
684+ homepage = "https://github.com/phadej/cabal-doctest";
685+ description = "A Setup.hs helper for doctests running";
686+ license = stdenv.lib.licenses.bsd3;
687+ }) {};
688+ "cabal2nix" = callPackage
689+ ({ mkDerivation, aeson, ansi-wl-pprint, base, bytestring, Cabal
690+ , containers, deepseq, directory, distribution-nixpkgs, filepath
691+ , hackage-db, hopenssl, hpack, language-nix, lens, monad-par
692+ , monad-par-extras, mtl, optparse-applicative, pretty, process
693+ , split, tasty, tasty-golden, text, time, transformers, yaml
694+ }:
695+ mkDerivation {
696+ pname = "cabal2nix";
697+ version = "2.9.3";
698+ sha256 = "10l1k8rilf032v6pchwhxaq53mr0d08h6xkllidc3c7wfkzcx7qj";
699+ isLibrary = true;
700+ isExecutable = true;
701+ libraryHaskellDepends = [
702+ aeson ansi-wl-pprint base bytestring Cabal containers deepseq
703+ directory distribution-nixpkgs filepath hackage-db hopenssl hpack
704+ language-nix lens optparse-applicative pretty process split text
705+ time transformers yaml
706+ ];
707+ executableHaskellDepends = [
708+ aeson base bytestring Cabal containers directory
709+ distribution-nixpkgs filepath hopenssl language-nix lens monad-par
710+ monad-par-extras mtl optparse-applicative pretty
711+ ];
712+ testHaskellDepends = [
713+ base Cabal containers directory filepath language-nix lens pretty
714+ process tasty tasty-golden
715+ ];
716+ homepage = "https://github.com/nixos/cabal2nix#readme";
717+ description = "Convert Cabal files into Nix build instructions";
718+ license = stdenv.lib.licenses.bsd3;
719+ }) {};
720+ "call-stack" = callPackage
721+ ({ mkDerivation, base, nanospec }:
722+ mkDerivation {
723+ pname = "call-stack";
724+ version = "0.1.0";
725+ sha256 = "1qmihf5jafmc79sk52l6gpx75f5bnla2lp62kh3p34x3j84mwpzj";
726+ libraryHaskellDepends = [ base ];
727+ testHaskellDepends = [ base nanospec ];
728+ homepage = "https://github.com/sol/call-stack#readme";
729+ description = "Use GHC call-stacks in a backward compatible way";
730+ license = stdenv.lib.licenses.mit;
731+ }) {};
732+ "case-insensitive" = callPackage
733+ ({ mkDerivation, base, bytestring, criterion, deepseq, hashable
734+ , HUnit, test-framework, test-framework-hunit, text
735+ }:
736+ mkDerivation {
737+ pname = "case-insensitive";
738+ version = "1.2.0.11";
739+ sha256 = "1qrpxfirsxckg7jv28f5ah2qc8lh95hp7rnqkbqs1ahcwlbnvkm7";
740+ libraryHaskellDepends = [ base bytestring deepseq hashable text ];
741+ testHaskellDepends = [
742+ base bytestring HUnit test-framework test-framework-hunit text
743+ ];
744+ benchmarkHaskellDepends = [ base bytestring criterion deepseq ];
745+ homepage = "https://github.com/basvandijk/case-insensitive";
746+ description = "Case insensitive string comparison";
747+ license = stdenv.lib.licenses.bsd3;
748+ }) {};
749+ "cassava" = callPackage
750+ ({ mkDerivation, array, attoparsec, base, bytestring, containers
751+ , deepseq, hashable, Only, scientific, text, text-short
752+ , unordered-containers, vector
753+ }:
754+ mkDerivation {
755+ pname = "cassava";
756+ version = "0.5.1.0";
757+ sha256 = "0xs2c5lpy0g5lsmp2cx0dm5lnxij7cgry6xd5gsn3bfdlap8lb3n";
758+ configureFlags = [ "-f-bytestring--lt-0_10_4" ];
759+ libraryHaskellDepends = [
760+ array attoparsec base bytestring containers deepseq hashable Only
761+ scientific text text-short unordered-containers vector
762+ ];
763+ doCheck = false;
764+ homepage = "https://github.com/hvr/cassava";
765+ description = "A CSV parsing and encoding library";
766+ license = stdenv.lib.licenses.bsd3;
767+ }) {};
768+ "cereal" = callPackage
769+ ({ mkDerivation, array, base, bytestring, containers, ghc-prim
770+ , QuickCheck, test-framework, test-framework-quickcheck2
771+ }:
772+ mkDerivation {
773+ pname = "cereal";
774+ version = "0.5.5.0";
775+ sha256 = "08k8y6nf3n8h8gzw4a44mssy7rhgpmfj28lhczjz4vgszc7k55qb";
776+ libraryHaskellDepends = [
777+ array base bytestring containers ghc-prim
778+ ];
779+ testHaskellDepends = [
780+ base bytestring QuickCheck test-framework
781+ test-framework-quickcheck2
782+ ];
783+ homepage = "https://github.com/GaloisInc/cereal";
784+ description = "A binary serialization library";
785+ license = stdenv.lib.licenses.bsd3;
786+ }) {};
787+ "cereal-conduit" = callPackage
788+ ({ mkDerivation, base, bytestring, cereal, conduit, HUnit, mtl
789+ , resourcet, transformers
790+ }:
791+ mkDerivation {
792+ pname = "cereal-conduit";
793+ version = "0.8.0";
794+ sha256 = "1srr7agvgfw78q5s1npjq5sgynvhjgllpihiv37ylkwqm4c4ap6r";
795+ revision = "1";
796+ editedCabalFile = "1imyl3g2bni8bc6kajr857xh94fscphksj3286pxfpa8yp9vqqpc";
797+ libraryHaskellDepends = [
798+ base bytestring cereal conduit resourcet transformers
799+ ];
800+ testHaskellDepends = [
801+ base bytestring cereal conduit HUnit mtl transformers
802+ ];
803+ homepage = "https://github.com/snoyberg/conduit";
804+ description = "Turn Data.Serialize Gets and Puts into Sources, Sinks, and Conduits";
805+ license = stdenv.lib.licenses.bsd3;
806+ }) {};
807+ "chunked-data" = callPackage
808+ ({ mkDerivation, base, bytestring, containers, semigroups, text
809+ , transformers, vector
810+ }:
811+ mkDerivation {
812+ pname = "chunked-data";
813+ version = "0.3.1";
814+ sha256 = "16m7y7fwrirbjbqqcsfmr4yxa9qvfax6r7pw0zl9ky71ms0wa47p";
815+ libraryHaskellDepends = [
816+ base bytestring containers semigroups text transformers vector
817+ ];
818+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
819+ description = "Typeclasses for dealing with various chunked data representations";
820+ license = stdenv.lib.licenses.mit;
821+ }) {};
822+ "classy-prelude" = callPackage
823+ ({ mkDerivation, async, base, basic-prelude, bifunctors, bytestring
824+ , chunked-data, containers, deepseq, dlist, ghc-prim, hashable
825+ , hspec, mono-traversable, mono-traversable-instances, mtl
826+ , mutable-containers, primitive, QuickCheck, say, semigroups, stm
827+ , stm-chans, text, time, transformers, unliftio
828+ , unordered-containers, vector, vector-instances
829+ }:
830+ mkDerivation {
831+ pname = "classy-prelude";
832+ version = "1.4.0";
833+ sha256 = "1q7r4lnrxjsh7rj5nr0cs22ddp9m6maa7bzbkarxw3xbfrb2afrb";
834+ libraryHaskellDepends = [
835+ async base basic-prelude bifunctors bytestring chunked-data
836+ containers deepseq dlist ghc-prim hashable mono-traversable
837+ mono-traversable-instances mtl mutable-containers primitive say
838+ semigroups stm stm-chans text time transformers unliftio
839+ unordered-containers vector vector-instances
840+ ];
841+ testHaskellDepends = [
842+ base containers hspec QuickCheck transformers unordered-containers
843+ ];
844+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
845+ description = "A typeclass-based Prelude";
846+ license = stdenv.lib.licenses.mit;
847+ }) {};
848+ "classy-prelude-conduit" = callPackage
849+ ({ mkDerivation, base, bytestring, classy-prelude, conduit, hspec
850+ , monad-control, QuickCheck, resourcet, transformers, void
851+ }:
852+ mkDerivation {
853+ pname = "classy-prelude-conduit";
854+ version = "1.4.0";
855+ sha256 = "096466cyyxxmg3jpq705xjjc4r7v9b607hgbys8vybjlldkjbvrr";
856+ libraryHaskellDepends = [
857+ base bytestring classy-prelude conduit monad-control resourcet
858+ transformers void
859+ ];
860+ testHaskellDepends = [
861+ base bytestring conduit hspec QuickCheck transformers
862+ ];
863+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
864+ description = "classy-prelude together with conduit functions";
865+ license = stdenv.lib.licenses.mit;
866+ }) {};
867+ "clock" = callPackage
868+ ({ mkDerivation, base, tasty, tasty-quickcheck }:
869+ mkDerivation {
870+ pname = "clock";
871+ version = "0.7.2";
872+ sha256 = "07v91s20halsqjmziqb1sqjp2sjpckl9by7y28aaklwqi2bh2rl8";
873+ libraryHaskellDepends = [ base ];
874+ testHaskellDepends = [ base tasty tasty-quickcheck ];
875+ homepage = "https://github.com/corsis/clock";
876+ description = "High-resolution clock functions: monotonic, realtime, cputime";
877+ license = stdenv.lib.licenses.bsd3;
878+ }) {};
879+ "cmdargs" = callPackage
880+ ({ mkDerivation, base, filepath, process, template-haskell
881+ , transformers
882+ }:
883+ mkDerivation {
884+ pname = "cmdargs";
885+ version = "0.10.20";
886+ sha256 = "0cbkmgrcnwgigg6z88y3c09gm7g6dwm7gzbgr53h8k1xik29s9hf";
887+ isLibrary = true;
888+ isExecutable = true;
889+ libraryHaskellDepends = [
890+ base filepath process template-haskell transformers
891+ ];
892+ homepage = "https://github.com/ndmitchell/cmdargs#readme";
893+ description = "Command line argument processing";
894+ license = stdenv.lib.licenses.bsd3;
895+ }) {};
896+ "code-page" = callPackage
897+ ({ mkDerivation, base }:
898+ mkDerivation {
899+ pname = "code-page";
900+ version = "0.1.3";
901+ sha256 = "1491frk4jx6dlhifky9dvcxbsbcfssrz979a5hp5zn061rh8cp76";
902+ libraryHaskellDepends = [ base ];
903+ testHaskellDepends = [ base ];
904+ homepage = "https://github.com/RyanGlScott/code-page";
905+ description = "Windows code page library for Haskell";
906+ license = stdenv.lib.licenses.bsd3;
907+ }) {};
908+ "colour" = callPackage
909+ ({ mkDerivation, base }:
910+ mkDerivation {
911+ pname = "colour";
912+ version = "2.3.4";
913+ sha256 = "1sy51nz096sv91nxqk6yk7b92b5a40axv9183xakvki2nc09yhqg";
914+ enableSeparateDataOutput = true;
915+ libraryHaskellDepends = [ base ];
916+ doCheck = false;
917+ homepage = "http://www.haskell.org/haskellwiki/Colour";
918+ description = "A model for human colour/color perception";
919+ license = stdenv.lib.licenses.mit;
920+ }) {};
921+ "comonad" = callPackage
922+ ({ mkDerivation, base, Cabal, cabal-doctest, containers
923+ , contravariant, distributive, doctest, semigroups, tagged
924+ , transformers, transformers-compat
925+ }:
926+ mkDerivation {
927+ pname = "comonad";
928+ version = "5.0.4";
929+ sha256 = "09g870c4flp4k3fgbibsd0mmfjani1qcpbcl685v8x89kxzrva3q";
930+ setupHaskellDepends = [ base Cabal cabal-doctest ];
931+ libraryHaskellDepends = [
932+ base containers contravariant distributive semigroups tagged
933+ transformers transformers-compat
934+ ];
935+ testHaskellDepends = [ base doctest ];
936+ homepage = "http://github.com/ekmett/comonad/";
937+ description = "Comonads";
938+ license = stdenv.lib.licenses.bsd3;
939+ }) {};
940+ "concurrent-output" = callPackage
941+ ({ mkDerivation, ansi-terminal, async, base, directory, exceptions
942+ , process, stm, terminal-size, text, transformers, unix
943+ }:
944+ mkDerivation {
945+ pname = "concurrent-output";
946+ version = "1.10.6";
947+ sha256 = "1qlp1vij4qgcrkw8ym5xdc0pgfwklbhsfh56sgayy3cvpvcac093";
948+ libraryHaskellDepends = [
949+ ansi-terminal async base directory exceptions process stm
950+ terminal-size text transformers unix
951+ ];
952+ description = "Ungarble output from several threads or commands";
953+ license = stdenv.lib.licenses.bsd2;
954+ }) {};
955+ "conduit" = callPackage
956+ ({ mkDerivation, base, bytestring, containers, deepseq, directory
957+ , exceptions, filepath, gauge, hspec, kan-extensions
958+ , mono-traversable, mtl, mwc-random, primitive, QuickCheck
959+ , resourcet, safe, silently, split, text, transformers, unix
960+ , unliftio, unliftio-core, vector
961+ }:
962+ mkDerivation {
963+ pname = "conduit";
964+ version = "1.3.0.3";
965+ sha256 = "1sangm0qqi9dzlq95746a3kl14k8b09592a423shxjf2a0b1yx5v";
966+ libraryHaskellDepends = [
967+ base bytestring directory exceptions filepath mono-traversable mtl
968+ primitive resourcet text transformers unix unliftio-core vector
969+ ];
970+ testHaskellDepends = [
971+ base bytestring containers directory exceptions filepath hspec
972+ mono-traversable mtl QuickCheck resourcet safe silently split text
973+ transformers unliftio vector
974+ ];
975+ benchmarkHaskellDepends = [
976+ base containers deepseq gauge hspec kan-extensions mwc-random
977+ transformers vector
978+ ];
979+ homepage = "http://github.com/snoyberg/conduit";
980+ description = "Streaming data processing library";
981+ license = stdenv.lib.licenses.mit;
982+ }) {};
983+ "conduit-combinators" = callPackage
984+ ({ mkDerivation, base }:
985+ mkDerivation {
986+ pname = "conduit-combinators";
987+ version = "1.3.0";
988+ sha256 = "1lz70vwp4y4lpsivxl0cshq7aq3968rh48r6rjvpyaj2l0bdj5wp";
989+ libraryHaskellDepends = [ base ];
990+ doHaddock = false;
991+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
992+ description = "DEPRECATED Functionality merged into the conduit package itself";
993+ license = stdenv.lib.licenses.mit;
994+ }) {};
995+ "conduit-extra" = callPackage
996+ ({ mkDerivation, async, attoparsec, base, bytestring
997+ , bytestring-builder, conduit, directory, exceptions, filepath
998+ , gauge, hspec, network, primitive, process, QuickCheck, resourcet
999+ , stm, streaming-commons, text, transformers, transformers-base
1000+ , typed-process, unliftio-core
1001+ }:
1002+ mkDerivation {
1003+ pname = "conduit-extra";
1004+ version = "1.3.0";
1005+ sha256 = "1bi2b6kdzy5f9glq46jzsk02has95jkxqz0cchpbmnakzhjwjh9c";
1006+ libraryHaskellDepends = [
1007+ async attoparsec base bytestring conduit directory filepath network
1008+ primitive process resourcet stm streaming-commons text transformers
1009+ typed-process unliftio-core
1010+ ];
1011+ testHaskellDepends = [
1012+ async attoparsec base bytestring bytestring-builder conduit
1013+ directory exceptions hspec process QuickCheck resourcet stm
1014+ streaming-commons text transformers transformers-base
1015+ ];
1016+ benchmarkHaskellDepends = [
1017+ base bytestring bytestring-builder conduit gauge transformers
1018+ ];
1019+ homepage = "http://github.com/snoyberg/conduit";
1020+ description = "Batteries included conduit: adapters for common libraries";
1021+ license = stdenv.lib.licenses.mit;
1022+ }) {};
1023+ "connection" = callPackage
1024+ ({ mkDerivation, base, byteable, bytestring, containers
1025+ , data-default-class, network, socks, tls, x509, x509-store
1026+ , x509-system, x509-validation
1027+ }:
1028+ mkDerivation {
1029+ pname = "connection";
1030+ version = "0.2.8";
1031+ sha256 = "1swkb9w5vx9ph7x55y51dc0srj2z27nd9ibgn8c0qcl6hx7g9cbh";
1032+ libraryHaskellDepends = [
1033+ base byteable bytestring containers data-default-class network
1034+ socks tls x509 x509-store x509-system x509-validation
1035+ ];
1036+ homepage = "http://github.com/vincenthz/hs-connection";
1037+ description = "Simple and easy network connections API";
1038+ license = stdenv.lib.licenses.bsd3;
1039+ }) {};
1040+ "constraints" = callPackage
1041+ ({ mkDerivation, base, binary, deepseq, ghc-prim, hashable, hspec
1042+ , hspec-discover, mtl, semigroups, transformers
1043+ , transformers-compat
1044+ }:
1045+ mkDerivation {
1046+ pname = "constraints";
1047+ version = "0.10.1";
1048+ sha256 = "1xy3vv78jxc17hm0z7qqspxjwv7l2jbcbj670yrl2f053qkfr02q";
1049+ libraryHaskellDepends = [
1050+ base binary deepseq ghc-prim hashable mtl semigroups transformers
1051+ transformers-compat
1052+ ];
1053+ testHaskellDepends = [ base hspec ];
1054+ testToolDepends = [ hspec-discover ];
1055+ homepage = "http://github.com/ekmett/constraints/";
1056+ description = "Constraint manipulation";
1057+ license = stdenv.lib.licenses.bsd2;
1058+ }) {};
1059+ "contravariant" = callPackage
1060+ ({ mkDerivation, base, StateVar, transformers, transformers-compat
1061+ }:
1062+ mkDerivation {
1063+ pname = "contravariant";
1064+ version = "1.4.1";
1065+ sha256 = "1vfhk8c5cxmmakx7rflap1ipkx5q0j5vnlrcz7yz6y53kxhksgf9";
1066+ revision = "1";
1067+ editedCabalFile = "0qj5nymccrb9p0cd6hffsy90jidjng14g9yv95z8v6h4q84sbzvx";
1068+ libraryHaskellDepends = [
1069+ base StateVar transformers transformers-compat
1070+ ];
1071+ homepage = "http://github.com/ekmett/contravariant/";
1072+ description = "Contravariant functors";
1073+ license = stdenv.lib.licenses.bsd3;
1074+ }) {};
1075+ "cookie" = callPackage
1076+ ({ mkDerivation, base, bytestring, data-default-class, deepseq
1077+ , HUnit, QuickCheck, tasty, tasty-hunit, tasty-quickcheck, text
1078+ , time
1079+ }:
1080+ mkDerivation {
1081+ pname = "cookie";
1082+ version = "0.4.4";
1083+ sha256 = "1qy09i0jh2z9i9avy2khf8a8afq4fqgnv0fyrszgfg4kmq2fsi9j";
1084+ libraryHaskellDepends = [
1085+ base bytestring data-default-class deepseq text time
1086+ ];
1087+ testHaskellDepends = [
1088+ base bytestring HUnit QuickCheck tasty tasty-hunit tasty-quickcheck
1089+ text time
1090+ ];
1091+ homepage = "http://github.com/snoyberg/cookie";
1092+ description = "HTTP cookie parsing and rendering";
1093+ license = stdenv.lib.licenses.mit;
1094+ }) {};
1095+ "cpphs" = callPackage
1096+ ({ mkDerivation, base, directory, old-locale, old-time, polyparse
1097+ }:
1098+ mkDerivation {
1099+ pname = "cpphs";
1100+ version = "1.20.8";
1101+ sha256 = "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5";
1102+ isLibrary = true;
1103+ isExecutable = true;
1104+ libraryHaskellDepends = [
1105+ base directory old-locale old-time polyparse
1106+ ];
1107+ executableHaskellDepends = [
1108+ base directory old-locale old-time polyparse
1109+ ];
1110+ homepage = "http://projects.haskell.org/cpphs/";
1111+ description = "A liberalised re-implementation of cpp, the C pre-processor";
1112+ license = "LGPL";
1113+ }) {};
1114+ "cpu" = callPackage
1115+ ({ mkDerivation, base }:
1116+ mkDerivation {
1117+ pname = "cpu";
1118+ version = "0.1.2";
1119+ sha256 = "0x19mlanmkg96h6h1i04w2i631z84y4rbk22ki4zhgsajysgw9sn";
1120+ isLibrary = true;
1121+ isExecutable = true;
1122+ enableSeparateDataOutput = true;
1123+ libraryHaskellDepends = [ base ];
1124+ homepage = "http://github.com/vincenthz/hs-cpu";
1125+ description = "Cpu information and properties helpers";
1126+ license = stdenv.lib.licenses.bsd3;
1127+ }) {};
1128+ "criterion" = callPackage
1129+ ({ mkDerivation, aeson, ansi-wl-pprint, base, base-compat
1130+ , base-compat-batteries, binary, bytestring, cassava, code-page
1131+ , containers, deepseq, directory, exceptions, filepath, Glob, HUnit
1132+ , js-flot, js-jquery, microstache, mtl, mwc-random
1133+ , optparse-applicative, parsec, QuickCheck, semigroups, statistics
1134+ , tasty, tasty-hunit, tasty-quickcheck, text, time, transformers
1135+ , transformers-compat, vector, vector-algorithms
1136+ }:
1137+ mkDerivation {
1138+ pname = "criterion";
1139+ version = "1.4.1.0";
1140+ sha256 = "0v429araqkcw3wwwi6fsp0g7g1hy3l47p061lcy7r4m7d9khd4y4";
1141+ isLibrary = true;
1142+ isExecutable = true;
1143+ enableSeparateDataOutput = true;
1144+ libraryHaskellDepends = [
1145+ aeson ansi-wl-pprint base base-compat-batteries binary bytestring
1146+ cassava code-page containers deepseq directory exceptions filepath
1147+ Glob js-flot js-jquery microstache mtl mwc-random
1148+ optparse-applicative parsec semigroups statistics text time
1149+ transformers transformers-compat vector vector-algorithms
1150+ ];
1151+ executableHaskellDepends = [
1152+ base base-compat-batteries optparse-applicative semigroups
1153+ ];
1154+ testHaskellDepends = [
1155+ aeson base base-compat base-compat-batteries bytestring deepseq
1156+ directory HUnit QuickCheck statistics tasty tasty-hunit
1157+ tasty-quickcheck vector
1158+ ];
1159+ homepage = "http://www.serpentine.com/criterion";
1160+ description = "Robust, reliable performance measurement and analysis";
1161+ license = stdenv.lib.licenses.bsd3;
1162+ }) {};
1163+ "crypto-api" = callPackage
1164+ ({ mkDerivation, base, bytestring, cereal, entropy, tagged
1165+ , transformers
1166+ }:
1167+ mkDerivation {
1168+ pname = "crypto-api";
1169+ version = "0.13.3";
1170+ sha256 = "19bsmkqkpnvh01b77pmyarx00fic15j4hvg4pzscrj4prskrx2i9";
1171+ revision = "1";
1172+ editedCabalFile = "1z6n1sa5pn3iqvqjrd8hv4bc2pxzsrhm5sh0l8z7g9lbqp6w0wp5";
1173+ libraryHaskellDepends = [
1174+ base bytestring cereal entropy tagged transformers
1175+ ];
1176+ homepage = "https://github.com/TomMD/crypto-api";
1177+ description = "A generic interface for cryptographic operations";
1178+ license = stdenv.lib.licenses.bsd3;
1179+ }) {};
1180+ "crypto-api-tests" = callPackage
1181+ ({ mkDerivation, base, bytestring, cereal, crypto-api, directory
1182+ , filepath, HUnit, QuickCheck, test-framework, test-framework-hunit
1183+ , test-framework-quickcheck2
1184+ }:
1185+ mkDerivation {
1186+ pname = "crypto-api-tests";
1187+ version = "0.3";
1188+ sha256 = "0w3j43jdrlj28jryp18hc6q84nkl2yf4vs1hhgrsk7gb9kfyqjpl";
1189+ enableSeparateDataOutput = true;
1190+ libraryHaskellDepends = [
1191+ base bytestring cereal crypto-api directory filepath HUnit
1192+ QuickCheck test-framework test-framework-hunit
1193+ test-framework-quickcheck2
1194+ ];
1195+ homepage = "http://trac.haskell.org/crypto-api/wiki";
1196+ description = "A test framework and KATs for cryptographic operations";
1197+ license = stdenv.lib.licenses.bsd3;
1198+ }) {};
1199+ "cryptohash" = callPackage
1200+ ({ mkDerivation, base, byteable, bytestring, criterion, cryptonite
1201+ , ghc-prim, HUnit, memory, QuickCheck, tasty, tasty-hunit
1202+ , tasty-quickcheck
1203+ }:
1204+ mkDerivation {
1205+ pname = "cryptohash";
1206+ version = "0.11.9";
1207+ sha256 = "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2";
1208+ libraryHaskellDepends = [
1209+ base byteable bytestring cryptonite ghc-prim memory
1210+ ];
1211+ testHaskellDepends = [
1212+ base byteable bytestring HUnit QuickCheck tasty tasty-hunit
1213+ tasty-quickcheck
1214+ ];
1215+ benchmarkHaskellDepends = [ base byteable bytestring criterion ];
1216+ homepage = "http://github.com/vincenthz/hs-cryptohash";
1217+ description = "collection of crypto hashes, fast, pure and practical";
1218+ license = stdenv.lib.licenses.bsd3;
1219+ }) {};
1220+ "cryptonite" = callPackage
1221+ ({ mkDerivation, base, basement, bytestring, deepseq, gauge
1222+ , ghc-prim, integer-gmp, memory, random, tasty, tasty-hunit
1223+ , tasty-kat, tasty-quickcheck
1224+ }:
1225+ mkDerivation {
1226+ pname = "cryptonite";
1227+ version = "0.25";
1228+ sha256 = "131wbbdr5yavs5k1ah9sz6fqx1ffyvaxf66pwjzsfc47mwc1mgl9";
1229+ libraryHaskellDepends = [
1230+ base basement bytestring deepseq ghc-prim integer-gmp memory
1231+ ];
1232+ testHaskellDepends = [
1233+ base bytestring memory tasty tasty-hunit tasty-kat tasty-quickcheck
1234+ ];
1235+ benchmarkHaskellDepends = [
1236+ base bytestring deepseq gauge memory random
1237+ ];
1238+ homepage = "https://github.com/haskell-crypto/cryptonite";
1239+ description = "Cryptography Primitives sink";
1240+ license = stdenv.lib.licenses.bsd3;
1241+ }) {};
1242+ "cryptonite-conduit" = callPackage
1243+ ({ mkDerivation, base, bytestring, conduit, conduit-combinators
1244+ , conduit-extra, cryptonite, exceptions, memory, resourcet, tasty
1245+ , tasty-hunit, tasty-quickcheck, transformers
1246+ }:
1247+ mkDerivation {
1248+ pname = "cryptonite-conduit";
1249+ version = "0.2.2";
1250+ sha256 = "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh";
1251+ revision = "1";
1252+ editedCabalFile = "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz";
1253+ libraryHaskellDepends = [
1254+ base bytestring conduit conduit-extra cryptonite exceptions memory
1255+ resourcet transformers
1256+ ];
1257+ testHaskellDepends = [
1258+ base bytestring conduit conduit-combinators cryptonite memory tasty
1259+ tasty-hunit tasty-quickcheck
1260+ ];
1261+ homepage = "https://github.com/haskell-crypto/cryptonite-conduit";
1262+ description = "cryptonite conduit";
1263+ license = stdenv.lib.licenses.bsd3;
1264+ }) {};
1265+ "data-default" = callPackage
1266+ ({ mkDerivation, base, data-default-class
1267+ , data-default-instances-containers, data-default-instances-dlist
1268+ , data-default-instances-old-locale
1269+ }:
1270+ mkDerivation {
1271+ pname = "data-default";
1272+ version = "0.7.1.1";
1273+ sha256 = "04d5n8ybmcxba9qb6h389w9zfq1lvj81b82jh6maqp6pkhkmvydh";
1274+ libraryHaskellDepends = [
1275+ base data-default-class data-default-instances-containers
1276+ data-default-instances-dlist data-default-instances-old-locale
1277+ ];
1278+ description = "A class for types with a default value";
1279+ license = stdenv.lib.licenses.bsd3;
1280+ }) {};
1281+ "data-default-class" = callPackage
1282+ ({ mkDerivation, base }:
1283+ mkDerivation {
1284+ pname = "data-default-class";
1285+ version = "0.1.2.0";
1286+ sha256 = "0miyjz8d4jyvqf2vp60lyfbnflx6cj2k8apmm9ly1hq0y0iv80ag";
1287+ libraryHaskellDepends = [ base ];
1288+ description = "A class for types with a default value";
1289+ license = stdenv.lib.licenses.bsd3;
1290+ }) {};
1291+ "data-default-instances-containers" = callPackage
1292+ ({ mkDerivation, base, containers, data-default-class }:
1293+ mkDerivation {
1294+ pname = "data-default-instances-containers";
1295+ version = "0.0.1";
1296+ sha256 = "06h8xka031w752a7cjlzghvr8adqbl95xj9z5zc1b62w02phfpm5";
1297+ libraryHaskellDepends = [ base containers data-default-class ];
1298+ description = "Default instances for types in containers";
1299+ license = stdenv.lib.licenses.bsd3;
1300+ }) {};
1301+ "data-default-instances-dlist" = callPackage
1302+ ({ mkDerivation, base, data-default-class, dlist }:
1303+ mkDerivation {
1304+ pname = "data-default-instances-dlist";
1305+ version = "0.0.1";
1306+ sha256 = "0narkdqiprhgayjiawrr4390h4rq4pl2pb6mvixbv2phrc8kfs3x";
1307+ libraryHaskellDepends = [ base data-default-class dlist ];
1308+ description = "Default instances for types in dlist";
1309+ license = stdenv.lib.licenses.bsd3;
1310+ }) {};
1311+ "data-default-instances-old-locale" = callPackage
1312+ ({ mkDerivation, base, data-default-class, old-locale }:
1313+ mkDerivation {
1314+ pname = "data-default-instances-old-locale";
1315+ version = "0.0.1";
1316+ sha256 = "00h81i5phib741yj517p8mbnc48myvfj8axzsw44k34m48lv1lv0";
1317+ libraryHaskellDepends = [ base data-default-class old-locale ];
1318+ description = "Default instances for types in old-locale";
1319+ license = stdenv.lib.licenses.bsd3;
1320+ }) {};
1321+ "data-ordlist" = callPackage
1322+ ({ mkDerivation, base }:
1323+ mkDerivation {
1324+ pname = "data-ordlist";
1325+ version = "0.4.7.0";
1326+ sha256 = "03a9ix1fcx08viwv2jg5ndw1qbkydyyrmjvqr9wasmcik9x1wv3g";
1327+ libraryHaskellDepends = [ base ];
1328+ description = "Set and bag operations on ordered lists";
1329+ license = stdenv.lib.licenses.bsd3;
1330+ }) {};
1331+ "distribution-nixpkgs" = callPackage
1332+ ({ mkDerivation, aeson, base, bytestring, Cabal, containers
1333+ , deepseq, hspec, language-nix, lens, pretty, process, split
1334+ }:
1335+ mkDerivation {
1336+ pname = "distribution-nixpkgs";
1337+ version = "1.1.1";
1338+ sha256 = "1694crd3l9cyc0c5xvqmx62154519g2cnpzc5qmlypwrk258bssm";
1339+ libraryHaskellDepends = [
1340+ aeson base bytestring Cabal containers deepseq language-nix lens
1341+ pretty process split
1342+ ];
1343+ testHaskellDepends = [ base deepseq hspec lens ];
1344+ homepage = "https://github.com/peti/distribution-nixpkgs#readme";
1345+ description = "Types and functions to manipulate the Nixpkgs distribution";
1346+ license = stdenv.lib.licenses.bsd3;
1347+ }) {};
1348+ "distributive" = callPackage
1349+ ({ mkDerivation, base, base-orphans, Cabal, cabal-doctest, doctest
1350+ , generic-deriving, hspec, tagged, transformers
1351+ , transformers-compat
1352+ }:
1353+ mkDerivation {
1354+ pname = "distributive";
1355+ version = "0.5.3";
1356+ sha256 = "0y566r97sfyvhsmd4yxiz4ns2mqgwf5bdbp56wgxl6wlkidq0wwi";
1357+ revision = "6";
1358+ editedCabalFile = "06bd38rf31yrvvy989r44pm0id3dsxwcp6nxg7wk6ccj3n2b8rzk";
1359+ setupHaskellDepends = [ base Cabal cabal-doctest ];
1360+ libraryHaskellDepends = [
1361+ base base-orphans tagged transformers transformers-compat
1362+ ];
1363+ testHaskellDepends = [ base doctest generic-deriving hspec ];
1364+ homepage = "http://github.com/ekmett/distributive/";
1365+ description = "Distributive functors -- Dual to Traversable";
1366+ license = stdenv.lib.licenses.bsd3;
1367+ }) {};
1368+ "dlist" = callPackage
1369+ ({ mkDerivation, base, Cabal, deepseq, QuickCheck }:
1370+ mkDerivation {
1371+ pname = "dlist";
1372+ version = "0.8.0.4";
1373+ sha256 = "0yirrh0s6acjy9hhvf5fqg2d6q5y6gm9xs04v6w1imndh1xqdwdc";
1374+ libraryHaskellDepends = [ base deepseq ];
1375+ testHaskellDepends = [ base Cabal QuickCheck ];
1376+ homepage = "https://github.com/spl/dlist";
1377+ description = "Difference lists";
1378+ license = stdenv.lib.licenses.bsd3;
1379+ }) {};
1380+ "dlist-instances" = callPackage
1381+ ({ mkDerivation, base, dlist, semigroups }:
1382+ mkDerivation {
1383+ pname = "dlist-instances";
1384+ version = "0.1.1.1";
1385+ sha256 = "0nsgrr25r4qxv2kpn7i20hra8jjkyllxfrhh5hml3ysjdz010jni";
1386+ libraryHaskellDepends = [ base dlist semigroups ];
1387+ homepage = "https://github.com/gregwebs/dlist-instances";
1388+ description = "Difference lists instances";
1389+ license = stdenv.lib.licenses.bsd3;
1390+ }) {};
1391+ "doctest" = callPackage
1392+ ({ mkDerivation, base, base-compat, code-page, deepseq, directory
1393+ , filepath, ghc, ghc-paths, hspec, HUnit, mockery, process
1394+ , QuickCheck, setenv, silently, stringbuilder, syb, transformers
1395+ , with-location
1396+ }:
1397+ mkDerivation {
1398+ pname = "doctest";
1399+ version = "0.16.0";
1400+ sha256 = "0hkccch65s3kp0b36h7bqhilnpi4bx8kngncm7ma9vbd3dwacjdv";
1401+ isLibrary = true;
1402+ isExecutable = true;
1403+ libraryHaskellDepends = [
1404+ base base-compat code-page deepseq directory filepath ghc ghc-paths
1405+ process syb transformers
1406+ ];
1407+ executableHaskellDepends = [
1408+ base base-compat code-page deepseq directory filepath ghc ghc-paths
1409+ process syb transformers
1410+ ];
1411+ testHaskellDepends = [
1412+ base base-compat code-page deepseq directory filepath ghc ghc-paths
1413+ hspec HUnit mockery process QuickCheck setenv silently
1414+ stringbuilder syb transformers with-location
1415+ ];
1416+ doCheck = false;
1417+ homepage = "https://github.com/sol/doctest#readme";
1418+ description = "Test interactive Haskell examples";
1419+ license = stdenv.lib.licenses.mit;
1420+ }) {};
1421+ "easy-file" = callPackage
1422+ ({ mkDerivation, base, directory, filepath, time, unix }:
1423+ mkDerivation {
1424+ pname = "easy-file";
1425+ version = "0.2.2";
1426+ sha256 = "0zmlcz723051qpn8l8vi51c5rx1blwrw4094jcshkmj8p9r2xxaj";
1427+ libraryHaskellDepends = [ base directory filepath time unix ];
1428+ homepage = "http://github.com/kazu-yamamoto/easy-file";
1429+ description = "Cross-platform File handling";
1430+ license = stdenv.lib.licenses.bsd3;
1431+ }) {};
1432+ "entropy" = callPackage
1433+ ({ mkDerivation, base, bytestring, Cabal, directory, filepath
1434+ , process, unix
1435+ }:
1436+ mkDerivation {
1437+ pname = "entropy";
1438+ version = "0.4.1.1";
1439+ sha256 = "1ahz5g148l6sax3dy505na2513i99c7bxix68jja5kbx4f271zcf";
1440+ setupHaskellDepends = [ base Cabal directory filepath process ];
1441+ libraryHaskellDepends = [ base bytestring unix ];
1442+ homepage = "https://github.com/TomMD/entropy";
1443+ description = "A platform independent entropy source";
1444+ license = stdenv.lib.licenses.bsd3;
1445+ }) {};
1446+ "erf" = callPackage
1447+ ({ mkDerivation, base }:
1448+ mkDerivation {
1449+ pname = "erf";
1450+ version = "2.0.0.0";
1451+ sha256 = "0dxk2r32ajmmc05vaxcp0yw6vgv4lkbmh8jcshncn98xgsfbgw14";
1452+ libraryHaskellDepends = [ base ];
1453+ description = "The error function, erf, and related functions";
1454+ license = stdenv.lib.licenses.bsd3;
1455+ }) {};
1456+ "exceptions" = callPackage
1457+ ({ mkDerivation, base, mtl, QuickCheck, stm, template-haskell
1458+ , test-framework, test-framework-hunit, test-framework-quickcheck2
1459+ , transformers, transformers-compat
1460+ }:
1461+ mkDerivation {
1462+ pname = "exceptions";
1463+ version = "0.10.0";
1464+ sha256 = "1ms9zansv0pwzwdjncvx4kf18lnkjy2p61hvjhvxmjx5bqp93p8y";
1465+ revision = "1";
1466+ editedCabalFile = "1ydvmhi9bj7b1md3wd4l2z2lccgyjgv3ha8milmy2l4lad9xh6xy";
1467+ libraryHaskellDepends = [
1468+ base mtl stm template-haskell transformers transformers-compat
1469+ ];
1470+ testHaskellDepends = [
1471+ base mtl QuickCheck stm template-haskell test-framework
1472+ test-framework-hunit test-framework-quickcheck2 transformers
1473+ transformers-compat
1474+ ];
1475+ homepage = "http://github.com/ekmett/exceptions/";
1476+ description = "Extensible optionally-pure exceptions";
1477+ license = stdenv.lib.licenses.bsd3;
1478+ }) {};
1479+ "extensible-exceptions" = callPackage
1480+ ({ mkDerivation, base }:
1481+ mkDerivation {
1482+ pname = "extensible-exceptions";
1483+ version = "0.1.1.4";
1484+ sha256 = "1273nqws9ij1rp1bsq5jc7k2jxpqa0svawdbim05lf302y0firbc";
1485+ libraryHaskellDepends = [ base ];
1486+ description = "Extensible exceptions";
1487+ license = stdenv.lib.licenses.bsd3;
1488+ }) {};
1489+ "fast-logger" = callPackage
1490+ ({ mkDerivation, array, auto-update, base, bytestring, directory
1491+ , easy-file, filepath, hspec, text, unix, unix-time
1492+ }:
1493+ mkDerivation {
1494+ pname = "fast-logger";
1495+ version = "2.4.11";
1496+ sha256 = "1ad2vq4nifdxshqk9yrmghqizhkgybfz134kpr6padglb2mxxrdv";
1497+ libraryHaskellDepends = [
1498+ array auto-update base bytestring directory easy-file filepath text
1499+ unix unix-time
1500+ ];
1501+ testHaskellDepends = [ base bytestring directory hspec ];
1502+ homepage = "https://github.com/kazu-yamamoto/logger";
1503+ description = "A fast logging system";
1504+ license = stdenv.lib.licenses.bsd3;
1505+ }) {};
1506+ "foldl" = callPackage
1507+ ({ mkDerivation, base, bytestring, comonad, containers
1508+ , contravariant, criterion, hashable, mwc-random, primitive
1509+ , profunctors, semigroupoids, semigroups, text, transformers
1510+ , unordered-containers, vector, vector-builder
1511+ }:
1512+ mkDerivation {
1513+ pname = "foldl";
1514+ version = "1.4.2";
1515+ sha256 = "14ccc2spv63v7vipfrmk8jbbw2x1dkkxsyzqzcpnkzjw0yg4ghc9";
1516+ libraryHaskellDepends = [
1517+ base bytestring comonad containers contravariant hashable
1518+ mwc-random primitive profunctors semigroupoids semigroups text
1519+ transformers unordered-containers vector vector-builder
1520+ ];
1521+ benchmarkHaskellDepends = [ base criterion ];
1522+ description = "Composable, streaming, and efficient left folds";
1523+ license = stdenv.lib.licenses.bsd3;
1524+ }) {};
1525+ "foundation" = callPackage
1526+ ({ mkDerivation, base, basement, gauge, ghc-prim }:
1527+ mkDerivation {
1528+ pname = "foundation";
1529+ version = "0.0.21";
1530+ sha256 = "1q43y8wfj0wf9gdq2kzphwjwq6m5pvryy1lqgk954aq5z3ks1lsf";
1531+ libraryHaskellDepends = [ base basement ghc-prim ];
1532+ testHaskellDepends = [ base basement ];
1533+ benchmarkHaskellDepends = [ base basement gauge ];
1534+ homepage = "https://github.com/haskell-foundation/foundation";
1535+ description = "Alternative prelude with batteries and no dependencies";
1536+ license = stdenv.lib.licenses.bsd3;
1537+ }) {};
1538+ "free" = callPackage
1539+ ({ mkDerivation, base, bifunctors, comonad, containers
1540+ , distributive, exceptions, mtl, profunctors, semigroupoids
1541+ , semigroups, template-haskell, transformers, transformers-base
1542+ , transformers-compat
1543+ }:
1544+ mkDerivation {
1545+ pname = "free";
1546+ version = "5.0.2";
1547+ sha256 = "15m3n9vhz7z3kzv1w3wlfa3x8jp4cbrkwmrcjr7jlx39iqffn1gg";
1548+ libraryHaskellDepends = [
1549+ base bifunctors comonad containers distributive exceptions mtl
1550+ profunctors semigroupoids semigroups template-haskell transformers
1551+ transformers-base transformers-compat
1552+ ];
1553+ homepage = "http://github.com/ekmett/free/";
1554+ description = "Monads for free";
1555+ license = stdenv.lib.licenses.bsd3;
1556+ }) {};
1557+ "gauge" = callPackage
1558+ ({ mkDerivation, base, basement, bytestring, deepseq, directory
1559+ , foundation, process, vector
1560+ }:
1561+ mkDerivation {
1562+ pname = "gauge";
1563+ version = "0.2.3";
1564+ sha256 = "0slsimv2zn9yhakxy2wdyfj6bgjd1p65wp6nr8j0ba7df64xykjs";
1565+ libraryHaskellDepends = [
1566+ base basement deepseq directory process vector
1567+ ];
1568+ testHaskellDepends = [
1569+ base bytestring deepseq directory foundation
1570+ ];
1571+ benchmarkHaskellDepends = [ base ];
1572+ homepage = "https://github.com/vincenthz/hs-gauge";
1573+ description = "small framework for performance measurement and analysis";
1574+ license = stdenv.lib.licenses.bsd3;
1575+ }) {};
1576+ "generic-deriving" = callPackage
1577+ ({ mkDerivation, base, containers, ghc-prim, hspec, hspec-discover
1578+ , template-haskell, th-abstraction
1579+ }:
1580+ mkDerivation {
1581+ pname = "generic-deriving";
1582+ version = "1.12.2";
1583+ sha256 = "1i7d6cpj9yhaqb79zays3nqchhaacacjz9bkc0zlwj73y5gvi22n";
1584+ revision = "1";
1585+ editedCabalFile = "0gr20ypr6s0183wmrhmia0zvpbn4dmfyr3wksrkrqj4i8nhj42fz";
1586+ libraryHaskellDepends = [
1587+ base containers ghc-prim template-haskell th-abstraction
1588+ ];
1589+ testHaskellDepends = [ base hspec template-haskell ];
1590+ testToolDepends = [ hspec-discover ];
1591+ homepage = "https://github.com/dreixel/generic-deriving";
1592+ description = "Generic programming library for generalised deriving";
1593+ license = stdenv.lib.licenses.bsd3;
1594+ }) {};
1595+ "ghc-paths" = callPackage
1596+ ({ mkDerivation, base, Cabal, directory }:
1597+ mkDerivation {
1598+ pname = "ghc-paths";
1599+ version = "0.1.0.9";
1600+ sha256 = "0ibrr1dxa35xx20cpp8jzgfak1rdmy344dfwq4vlq013c6w8z9mg";
1601+ revision = "3";
1602+ editedCabalFile = "1gx47xbm3qviqccnbsibzkfnlzljvls33jh1ry4l506yvfnf4j10";
1603+ setupHaskellDepends = [ base Cabal directory ];
1604+ libraryHaskellDepends = [ base ];
1605+ description = "Knowledge of GHC's installation directories";
1606+ license = stdenv.lib.licenses.bsd3;
1607+ }) {};
1608+ "gitrev" = callPackage
1609+ ({ mkDerivation, base, base-compat, directory, filepath, process
1610+ , template-haskell
1611+ }:
1612+ mkDerivation {
1613+ pname = "gitrev";
1614+ version = "1.3.1";
1615+ sha256 = "0cl3lfm6k1h8fxp2vxa6ihfp4v8igkz9h35iwyq2frzm4kdn96d8";
1616+ libraryHaskellDepends = [
1617+ base base-compat directory filepath process template-haskell
1618+ ];
1619+ homepage = "https://github.com/acfoltzer/gitrev";
1620+ description = "Compile git revision info into Haskell projects";
1621+ license = stdenv.lib.licenses.bsd3;
1622+ }) {};
1623+ "groom" = callPackage
1624+ ({ mkDerivation, base, haskell-src-exts }:
1625+ mkDerivation {
1626+ pname = "groom";
1627+ version = "0.1.2.1";
1628+ sha256 = "17g51p15209wwgq83clsd97xvy4kchbx8jzh74qgc9hvmz9s9d56";
1629+ isLibrary = true;
1630+ isExecutable = true;
1631+ libraryHaskellDepends = [ base haskell-src-exts ];
1632+ executableHaskellDepends = [ base ];
1633+ description = "Pretty printing for well-behaved Show instances";
1634+ license = stdenv.lib.licenses.bsd3;
1635+ }) {};
1636+ "hackage-db" = callPackage
1637+ ({ mkDerivation, aeson, base, bytestring, Cabal, containers
1638+ , directory, filepath, tar, time, utf8-string
1639+ }:
1640+ mkDerivation {
1641+ pname = "hackage-db";
1642+ version = "2.0.1";
1643+ sha256 = "13ggj72i8dxwh3qwznnqxbr00nvsbapyyhzx5zybfacddnpw3aph";
1644+ isLibrary = true;
1645+ isExecutable = true;
1646+ libraryHaskellDepends = [
1647+ aeson base bytestring Cabal containers directory filepath tar time
1648+ utf8-string
1649+ ];
1650+ homepage = "https://github.com/peti/hackage-db#readme";
1651+ description = "Access Hackage's package database via Data.Map";
1652+ license = stdenv.lib.licenses.bsd3;
1653+ }) {};
1654+ "happy" = callPackage
1655+ ({ mkDerivation, array, base, Cabal, containers, directory
1656+ , filepath, mtl, process
1657+ }:
1658+ mkDerivation {
1659+ pname = "happy";
1660+ version = "1.19.9";
1661+ sha256 = "138xpxdb7x62lpmgmb6b3v3vgdqqvqn4273jaap3mjmc2gla709y";
1662+ revision = "2";
1663+ editedCabalFile = "1zxi8zfwiwxidrhr0yj5srpzp32z66sld9xv0k4yz7046rkl3577";
1664+ isLibrary = false;
1665+ isExecutable = true;
1666+ setupHaskellDepends = [ base Cabal directory filepath ];
1667+ executableHaskellDepends = [ array base containers mtl ];
1668+ testHaskellDepends = [ base process ];
1669+ doHaddock = false;
1670+ doCheck = false;
1671+ homepage = "https://www.haskell.org/happy/";
1672+ description = "Happy is a parser generator for Haskell";
1673+ license = stdenv.lib.licenses.bsd2;
1674+ }) {};
1675+ "hashable" = callPackage
1676+ ({ mkDerivation, base, bytestring, criterion, deepseq, ghc-prim
1677+ , HUnit, integer-gmp, QuickCheck, random, siphash, test-framework
1678+ , test-framework-hunit, test-framework-quickcheck2, text, unix
1679+ }:
1680+ mkDerivation {
1681+ pname = "hashable";
1682+ version = "1.2.7.0";
1683+ sha256 = "1gra8gq3kb7b2sd845h55yxlrfqx3ii004c6vjhga8v0b30fzdgc";
1684+ isLibrary = true;
1685+ isExecutable = true;
1686+ libraryHaskellDepends = [
1687+ base bytestring deepseq ghc-prim integer-gmp text
1688+ ];
1689+ testHaskellDepends = [
1690+ base bytestring ghc-prim HUnit QuickCheck random test-framework
1691+ test-framework-hunit test-framework-quickcheck2 text unix
1692+ ];
1693+ benchmarkHaskellDepends = [
1694+ base bytestring criterion ghc-prim integer-gmp siphash text
1695+ ];
1696+ homepage = "http://github.com/tibbe/hashable";
1697+ description = "A class for types that can be converted to a hash value";
1698+ license = stdenv.lib.licenses.bsd3;
1699+ }) {};
1700+ "hashtables" = callPackage
1701+ ({ mkDerivation, base, ghc-prim, hashable, primitive, vector }:
1702+ mkDerivation {
1703+ pname = "hashtables";
1704+ version = "1.2.3.1";
1705+ sha256 = "1giw9caajr07slf09j7zry9b0kvm4yj9q78zy1mawzi6gk3wglcg";
1706+ libraryHaskellDepends = [
1707+ base ghc-prim hashable primitive vector
1708+ ];
1709+ homepage = "http://github.com/gregorycollins/hashtables";
1710+ description = "Mutable hash tables in the ST monad";
1711+ license = stdenv.lib.licenses.bsd3;
1712+ }) {};
1713+ "haskell-lexer" = callPackage
1714+ ({ mkDerivation, base }:
1715+ mkDerivation {
1716+ pname = "haskell-lexer";
1717+ version = "1.0.1";
1718+ sha256 = "0rj3r1pk88hh3sk3mj61whp8czz5kpxhbc78xlr04bxwqjrjmm6p";
1719+ libraryHaskellDepends = [ base ];
1720+ description = "A fully compliant Haskell 98 lexer";
1721+ license = stdenv.lib.licenses.bsd3;
1722+ }) {};
1723+ "haskell-src-exts" = callPackage
1724+ ({ mkDerivation, array, base, containers, cpphs, directory
1725+ , filepath, ghc-prim, happy, mtl, pretty, pretty-show, smallcheck
1726+ , tasty, tasty-golden, tasty-smallcheck
1727+ }:
1728+ mkDerivation {
1729+ pname = "haskell-src-exts";
1730+ version = "1.20.2";
1731+ sha256 = "1sm3z4v1p5yffg01ldgavz71s3bvfhjfa13k428rk14bpkl8crlz";
1732+ libraryHaskellDepends = [ array base cpphs ghc-prim pretty ];
1733+ libraryToolDepends = [ happy ];
1734+ testHaskellDepends = [
1735+ base containers directory filepath mtl pretty-show smallcheck tasty
1736+ tasty-golden tasty-smallcheck
1737+ ];
1738+ homepage = "https://github.com/haskell-suite/haskell-src-exts";
1739+ description = "Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer";
1740+ license = stdenv.lib.licenses.bsd3;
1741+ }) {};
1742+ "haskell-src-meta" = callPackage
1743+ ({ mkDerivation, base, haskell-src-exts, HUnit, pretty, syb
1744+ , template-haskell, test-framework, test-framework-hunit
1745+ , th-orphans
1746+ }:
1747+ mkDerivation {
1748+ pname = "haskell-src-meta";
1749+ version = "0.8.0.3";
1750+ sha256 = "08jq156zv4m0fjq6712n99c1jwxnpa6kj6sq8ch0r1l0a1ay6ww4";
1751+ libraryHaskellDepends = [
1752+ base haskell-src-exts pretty syb template-haskell th-orphans
1753+ ];
1754+ testHaskellDepends = [
1755+ base haskell-src-exts HUnit pretty template-haskell test-framework
1756+ test-framework-hunit
1757+ ];
1758+ description = "Parse source to template-haskell abstract syntax";
1759+ license = stdenv.lib.licenses.bsd3;
1760+ }) {};
1761+ "heaps" = callPackage
1762+ ({ mkDerivation, base, Cabal, cabal-doctest, directory, doctest
1763+ , filepath
1764+ }:
1765+ mkDerivation {
1766+ pname = "heaps";
1767+ version = "0.3.6";
1768+ sha256 = "1cnxgmxxvl053yv93vcz5fnla4iir5g9wr697n88ysdyybbkq70q";
1769+ revision = "3";
1770+ editedCabalFile = "0k6wsm1hwn3vaxdvw8p7cidxg7p8zply2ig4w4qrbpyjhl6dj9x9";
1771+ setupHaskellDepends = [ base Cabal cabal-doctest ];
1772+ libraryHaskellDepends = [ base ];
1773+ testHaskellDepends = [ base directory doctest filepath ];
1774+ homepage = "http://github.com/ekmett/heaps/";
1775+ description = "Asymptotically optimal Brodal/Okasaki heaps";
1776+ license = stdenv.lib.licenses.bsd3;
1777+ }) {};
1778+ "hedgehog" = callPackage
1779+ ({ mkDerivation, ansi-terminal, async, base, bytestring
1780+ , concurrent-output, containers, directory, exceptions
1781+ , lifted-async, mmorph, monad-control, mtl, pretty-show, primitive
1782+ , random, resourcet, semigroups, stm, template-haskell, text
1783+ , th-lift, time, transformers, transformers-base, unix
1784+ , wl-pprint-annotated
1785+ }:
1786+ mkDerivation {
1787+ pname = "hedgehog";
1788+ version = "0.6";
1789+ sha256 = "0c3y4gvl1i2r54ayha2kw5i2gdpd8nfzfzjly5vhxm13ylygwvxq";
1790+ libraryHaskellDepends = [
1791+ ansi-terminal async base bytestring concurrent-output containers
1792+ directory exceptions lifted-async mmorph monad-control mtl
1793+ pretty-show primitive random resourcet semigroups stm
1794+ template-haskell text th-lift time transformers transformers-base
1795+ unix wl-pprint-annotated
1796+ ];
1797+ testHaskellDepends = [
1798+ base containers pretty-show semigroups text transformers
1799+ ];
1800+ homepage = "https://hedgehog.qa";
1801+ description = "Hedgehog will eat all your bugs";
1802+ license = stdenv.lib.licenses.bsd3;
1803+ }) {};
1804+ "hex" = callPackage
1805+ ({ mkDerivation, base, bytestring }:
1806+ mkDerivation {
1807+ pname = "hex";
1808+ version = "0.1.2";
1809+ sha256 = "1v31xiaivrrn0q2jz8919wvkjplv1kxna5ajhsj701fqxm1i5vhj";
1810+ libraryHaskellDepends = [ base bytestring ];
1811+ description = "Convert strings into hexadecimal and back";
1812+ license = stdenv.lib.licenses.bsd3;
1813+ }) {};
1814+ "hlibgit2" = callPackage
1815+ ({ mkDerivation, base, bindings-DSL, git, openssl, process, zlib }:
1816+ mkDerivation {
1817+ pname = "hlibgit2";
1818+ version = "0.18.0.16";
1819+ sha256 = "0plfzxzgph7iilwp434ndcw7pia47n96hcfa32fs7q5gz8kl17hr";
1820+ libraryHaskellDepends = [ base bindings-DSL zlib ];
1821+ librarySystemDepends = [ openssl ];
1822+ testHaskellDepends = [ base process ];
1823+ testToolDepends = [ git ];
1824+ description = "Low-level bindings to libgit2";
1825+ license = stdenv.lib.licenses.mit;
1826+ }) {inherit (pkgs) git; inherit (pkgs) openssl;};
1827+ "hopenssl" = callPackage
1828+ ({ mkDerivation, base, bytestring, Cabal, cabal-doctest, doctest
1829+ , HUnit, openssl
1830+ }:
1831+ mkDerivation {
1832+ pname = "hopenssl";
1833+ version = "2.2.1";
1834+ sha256 = "1pxbs1k8sizvvz1nn1zv2i5grn0w11s9g09z07w5f80kbz0slcbh";
1835+ setupHaskellDepends = [ base Cabal cabal-doctest ];
1836+ libraryHaskellDepends = [ base bytestring ];
1837+ librarySystemDepends = [ openssl ];
1838+ testHaskellDepends = [ base doctest HUnit ];
1839+ homepage = "http://github.com/peti/hopenssl";
1840+ description = "FFI Bindings to OpenSSL's EVP Digest Interface";
1841+ license = stdenv.lib.licenses.bsd3;
1842+ }) {inherit (pkgs) openssl;};
1843+ "hostname" = callPackage
1844+ ({ mkDerivation, base }:
1845+ mkDerivation {
1846+ pname = "hostname";
1847+ version = "1.0";
1848+ sha256 = "0p6gm4328946qxc295zb6vhwhf07l1fma82vd0siylnsnsqxlhwv";
1849+ libraryHaskellDepends = [ base ];
1850+ description = "A very simple package providing a cross-platform means of determining the hostname";
1851+ license = stdenv.lib.licenses.bsd3;
1852+ }) {};
1853+ "hourglass" = callPackage
1854+ ({ mkDerivation, base, bytestring, deepseq, gauge, mtl, old-locale
1855+ , tasty, tasty-hunit, tasty-quickcheck, time
1856+ }:
1857+ mkDerivation {
1858+ pname = "hourglass";
1859+ version = "0.2.11";
1860+ sha256 = "0lag9sgj7ndrbfmab6jhszlv413agg0zzaj5r9f2fmf07wqbp9hq";
1861+ libraryHaskellDepends = [ base deepseq ];
1862+ testHaskellDepends = [
1863+ base deepseq mtl old-locale tasty tasty-hunit tasty-quickcheck time
1864+ ];
1865+ benchmarkHaskellDepends = [
1866+ base bytestring deepseq gauge mtl old-locale time
1867+ ];
1868+ homepage = "https://github.com/vincenthz/hs-hourglass";
1869+ description = "simple performant time related library";
1870+ license = stdenv.lib.licenses.bsd3;
1871+ }) {};
1872+ "hpack" = callPackage
1873+ ({ mkDerivation, aeson, base, bifunctors, bytestring, Cabal
1874+ , containers, cryptonite, deepseq, directory, filepath, Glob, hspec
1875+ , http-client, http-client-tls, http-types, HUnit, interpolate
1876+ , mockery, pretty, QuickCheck, scientific, template-haskell
1877+ , temporary, text, transformers, unordered-containers, vector, yaml
1878+ }:
1879+ mkDerivation {
1880+ pname = "hpack";
1881+ version = "0.28.2";
1882+ sha256 = "18w0h76jdp3mk9vin8da9iz3cwhcxmw787xy8wlh8bxcpcr16q5r";
1883+ isLibrary = true;
1884+ isExecutable = true;
1885+ libraryHaskellDepends = [
1886+ aeson base bifunctors bytestring Cabal containers cryptonite
1887+ deepseq directory filepath Glob http-client http-client-tls
1888+ http-types pretty scientific text transformers unordered-containers
1889+ vector yaml
1890+ ];
1891+ executableHaskellDepends = [
1892+ aeson base bifunctors bytestring Cabal containers cryptonite
1893+ deepseq directory filepath Glob http-client http-client-tls
1894+ http-types pretty scientific text transformers unordered-containers
1895+ vector yaml
1896+ ];
1897+ testHaskellDepends = [
1898+ aeson base bifunctors bytestring Cabal containers cryptonite
1899+ deepseq directory filepath Glob hspec http-client http-client-tls
1900+ http-types HUnit interpolate mockery pretty QuickCheck scientific
1901+ template-haskell temporary text transformers unordered-containers
1902+ vector yaml
1903+ ];
1904+ homepage = "https://github.com/sol/hpack#readme";
1905+ description = "An alternative format for Haskell packages";
1906+ license = stdenv.lib.licenses.mit;
1907+ }) {};
1908+ "hscolour" = callPackage
1909+ ({ mkDerivation, base, containers }:
1910+ mkDerivation {
1911+ pname = "hscolour";
1912+ version = "1.24.4";
1913+ sha256 = "079jwph4bwllfp03yfr26s5zc6m6kw3nhb1cggrifh99haq34cr4";
1914+ isLibrary = true;
1915+ isExecutable = true;
1916+ enableSeparateDataOutput = true;
1917+ libraryHaskellDepends = [ base containers ];
1918+ executableHaskellDepends = [ base containers ];
1919+ homepage = "http://code.haskell.org/~malcolm/hscolour/";
1920+ description = "Colourise Haskell code";
1921+ license = "LGPL";
1922+ }) {};
1923+ "hspec" = callPackage
1924+ ({ mkDerivation, base, call-stack, directory, hspec-core
1925+ , hspec-discover, hspec-expectations, hspec-meta, HUnit, QuickCheck
1926+ , stringbuilder, transformers
1927+ }:
1928+ mkDerivation {
1929+ pname = "hspec";
1930+ version = "2.5.5";
1931+ sha256 = "1yv4k5b5kkig2q3waj28587sq28wms7wfav5a3lq4dra6jybimfm";
1932+ libraryHaskellDepends = [
1933+ base call-stack hspec-core hspec-discover hspec-expectations HUnit
1934+ QuickCheck transformers
1935+ ];
1936+ testHaskellDepends = [
1937+ base call-stack directory hspec-core hspec-discover
1938+ hspec-expectations hspec-meta HUnit QuickCheck stringbuilder
1939+ transformers
1940+ ];
1941+ homepage = "http://hspec.github.io/";
1942+ description = "A Testing Framework for Haskell";
1943+ license = stdenv.lib.licenses.mit;
1944+ }) {};
1945+ "hspec-core" = callPackage
1946+ ({ mkDerivation, ansi-terminal, array, base, call-stack, clock
1947+ , deepseq, directory, filepath, hspec-expectations, hspec-meta
1948+ , HUnit, process, QuickCheck, quickcheck-io, random, setenv
1949+ , silently, stm, temporary, tf-random, transformers
1950+ }:
1951+ mkDerivation {
1952+ pname = "hspec-core";
1953+ version = "2.5.5";
1954+ sha256 = "1vfrqlpn32s9wiykmkxbnrnd5p56yznw20pf8fwzw78ar4wpz55x";
1955+ libraryHaskellDepends = [
1956+ ansi-terminal array base call-stack clock deepseq directory
1957+ filepath hspec-expectations HUnit QuickCheck quickcheck-io random
1958+ setenv stm tf-random transformers
1959+ ];
1960+ testHaskellDepends = [
1961+ ansi-terminal array base call-stack clock deepseq directory
1962+ filepath hspec-expectations hspec-meta HUnit process QuickCheck
1963+ quickcheck-io random setenv silently stm temporary tf-random
1964+ transformers
1965+ ];
1966+ testTarget = "--test-option=--skip --test-option='Test.Hspec.Core.Runner.hspecResult runs specs in parallel'";
1967+ homepage = "http://hspec.github.io/";
1968+ description = "A Testing Framework for Haskell";
1969+ license = stdenv.lib.licenses.mit;
1970+ }) {};
1971+ "hspec-discover" = callPackage
1972+ ({ mkDerivation, base, directory, filepath, hspec-meta, QuickCheck
1973+ }:
1974+ mkDerivation {
1975+ pname = "hspec-discover";
1976+ version = "2.5.5";
1977+ sha256 = "04aidzi91ccr9bygmfkjzshz34z9vh8wvqj4zinx2clxq6r7gqfz";
1978+ isLibrary = true;
1979+ isExecutable = true;
1980+ libraryHaskellDepends = [ base directory filepath ];
1981+ executableHaskellDepends = [ base directory filepath ];
1982+ testHaskellDepends = [
1983+ base directory filepath hspec-meta QuickCheck
1984+ ];
1985+ homepage = "http://hspec.github.io/";
1986+ description = "Automatically discover and run Hspec tests";
1987+ license = stdenv.lib.licenses.mit;
1988+ }) {};
1989+ "hspec-expectations" = callPackage
1990+ ({ mkDerivation, base, call-stack, HUnit, nanospec }:
1991+ mkDerivation {
1992+ pname = "hspec-expectations";
1993+ version = "0.8.2";
1994+ sha256 = "1vxl9zazbaapijr6zmcj72j9wf7ka1pirrjbwddwwddg3zm0g5l1";
1995+ libraryHaskellDepends = [ base call-stack HUnit ];
1996+ testHaskellDepends = [ base call-stack HUnit nanospec ];
1997+ homepage = "https://github.com/hspec/hspec-expectations#readme";
1998+ description = "Catchy combinators for HUnit";
1999+ license = stdenv.lib.licenses.mit;
2000+ }) {};
2001+ "hspec-megaparsec" = callPackage
2002+ ({ mkDerivation, base, containers, hspec, hspec-expectations
2003+ , megaparsec
2004+ }:
2005+ mkDerivation {
2006+ pname = "hspec-megaparsec";
2007+ version = "1.0.0";
2008+ sha256 = "1dafrbzjm7rzwvcpjpk3bsg7bd111xfij94n17sh8wfykzhim5hl";
2009+ libraryHaskellDepends = [
2010+ base containers hspec-expectations megaparsec
2011+ ];
2012+ testHaskellDepends = [ base hspec hspec-expectations megaparsec ];
2013+ homepage = "https://github.com/mrkkrp/hspec-megaparsec";
2014+ description = "Utility functions for testing Megaparsec parsers with Hspec";
2015+ license = stdenv.lib.licenses.bsd3;
2016+ }) {};
2017+ "hspec-meta" = callPackage
2018+ ({ mkDerivation, ansi-terminal, array, async, base, call-stack
2019+ , deepseq, directory, filepath, hspec-expectations, HUnit
2020+ , QuickCheck, quickcheck-io, random, setenv, time, transformers
2021+ }:
2022+ mkDerivation {
2023+ pname = "hspec-meta";
2024+ version = "2.4.6";
2025+ sha256 = "0qmvk01n79j6skn79r6zalg2pd0x0nqqn9qn8mhg0pgyzcdnfc9b";
2026+ isLibrary = true;
2027+ isExecutable = true;
2028+ libraryHaskellDepends = [
2029+ ansi-terminal array async base call-stack deepseq directory
2030+ filepath hspec-expectations HUnit QuickCheck quickcheck-io random
2031+ setenv time transformers
2032+ ];
2033+ executableHaskellDepends = [
2034+ ansi-terminal array async base call-stack deepseq directory
2035+ filepath hspec-expectations HUnit QuickCheck quickcheck-io random
2036+ setenv time transformers
2037+ ];
2038+ homepage = "http://hspec.github.io/";
2039+ description = "A version of Hspec which is used to test Hspec itself";
2040+ license = stdenv.lib.licenses.mit;
2041+ }) {};
2042+ "hspec-smallcheck" = callPackage
2043+ ({ mkDerivation, base, base-orphans, call-stack, hspec, hspec-core
2044+ , HUnit, QuickCheck, smallcheck
2045+ }:
2046+ mkDerivation {
2047+ pname = "hspec-smallcheck";
2048+ version = "0.5.2";
2049+ sha256 = "06c1ym793zkdwi4bxk5f4l7m1n1bg5jmnm0p68q2pa9rlhk1lc4s";
2050+ libraryHaskellDepends = [
2051+ base call-stack hspec-core HUnit smallcheck
2052+ ];
2053+ testHaskellDepends = [
2054+ base base-orphans call-stack hspec hspec-core HUnit QuickCheck
2055+ smallcheck
2056+ ];
2057+ homepage = "http://hspec.github.io/";
2058+ description = "SmallCheck support for the Hspec testing framework";
2059+ license = stdenv.lib.licenses.mit;
2060+ }) {};
2061+ "html-conduit" = callPackage
2062+ ({ mkDerivation, attoparsec, base, bytestring, conduit
2063+ , conduit-extra, containers, deepseq, hspec, HUnit, resourcet, text
2064+ , transformers, xml-conduit, xml-types
2065+ }:
2066+ mkDerivation {
2067+ pname = "html-conduit";
2068+ version = "1.3.1";
2069+ sha256 = "0dg3sblihi93qn6ax1cwha0cng4zlpmic83ckdylq7s7kwa3rhbi";
2070+ libraryHaskellDepends = [
2071+ attoparsec base bytestring conduit conduit-extra containers
2072+ resourcet text transformers xml-conduit xml-types
2073+ ];
2074+ testHaskellDepends = [
2075+ base bytestring containers deepseq hspec HUnit text xml-conduit
2076+ ];
2077+ homepage = "https://github.com/snoyberg/xml";
2078+ description = "Parse HTML documents using xml-conduit datatypes";
2079+ license = stdenv.lib.licenses.mit;
2080+ }) {};
2081+ "http-client" = callPackage
2082+ ({ mkDerivation, array, async, base, blaze-builder, bytestring
2083+ , case-insensitive, containers, cookie, deepseq, directory
2084+ , exceptions, filepath, ghc-prim, hspec, http-types, memory
2085+ , mime-types, monad-control, network, network-uri, random, stm
2086+ , streaming-commons, text, time, transformers, zlib
2087+ }:
2088+ mkDerivation {
2089+ pname = "http-client";
2090+ version = "0.5.13.1";
2091+ sha256 = "0szwbgvkkdz56lgi91armkagmb7nnfwbpp4j7cm9zhmffv3ba8g1";
2092+ libraryHaskellDepends = [
2093+ array base blaze-builder bytestring case-insensitive containers
2094+ cookie deepseq exceptions filepath ghc-prim http-types memory
2095+ mime-types network network-uri random stm streaming-commons text
2096+ time transformers
2097+ ];
2098+ testHaskellDepends = [
2099+ async base blaze-builder bytestring case-insensitive containers
2100+ deepseq directory hspec http-types monad-control network
2101+ network-uri streaming-commons text time transformers zlib
2102+ ];
2103+ doCheck = false;
2104+ homepage = "https://github.com/snoyberg/http-client";
2105+ description = "An HTTP client engine";
2106+ license = stdenv.lib.licenses.mit;
2107+ }) {};
2108+ "http-client-tls" = callPackage
2109+ ({ mkDerivation, base, bytestring, case-insensitive, connection
2110+ , containers, cryptonite, data-default-class, exceptions, gauge
2111+ , hspec, http-client, http-types, memory, network, network-uri
2112+ , text, tls, transformers
2113+ }:
2114+ mkDerivation {
2115+ pname = "http-client-tls";
2116+ version = "0.3.5.3";
2117+ sha256 = "0qj3pcpgbsfsc4m52dz35khhl4hf1i0nmcpa445z82d9567vy6j7";
2118+ libraryHaskellDepends = [
2119+ base bytestring case-insensitive connection containers cryptonite
2120+ data-default-class exceptions http-client http-types memory network
2121+ network-uri text tls transformers
2122+ ];
2123+ testHaskellDepends = [
2124+ base connection hspec http-client http-types
2125+ ];
2126+ benchmarkHaskellDepends = [ base gauge http-client ];
2127+ doCheck = false;
2128+ homepage = "https://github.com/snoyberg/http-client";
2129+ description = "http-client backend using the connection package and tls library";
2130+ license = stdenv.lib.licenses.mit;
2131+ }) {};
2132+ "http-conduit" = callPackage
2133+ ({ mkDerivation, aeson, base, blaze-builder, bytestring
2134+ , case-insensitive, conduit, conduit-extra, connection, cookie
2135+ , data-default-class, hspec, http-client, http-client-tls
2136+ , http-types, HUnit, mtl, network, resourcet, streaming-commons
2137+ , temporary, text, time, transformers, unliftio, unliftio-core
2138+ , utf8-string, wai, wai-conduit, warp, warp-tls
2139+ }:
2140+ mkDerivation {
2141+ pname = "http-conduit";
2142+ version = "2.3.2";
2143+ sha256 = "1iay4hr0mj8brkxvgkv1liqa8irl9axfc3qhn8qsvcyq4n1l95km";
2144+ revision = "1";
2145+ editedCabalFile = "0g6rg8r33q5rmrx5287vjfcqwjacchgzyfc8aqqrhrfz3fq5ll0g";
2146+ libraryHaskellDepends = [
2147+ aeson base bytestring conduit conduit-extra http-client
2148+ http-client-tls http-types mtl resourcet transformers unliftio-core
2149+ ];
2150+ testHaskellDepends = [
2151+ aeson base blaze-builder bytestring case-insensitive conduit
2152+ conduit-extra connection cookie data-default-class hspec
2153+ http-client http-types HUnit network resourcet streaming-commons
2154+ temporary text time transformers unliftio utf8-string wai
2155+ wai-conduit warp warp-tls
2156+ ];
2157+ homepage = "http://www.yesodweb.com/book/http-conduit";
2158+ description = "HTTP client package with conduit interface and HTTPS support";
2159+ license = stdenv.lib.licenses.bsd3;
2160+ }) {};
2161+ "http-date" = callPackage
2162+ ({ mkDerivation, array, attoparsec, base, bytestring, doctest
2163+ , hspec, old-locale, time
2164+ }:
2165+ mkDerivation {
2166+ pname = "http-date";
2167+ version = "0.0.7";
2168+ sha256 = "1hpzs646qqzp2g2qy7rx1bf3knf1hw38n82vcq6bs4mm1xzdryff";
2169+ libraryHaskellDepends = [ array attoparsec base bytestring time ];
2170+ testHaskellDepends = [
2171+ base bytestring doctest hspec old-locale time
2172+ ];
2173+ description = "HTTP Date parser/formatter";
2174+ license = stdenv.lib.licenses.bsd3;
2175+ }) {};
2176+ "http-types" = callPackage
2177+ ({ mkDerivation, array, base, bytestring, case-insensitive, doctest
2178+ , hspec, QuickCheck, quickcheck-instances, text
2179+ }:
2180+ mkDerivation {
2181+ pname = "http-types";
2182+ version = "0.12.1";
2183+ sha256 = "1wv9k6nlvkdsxwlr7gaynphvzmvi5211gvwq96mbcxgk51a739rz";
2184+ libraryHaskellDepends = [
2185+ array base bytestring case-insensitive text
2186+ ];
2187+ testHaskellDepends = [
2188+ base bytestring doctest hspec QuickCheck quickcheck-instances text
2189+ ];
2190+ homepage = "https://github.com/aristidb/http-types";
2191+ description = "Generic HTTP types for Haskell (for both client and server code)";
2192+ license = stdenv.lib.licenses.bsd3;
2193+ }) {};
2194+ "http2" = callPackage
2195+ ({ mkDerivation, aeson, aeson-pretty, array, base, bytestring
2196+ , bytestring-builder, case-insensitive, containers, criterion
2197+ , directory, doctest, filepath, Glob, hashtables, heaps, hex, hspec
2198+ , mwc-random, psqueues, stm, text, unordered-containers, vector
2199+ , word8
2200+ }:
2201+ mkDerivation {
2202+ pname = "http2";
2203+ version = "1.6.3";
2204+ sha256 = "0hww0rfsv6lqx62qzycbcqy5q6rh9k09qkyjkdm5m1sp1z50wqk1";
2205+ isLibrary = true;
2206+ isExecutable = true;
2207+ libraryHaskellDepends = [
2208+ array base bytestring bytestring-builder case-insensitive
2209+ containers psqueues stm
2210+ ];
2211+ testHaskellDepends = [
2212+ aeson aeson-pretty array base bytestring bytestring-builder
2213+ case-insensitive containers directory doctest filepath Glob hex
2214+ hspec psqueues stm text unordered-containers vector word8
2215+ ];
2216+ benchmarkHaskellDepends = [
2217+ array base bytestring case-insensitive containers criterion
2218+ hashtables heaps mwc-random psqueues stm
2219+ ];
2220+ homepage = "https://github.com/kazu-yamamoto/http2";
2221+ description = "HTTP/2 library including frames, priority queues and HPACK";
2222+ license = stdenv.lib.licenses.bsd3;
2223+ }) {};
2224+ "httpd-shed" = callPackage
2225+ ({ mkDerivation, base, network, network-uri }:
2226+ mkDerivation {
2227+ pname = "httpd-shed";
2228+ version = "0.4.0.3";
2229+ sha256 = "064jy1mqhnf1hvq6s04wlhmp916rd522x58djb9qixv13vc8gzxh";
2230+ revision = "1";
2231+ editedCabalFile = "159cjn9j8lq00gj2yvrzp81r37av25f83chsimp88h55zm9z8akw";
2232+ isLibrary = true;
2233+ isExecutable = true;
2234+ libraryHaskellDepends = [ base network network-uri ];
2235+ description = "A simple web-server with an interact style API";
2236+ license = stdenv.lib.licenses.bsd3;
2237+ }) {};
2238+ "ieee754" = callPackage
2239+ ({ mkDerivation, base }:
2240+ mkDerivation {
2241+ pname = "ieee754";
2242+ version = "0.8.0";
2243+ sha256 = "1lcs521g9lzy9d7337vg4w7q7s8500rfqy7rcifcz6pm6yfgyb8f";
2244+ libraryHaskellDepends = [ base ];
2245+ homepage = "http://github.com/patperry/hs-ieee754";
2246+ description = "Utilities for dealing with IEEE floating point numbers";
2247+ license = stdenv.lib.licenses.bsd3;
2248+ }) {};
2249+ "inflections" = callPackage
2250+ ({ mkDerivation, base, containers, exceptions, hspec
2251+ , hspec-megaparsec, megaparsec, QuickCheck, text
2252+ , unordered-containers
2253+ }:
2254+ mkDerivation {
2255+ pname = "inflections";
2256+ version = "0.4.0.3";
2257+ sha256 = "028dj9pgs5g6qb9x1hc8r4rn0rznr1ynn79vln48k2llyf2r38dx";
2258+ libraryHaskellDepends = [
2259+ base exceptions megaparsec text unordered-containers
2260+ ];
2261+ testHaskellDepends = [
2262+ base containers hspec hspec-megaparsec megaparsec QuickCheck text
2263+ ];
2264+ homepage = "https://github.com/stackbuilders/inflections-hs";
2265+ description = "Inflections library for Haskell";
2266+ license = stdenv.lib.licenses.mit;
2267+ }) {};
2268+ "ini" = callPackage
2269+ ({ mkDerivation, attoparsec, base, text, unordered-containers }:
2270+ mkDerivation {
2271+ pname = "ini";
2272+ version = "0.3.6";
2273+ sha256 = "1n9wsl7nz910bc8jx9ps7pvpql4hlnryjkqbdpfq0phjb9sf7fzw";
2274+ revision = "1";
2275+ editedCabalFile = "0gfikdal67aws20i5r4wg4r0lgn844glykcn3nnmbmyvwsks049l";
2276+ libraryHaskellDepends = [
2277+ attoparsec base text unordered-containers
2278+ ];
2279+ homepage = "http://github.com/chrisdone/ini";
2280+ description = "Quick and easy configuration files in the INI format";
2281+ license = stdenv.lib.licenses.bsd3;
2282+ }) {};
2283+ "integer-logarithms" = callPackage
2284+ ({ mkDerivation, array, base, ghc-prim, integer-gmp }:
2285+ mkDerivation {
2286+ pname = "integer-logarithms";
2287+ version = "1.0.2.1";
2288+ sha256 = "1wj8kgjg5bn2yrs4zh9qfjv85cx6w998j9pi39yrbv305944mb9j";
2289+ libraryHaskellDepends = [ array base ghc-prim integer-gmp ];
2290+ doCheck = false;
2291+ homepage = "https://github.com/phadej/integer-logarithms";
2292+ description = "Integer logarithms";
2293+ license = stdenv.lib.licenses.mit;
2294+ }) {};
2295+ "interpolate" = callPackage
2296+ ({ mkDerivation, base, base-compat, bytestring, haskell-src-meta
2297+ , hspec, QuickCheck, quickcheck-instances, template-haskell, text
2298+ }:
2299+ mkDerivation {
2300+ pname = "interpolate";
2301+ version = "0.2.0";
2302+ sha256 = "1gkaj98yz363v38fv78sqby236mp8yqwqcilx7kr2b9z0w3204bf";
2303+ libraryHaskellDepends = [ base haskell-src-meta template-haskell ];
2304+ testHaskellDepends = [
2305+ base base-compat bytestring haskell-src-meta hspec QuickCheck
2306+ quickcheck-instances template-haskell text
2307+ ];
2308+ homepage = "https://github.com/sol/interpolate#readme";
2309+ description = "String interpolation done right";
2310+ license = stdenv.lib.licenses.mit;
2311+ }) {};
2312+ "invariant" = callPackage
2313+ ({ mkDerivation, array, base, bifunctors, comonad, containers
2314+ , contravariant, ghc-prim, hspec, hspec-discover, profunctors
2315+ , QuickCheck, semigroups, StateVar, stm, tagged, template-haskell
2316+ , th-abstraction, transformers, transformers-compat
2317+ , unordered-containers
2318+ }:
2319+ mkDerivation {
2320+ pname = "invariant";
2321+ version = "0.5.1";
2322+ sha256 = "0aqj7z55632qdg45074kgn9qfdxzb0a2f8lgjzr0l0i4mm2rr37b";
2323+ libraryHaskellDepends = [
2324+ array base bifunctors comonad containers contravariant ghc-prim
2325+ profunctors semigroups StateVar stm tagged template-haskell
2326+ th-abstraction transformers transformers-compat
2327+ unordered-containers
2328+ ];
2329+ testHaskellDepends = [ base hspec QuickCheck template-haskell ];
2330+ testToolDepends = [ hspec-discover ];
2331+ homepage = "https://github.com/nfrisby/invariant-functors";
2332+ description = "Haskell98 invariant functors";
2333+ license = stdenv.lib.licenses.bsd2;
2334+ }) {};
2335+ "iproute" = callPackage
2336+ ({ mkDerivation, appar, base, byteorder, containers, doctest, hspec
2337+ , network, QuickCheck, safe
2338+ }:
2339+ mkDerivation {
2340+ pname = "iproute";
2341+ version = "1.7.5";
2342+ sha256 = "1vw1nm3s8vz1hqnjnqd3wh5rr4q3m2r4izn5ynhf93h9185qwqzd";
2343+ libraryHaskellDepends = [
2344+ appar base byteorder containers network
2345+ ];
2346+ testHaskellDepends = [
2347+ appar base byteorder containers doctest hspec network QuickCheck
2348+ safe
2349+ ];
2350+ homepage = "http://www.mew.org/~kazu/proj/iproute/";
2351+ description = "IP Routing Table";
2352+ license = stdenv.lib.licenses.bsd3;
2353+ }) {};
2354+ "js-flot" = callPackage
2355+ ({ mkDerivation, base, HTTP }:
2356+ mkDerivation {
2357+ pname = "js-flot";
2358+ version = "0.8.3";
2359+ sha256 = "0yjyzqh3qzhy5h3nql1fckw0gcfb0f4wj9pm85nafpfqp2kg58hv";
2360+ enableSeparateDataOutput = true;
2361+ libraryHaskellDepends = [ base ];
2362+ testHaskellDepends = [ base HTTP ];
2363+ homepage = "https://github.com/ndmitchell/js-flot#readme";
2364+ description = "Obtain minified flot code";
2365+ license = stdenv.lib.licenses.mit;
2366+ }) {};
2367+ "js-jquery" = callPackage
2368+ ({ mkDerivation, base, HTTP }:
2369+ mkDerivation {
2370+ pname = "js-jquery";
2371+ version = "3.3.1";
2372+ sha256 = "16q68jzbs7kp07dnq8cprdcc8fd41rim38039vg0w4x11lgniq70";
2373+ enableSeparateDataOutput = true;
2374+ libraryHaskellDepends = [ base ];
2375+ testHaskellDepends = [ base HTTP ];
2376+ homepage = "https://github.com/ndmitchell/js-jquery#readme";
2377+ description = "Obtain minified jQuery code";
2378+ license = stdenv.lib.licenses.mit;
2379+ }) {};
2380+ "kan-extensions" = callPackage
2381+ ({ mkDerivation, adjunctions, array, base, comonad, containers
2382+ , contravariant, distributive, free, invariant, mtl, profunctors
2383+ , semigroupoids, tagged, transformers, transformers-compat
2384+ }:
2385+ mkDerivation {
2386+ pname = "kan-extensions";
2387+ version = "5.2";
2388+ sha256 = "1lyvyiwwh962j2nnnsqzlvp5zq6z8p3spvhmji99cjvldxc7wwkb";
2389+ libraryHaskellDepends = [
2390+ adjunctions array base comonad containers contravariant
2391+ distributive free invariant mtl profunctors semigroupoids tagged
2392+ transformers transformers-compat
2393+ ];
2394+ homepage = "http://github.com/ekmett/kan-extensions/";
2395+ description = "Kan extensions, Kan lifts, the Yoneda lemma, and (co)density (co)monads";
2396+ license = stdenv.lib.licenses.bsd3;
2397+ }) {};
2398+ "keys" = callPackage
2399+ ({ mkDerivation, array, base, comonad, containers, free, hashable
2400+ , semigroupoids, semigroups, tagged, transformers
2401+ , transformers-compat, unordered-containers
2402+ }:
2403+ mkDerivation {
2404+ pname = "keys";
2405+ version = "3.12.1";
2406+ sha256 = "1yqm4gpshsgswx6w78z64c83gpydh6jhgslx2lnc10nzhy0s9kkz";
2407+ libraryHaskellDepends = [
2408+ array base comonad containers free hashable semigroupoids
2409+ semigroups tagged transformers transformers-compat
2410+ unordered-containers
2411+ ];
2412+ homepage = "http://github.com/ekmett/keys/";
2413+ description = "Keyed functors and containers";
2414+ license = stdenv.lib.licenses.bsd3;
2415+ }) {};
2416+ "language-haskell-extract" = callPackage
2417+ ({ mkDerivation, base, regex-posix, template-haskell }:
2418+ mkDerivation {
2419+ pname = "language-haskell-extract";
2420+ version = "0.2.4";
2421+ sha256 = "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl";
2422+ libraryHaskellDepends = [ base regex-posix template-haskell ];
2423+ homepage = "http://github.com/finnsson/template-helper";
2424+ description = "Module to automatically extract functions from the local code";
2425+ license = stdenv.lib.licenses.bsd3;
2426+ }) {};
2427+ "language-nix" = callPackage
2428+ ({ mkDerivation, base, base-compat, Cabal, deepseq, doctest, lens
2429+ , pretty, QuickCheck
2430+ }:
2431+ mkDerivation {
2432+ pname = "language-nix";
2433+ version = "2.1.0.1";
2434+ sha256 = "1kqsw0hk03wdn7mszyjgi38nxk1wmhbxfv6di3irrhsaf807657h";
2435+ revision = "1";
2436+ editedCabalFile = "1zv12p4ralrks0517zs52rzmzmsxxkcxkqz7zijfgcsvh6bsmafi";
2437+ libraryHaskellDepends = [
2438+ base base-compat Cabal deepseq lens pretty QuickCheck
2439+ ];
2440+ testHaskellDepends = [
2441+ base base-compat Cabal deepseq doctest lens pretty QuickCheck
2442+ ];
2443+ homepage = "https://github.com/peti/language-nix#readme";
2444+ description = "Data types and useful functions to represent and manipulate the Nix language";
2445+ license = stdenv.lib.licenses.bsd3;
2446+ }) {};
2447+ "lens" = callPackage
2448+ ({ mkDerivation, array, base, base-orphans, bifunctors, bytestring
2449+ , Cabal, cabal-doctest, call-stack, comonad, containers
2450+ , contravariant, criterion, deepseq, directory, distributive
2451+ , doctest, exceptions, filepath, free, generic-deriving, ghc-prim
2452+ , hashable, HUnit, kan-extensions, mtl, nats, parallel, profunctors
2453+ , QuickCheck, reflection, semigroupoids, semigroups, simple-reflect
2454+ , tagged, template-haskell, test-framework, test-framework-hunit
2455+ , test-framework-quickcheck2, test-framework-th, text
2456+ , th-abstraction, transformers, transformers-compat
2457+ , unordered-containers, vector, void
2458+ }:
2459+ mkDerivation {
2460+ pname = "lens";
2461+ version = "4.16.1";
2462+ sha256 = "1im4drhbydbawd6i0jsrzpqihnmx4ywpkg7yg94ddwsw3mxwkgpm";
2463+ revision = "2";
2464+ editedCabalFile = "11h83lj5mba4grhz1qx3irz10ysm9c3k7k6i6xv2cr60q8xin3ri";
2465+ setupHaskellDepends = [ base Cabal cabal-doctest filepath ];
2466+ libraryHaskellDepends = [
2467+ array base base-orphans bifunctors bytestring call-stack comonad
2468+ containers contravariant distributive exceptions filepath free
2469+ ghc-prim hashable kan-extensions mtl parallel profunctors
2470+ reflection semigroupoids semigroups tagged template-haskell text
2471+ th-abstraction transformers transformers-compat
2472+ unordered-containers vector void
2473+ ];
2474+ testHaskellDepends = [
2475+ base bytestring containers deepseq directory doctest filepath
2476+ generic-deriving HUnit mtl nats parallel QuickCheck semigroups
2477+ simple-reflect test-framework test-framework-hunit
2478+ test-framework-quickcheck2 test-framework-th text transformers
2479+ unordered-containers vector
2480+ ];
2481+ benchmarkHaskellDepends = [
2482+ base bytestring comonad containers criterion deepseq
2483+ generic-deriving transformers unordered-containers vector
2484+ ];
2485+ homepage = "http://github.com/ekmett/lens/";
2486+ description = "Lenses, Folds and Traversals";
2487+ license = stdenv.lib.licenses.bsd2;
2488+ }) {};
2489+ "lifted-async" = callPackage
2490+ ({ mkDerivation, async, base, constraints, criterion, deepseq
2491+ , HUnit, lifted-base, monad-control, mtl, tasty
2492+ , tasty-expected-failure, tasty-hunit, tasty-th, transformers-base
2493+ }:
2494+ mkDerivation {
2495+ pname = "lifted-async";
2496+ version = "0.10.0.2";
2497+ sha256 = "1073r512c1x2m1v0jar9bwqg656slg7jd1jhsyj6m8awgx1l1mwf";
2498+ libraryHaskellDepends = [
2499+ async base constraints lifted-base monad-control transformers-base
2500+ ];
2501+ testHaskellDepends = [
2502+ async base HUnit lifted-base monad-control mtl tasty
2503+ tasty-expected-failure tasty-hunit tasty-th
2504+ ];
2505+ benchmarkHaskellDepends = [ async base criterion deepseq ];
2506+ homepage = "https://github.com/maoe/lifted-async";
2507+ description = "Run lifted IO operations asynchronously and wait for their results";
2508+ license = stdenv.lib.licenses.bsd3;
2509+ }) {};
2510+ "lifted-base" = callPackage
2511+ ({ mkDerivation, base, criterion, HUnit, monad-control, monad-peel
2512+ , test-framework, test-framework-hunit, transformers
2513+ , transformers-base, transformers-compat
2514+ }:
2515+ mkDerivation {
2516+ pname = "lifted-base";
2517+ version = "0.2.3.12";
2518+ sha256 = "1i8p8d3rkdh21bhgjjh32vd7qqjr7jq7p59qds0aw2kmargsjd61";
2519+ libraryHaskellDepends = [ base monad-control transformers-base ];
2520+ testHaskellDepends = [
2521+ base HUnit monad-control test-framework test-framework-hunit
2522+ transformers transformers-base transformers-compat
2523+ ];
2524+ benchmarkHaskellDepends = [
2525+ base criterion monad-control monad-peel transformers
2526+ ];
2527+ homepage = "https://github.com/basvandijk/lifted-base";
2528+ description = "lifted IO operations from the base library";
2529+ license = stdenv.lib.licenses.bsd3;
2530+ }) {};
2531+ "logging-facade" = callPackage
2532+ ({ mkDerivation, base, call-stack, hspec, transformers }:
2533+ mkDerivation {
2534+ pname = "logging-facade";
2535+ version = "0.3.0";
2536+ sha256 = "0d0lwxxgd16is9aw6v3ps4r9prv3dj8xscmm45fvzq3nicjiawcf";
2537+ libraryHaskellDepends = [ base call-stack transformers ];
2538+ testHaskellDepends = [ base hspec ];
2539+ homepage = "https://github.com/sol/logging-facade#readme";
2540+ description = "Simple logging abstraction that allows multiple back-ends";
2541+ license = stdenv.lib.licenses.mit;
2542+ }) {};
2543+ "logict" = callPackage
2544+ ({ mkDerivation, base, mtl }:
2545+ mkDerivation {
2546+ pname = "logict";
2547+ version = "0.6.0.2";
2548+ sha256 = "07hnirv6snnym2r7iijlfz00b60jpy2856zvqxh989q0in7bd0hi";
2549+ libraryHaskellDepends = [ base mtl ];
2550+ homepage = "http://code.haskell.org/~dolio/";
2551+ description = "A backtracking logic-programming monad";
2552+ license = stdenv.lib.licenses.bsd3;
2553+ }) {};
2554+ "lucid" = callPackage
2555+ ({ mkDerivation, base, bifunctors, blaze-builder, bytestring
2556+ , containers, criterion, deepseq, hashable, hspec, HUnit, mmorph
2557+ , mtl, parsec, text, transformers, unordered-containers
2558+ }:
2559+ mkDerivation {
2560+ pname = "lucid";
2561+ version = "2.9.10";
2562+ sha256 = "14238cnrvkbr81hpaqg1r342sryj8k0p6igkwf140s9phfpdzry0";
2563+ revision = "1";
2564+ editedCabalFile = "0n94x2havrvks85z8azsa4pvz33amhb444cias3kfxmkyvypn5ah";
2565+ libraryHaskellDepends = [
2566+ base blaze-builder bytestring containers hashable mmorph mtl text
2567+ transformers unordered-containers
2568+ ];
2569+ testHaskellDepends = [
2570+ base bifunctors hspec HUnit mtl parsec text
2571+ ];
2572+ benchmarkHaskellDepends = [
2573+ base blaze-builder bytestring criterion deepseq text transformers
2574+ ];
2575+ homepage = "https://github.com/chrisdone/lucid";
2576+ description = "Clear to write, read and edit DSL for HTML";
2577+ license = stdenv.lib.licenses.bsd3;
2578+ }) {};
2579+ "math-functions" = callPackage
2580+ ({ mkDerivation, base, deepseq, erf, HUnit, primitive, QuickCheck
2581+ , test-framework, test-framework-hunit, test-framework-quickcheck2
2582+ , vector, vector-th-unbox
2583+ }:
2584+ mkDerivation {
2585+ pname = "math-functions";
2586+ version = "0.2.1.0";
2587+ sha256 = "1sv5vabsx332v1lpb6v3jv4zrzvpx1n7yprzd8wlcda5vsc5a6zp";
2588+ libraryHaskellDepends = [
2589+ base deepseq primitive vector vector-th-unbox
2590+ ];
2591+ testHaskellDepends = [
2592+ base deepseq erf HUnit primitive QuickCheck test-framework
2593+ test-framework-hunit test-framework-quickcheck2 vector
2594+ vector-th-unbox
2595+ ];
2596+ doCheck = false;
2597+ homepage = "https://github.com/bos/math-functions";
2598+ description = "Special functions and Chebyshev polynomials";
2599+ license = stdenv.lib.licenses.bsd3;
2600+ }) {};
2601+ "megaparsec" = callPackage
2602+ ({ mkDerivation, base, bytestring, case-insensitive, containers
2603+ , criterion, deepseq, hspec, hspec-discover, hspec-expectations
2604+ , mtl, parser-combinators, QuickCheck, scientific, text
2605+ , transformers, weigh
2606+ }:
2607+ mkDerivation {
2608+ pname = "megaparsec";
2609+ version = "6.5.0";
2610+ sha256 = "12iggy7qpf8x93jm64zf0g215xwy779bqyfyjk2bhmxqqr1yzgdy";
2611+ revision = "2";
2612+ editedCabalFile = "0ahvqr29ym3g46yv2jxniccyn1ng1yqicqdbamkzm89gjnxd9n25";
2613+ libraryHaskellDepends = [
2614+ base bytestring case-insensitive containers deepseq mtl
2615+ parser-combinators scientific text transformers
2616+ ];
2617+ testHaskellDepends = [
2618+ base bytestring containers hspec hspec-expectations mtl QuickCheck
2619+ scientific text transformers
2620+ ];
2621+ testToolDepends = [ hspec-discover ];
2622+ benchmarkHaskellDepends = [ base criterion deepseq text weigh ];
2623+ homepage = "https://github.com/mrkkrp/megaparsec";
2624+ description = "Monadic parser combinators";
2625+ license = stdenv.lib.licenses.bsd2;
2626+ }) {};
2627+ "memory" = callPackage
2628+ ({ mkDerivation, base, basement, bytestring, deepseq, foundation
2629+ , ghc-prim
2630+ }:
2631+ mkDerivation {
2632+ pname = "memory";
2633+ version = "0.14.16";
2634+ sha256 = "03rbszi5d4z9rlbfv8ydrl1xf84xsh8z57g07f7j9qccn9587c3v";
2635+ libraryHaskellDepends = [
2636+ base basement bytestring deepseq foundation ghc-prim
2637+ ];
2638+ testHaskellDepends = [ base basement bytestring foundation ];
2639+ homepage = "https://github.com/vincenthz/hs-memory";
2640+ description = "memory and related abstraction stuff";
2641+ license = stdenv.lib.licenses.bsd3;
2642+ }) {};
2643+ "microstache" = callPackage
2644+ ({ mkDerivation, aeson, base, bytestring, containers, deepseq
2645+ , directory, filepath, hspec, parsec, text, transformers
2646+ , unordered-containers, vector
2647+ }:
2648+ mkDerivation {
2649+ pname = "microstache";
2650+ version = "1.0.1.1";
2651+ sha256 = "0851sqr1ppdj6m822635pa3j6qzdf25gyrhkjs25zdry6518bsax";
2652+ revision = "2";
2653+ editedCabalFile = "0rl6vgmjnf1a14kiynh4gnmy6n6kkik9hqj9k5vqw68h4f110i4b";
2654+ libraryHaskellDepends = [
2655+ aeson base bytestring containers deepseq directory filepath parsec
2656+ text transformers unordered-containers vector
2657+ ];
2658+ testHaskellDepends = [
2659+ aeson base bytestring containers hspec parsec text
2660+ ];
2661+ homepage = "https://github.com/phadej/microstache";
2662+ description = "Mustache templates for Haskell";
2663+ license = stdenv.lib.licenses.bsd3;
2664+ }) {};
2665+ "mime-types" = callPackage
2666+ ({ mkDerivation, base, bytestring, containers, text }:
2667+ mkDerivation {
2668+ pname = "mime-types";
2669+ version = "0.1.0.8";
2670+ sha256 = "14ccl2842ya17zyj0bpc7vzklbyqvvydpbypn69h2fmhgji192x8";
2671+ libraryHaskellDepends = [ base bytestring containers text ];
2672+ homepage = "https://github.com/yesodweb/wai";
2673+ description = "Basic mime-type handling types and functions";
2674+ license = stdenv.lib.licenses.mit;
2675+ }) {};
2676+ "mmorph" = callPackage
2677+ ({ mkDerivation, base, mtl, transformers, transformers-compat }:
2678+ mkDerivation {
2679+ pname = "mmorph";
2680+ version = "1.1.2";
2681+ sha256 = "1gjz1ib968lqybma7my1n19qq6cdj6a7nskrlnwy4jy9jrwzs2n9";
2682+ libraryHaskellDepends = [
2683+ base mtl transformers transformers-compat
2684+ ];
2685+ description = "Monad morphisms";
2686+ license = stdenv.lib.licenses.bsd3;
2687+ }) {};
2688+ "mockery" = callPackage
2689+ ({ mkDerivation, base, base-compat, bytestring, directory, filepath
2690+ , hspec, logging-facade, temporary
2691+ }:
2692+ mkDerivation {
2693+ pname = "mockery";
2694+ version = "0.3.5";
2695+ sha256 = "09ypgm3z69gq8mj6y66ss58kbjnk15r8frwcwbqcfbfksfnfv8dp";
2696+ libraryHaskellDepends = [
2697+ base base-compat bytestring directory filepath logging-facade
2698+ temporary
2699+ ];
2700+ testHaskellDepends = [
2701+ base base-compat bytestring directory filepath hspec logging-facade
2702+ temporary
2703+ ];
2704+ description = "Support functions for automated testing";
2705+ license = stdenv.lib.licenses.mit;
2706+ }) {};
2707+ "monad-control" = callPackage
2708+ ({ mkDerivation, base, stm, transformers, transformers-base
2709+ , transformers-compat
2710+ }:
2711+ mkDerivation {
2712+ pname = "monad-control";
2713+ version = "1.0.2.3";
2714+ sha256 = "1c92833gr6cadidjdp8mlznkpp8lyxl0w3y7d19y8yi3klc3843c";
2715+ libraryHaskellDepends = [
2716+ base stm transformers transformers-base transformers-compat
2717+ ];
2718+ homepage = "https://github.com/basvandijk/monad-control";
2719+ description = "Lift control operations, like exception catching, through monad transformers";
2720+ license = stdenv.lib.licenses.bsd3;
2721+ }) {};
2722+ "monad-loops" = callPackage
2723+ ({ mkDerivation, base, tasty, tasty-hunit }:
2724+ mkDerivation {
2725+ pname = "monad-loops";
2726+ version = "0.4.3";
2727+ sha256 = "062c2sn3hc8h50p1mhqkpyv6x8dydz2zh3ridvlfjq9nqimszaky";
2728+ libraryHaskellDepends = [ base ];
2729+ testHaskellDepends = [ base tasty tasty-hunit ];
2730+ homepage = "https://github.com/mokus0/monad-loops";
2731+ description = "Monadic loops";
2732+ license = stdenv.lib.licenses.publicDomain;
2733+ }) {};
2734+ "monad-par" = callPackage
2735+ ({ mkDerivation, abstract-deque, abstract-par, array, base
2736+ , containers, deepseq, HUnit, monad-par-extras, mtl, mwc-random
2737+ , parallel, QuickCheck, test-framework, test-framework-hunit
2738+ , test-framework-quickcheck2, test-framework-th, time
2739+ }:
2740+ mkDerivation {
2741+ pname = "monad-par";
2742+ version = "0.3.4.8";
2743+ sha256 = "0ldrzqy24fsszvn2a2nr77m2ih7xm0h9bgkjyv1l274aj18xyk7q";
2744+ libraryHaskellDepends = [
2745+ abstract-deque abstract-par array base containers deepseq
2746+ monad-par-extras mtl mwc-random parallel
2747+ ];
2748+ testHaskellDepends = [
2749+ abstract-deque abstract-par array base containers deepseq HUnit
2750+ monad-par-extras mtl mwc-random QuickCheck test-framework
2751+ test-framework-hunit test-framework-quickcheck2 test-framework-th
2752+ time
2753+ ];
2754+ homepage = "https://github.com/simonmar/monad-par";
2755+ description = "A library for parallel programming based on a monad";
2756+ license = stdenv.lib.licenses.bsd3;
2757+ }) {};
2758+ "monad-par-extras" = callPackage
2759+ ({ mkDerivation, abstract-par, base, cereal, deepseq, mtl, random
2760+ , transformers
2761+ }:
2762+ mkDerivation {
2763+ pname = "monad-par-extras";
2764+ version = "0.3.3";
2765+ sha256 = "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2";
2766+ libraryHaskellDepends = [
2767+ abstract-par base cereal deepseq mtl random transformers
2768+ ];
2769+ homepage = "https://github.com/simonmar/monad-par";
2770+ description = "Combinators and extra features for Par monads";
2771+ license = stdenv.lib.licenses.bsd3;
2772+ }) {};
2773+ "monad-peel" = callPackage
2774+ ({ mkDerivation, base, extensible-exceptions, HUnit, test-framework
2775+ , test-framework-hunit, transformers
2776+ }:
2777+ mkDerivation {
2778+ pname = "monad-peel";
2779+ version = "0.2.1.2";
2780+ sha256 = "1x1kr5pk8ksw8xcm19c50jx8m0crf3m3qp73k31dnl9r1w4ykm9d";
2781+ libraryHaskellDepends = [
2782+ base extensible-exceptions transformers
2783+ ];
2784+ testHaskellDepends = [
2785+ base extensible-exceptions HUnit test-framework
2786+ test-framework-hunit transformers
2787+ ];
2788+ homepage = "http://andersk.mit.edu/haskell/monad-peel/";
2789+ description = "Lift control operations like exception catching through monad transformers";
2790+ license = stdenv.lib.licenses.bsd3;
2791+ }) {};
2792+ "mono-traversable" = callPackage
2793+ ({ mkDerivation, base, bytestring, containers, foldl, gauge
2794+ , hashable, hspec, HUnit, mwc-random, QuickCheck, semigroups, split
2795+ , text, transformers, unordered-containers, vector
2796+ , vector-algorithms
2797+ }:
2798+ mkDerivation {
2799+ pname = "mono-traversable";
2800+ version = "1.0.8.1";
2801+ sha256 = "0d9r6z3a8gkhl1j5yq8hjg5wcndi5yixxm9xwbrf4z6pgdwr04lr";
2802+ libraryHaskellDepends = [
2803+ base bytestring containers hashable split text transformers
2804+ unordered-containers vector vector-algorithms
2805+ ];
2806+ testHaskellDepends = [
2807+ base bytestring containers foldl hspec HUnit QuickCheck semigroups
2808+ text transformers unordered-containers vector
2809+ ];
2810+ benchmarkHaskellDepends = [ base gauge mwc-random vector ];
2811+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
2812+ description = "Type classes for mapping, folding, and traversing monomorphic containers";
2813+ license = stdenv.lib.licenses.mit;
2814+ }) {};
2815+ "mono-traversable-instances" = callPackage
2816+ ({ mkDerivation, base, comonad, containers, dlist, dlist-instances
2817+ , mono-traversable, semigroupoids, semigroups, transformers
2818+ , vector-instances
2819+ }:
2820+ mkDerivation {
2821+ pname = "mono-traversable-instances";
2822+ version = "0.1.0.0";
2823+ sha256 = "0zh81hvqnracil2nvkx14xzwv9vavsnx739acp6gycdyrs5jpzxm";
2824+ libraryHaskellDepends = [
2825+ base comonad containers dlist dlist-instances mono-traversable
2826+ semigroupoids semigroups transformers vector-instances
2827+ ];
2828+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
2829+ description = "Extra typeclass instances for mono-traversable";
2830+ license = stdenv.lib.licenses.mit;
2831+ }) {};
2832+ "mtl" = callPackage
2833+ ({ mkDerivation, base, transformers }:
2834+ mkDerivation {
2835+ pname = "mtl";
2836+ version = "2.2.2";
2837+ sha256 = "1xmy5741h8cyy0d91ahvqdz2hykkk20l8br7lg1rccnkis5g80w8";
2838+ libraryHaskellDepends = [ base transformers ];
2839+ homepage = "http://github.com/haskell/mtl";
2840+ description = "Monad classes, using functional dependencies";
2841+ license = stdenv.lib.licenses.bsd3;
2842+ }) {};
2843+ "mutable-containers" = callPackage
2844+ ({ mkDerivation, base, containers, gauge, ghc-prim, hspec
2845+ , mono-traversable, primitive, QuickCheck, vector
2846+ }:
2847+ mkDerivation {
2848+ pname = "mutable-containers";
2849+ version = "0.3.4";
2850+ sha256 = "0zhkhlvg9yw45fg3srvzx7j81547djpkfw7higdvlj7fmph6c6b4";
2851+ libraryHaskellDepends = [
2852+ base containers ghc-prim mono-traversable primitive vector
2853+ ];
2854+ testHaskellDepends = [
2855+ base containers hspec primitive QuickCheck vector
2856+ ];
2857+ benchmarkHaskellDepends = [ base containers gauge vector ];
2858+ homepage = "https://github.com/snoyberg/mono-traversable#readme";
2859+ description = "Abstactions and concrete implementations of mutable containers";
2860+ license = stdenv.lib.licenses.mit;
2861+ }) {};
2862+ "mwc-random" = callPackage
2863+ ({ mkDerivation, base, math-functions, primitive, time, vector }:
2864+ mkDerivation {
2865+ pname = "mwc-random";
2866+ version = "0.13.6.0";
2867+ sha256 = "05j7yh0hh9nxic3dijmzv44kc6gzclvamdph7sq7w19wq57k6pq6";
2868+ libraryHaskellDepends = [
2869+ base math-functions primitive time vector
2870+ ];
2871+ homepage = "https://github.com/bos/mwc-random";
2872+ description = "Fast, high quality pseudo random number generation";
2873+ license = stdenv.lib.licenses.bsd3;
2874+ }) {};
2875+ "nanospec" = callPackage
2876+ ({ mkDerivation, base, hspec, silently }:
2877+ mkDerivation {
2878+ pname = "nanospec";
2879+ version = "0.2.2";
2880+ sha256 = "1rcmhl9bhyfvanalnf1r86wkx6rq6wdvagnw1h011jcnnb1cq56g";
2881+ libraryHaskellDepends = [ base ];
2882+ testHaskellDepends = [ base hspec silently ];
2883+ homepage = "https://github.com/hspec/nanospec#readme";
2884+ description = "A lightweight implementation of a subset of Hspec's API";
2885+ license = stdenv.lib.licenses.mit;
2886+ }) {};
2887+ "nats" = callPackage
2888+ ({ mkDerivation }:
2889+ mkDerivation {
2890+ pname = "nats";
2891+ version = "1.1.2";
2892+ sha256 = "1v40drmhixck3pz3mdfghamh73l4rp71mzcviipv1y8jhrfxilmr";
2893+ revision = "1";
2894+ editedCabalFile = "1jzyysf758lfindlclqpzqcd0lrgrdv0rnz2lg8g1rvv07x2n7zh";
2895+ doHaddock = false;
2896+ homepage = "http://github.com/ekmett/nats/";
2897+ description = "Natural numbers";
2898+ license = stdenv.lib.licenses.bsd3;
2899+ }) {};
2900+ "network" = callPackage
2901+ ({ mkDerivation, base, bytestring, doctest, hspec, HUnit, unix }:
2902+ mkDerivation {
2903+ pname = "network";
2904+ version = "2.6.3.6";
2905+ sha256 = "198mam7ahny48p9fajznbqq16a8ya2gw0xm3gnm1si1rmc4hdplv";
2906+ libraryHaskellDepends = [ base bytestring unix ];
2907+ testHaskellDepends = [ base bytestring doctest hspec HUnit ];
2908+ doCheck = false;
2909+ homepage = "https://github.com/haskell/network";
2910+ description = "Low-level networking interface";
2911+ license = stdenv.lib.licenses.bsd3;
2912+ }) {};
2913+ "network-uri" = callPackage
2914+ ({ mkDerivation, base, deepseq, HUnit, parsec, test-framework
2915+ , test-framework-hunit, test-framework-quickcheck2
2916+ }:
2917+ mkDerivation {
2918+ pname = "network-uri";
2919+ version = "2.6.1.0";
2920+ sha256 = "1w27zkvn39kjr9lmw9421y8w43h572ycsfafsb7kyvr3a4ihlgj2";
2921+ revision = "1";
2922+ editedCabalFile = "141nj7q0p9wkn5gr41ayc63cgaanr9m59yym47wpxqr3c334bk32";
2923+ libraryHaskellDepends = [ base deepseq parsec ];
2924+ testHaskellDepends = [
2925+ base HUnit test-framework test-framework-hunit
2926+ test-framework-quickcheck2
2927+ ];
2928+ homepage = "https://github.com/haskell/network-uri";
2929+ description = "URI manipulation";
2930+ license = stdenv.lib.licenses.bsd3;
2931+ }) {};
2932+ "old-locale" = callPackage
2933+ ({ mkDerivation, base }:
2934+ mkDerivation {
2935+ pname = "old-locale";
2936+ version = "1.0.0.7";
2937+ sha256 = "0l3viphiszvz5wqzg7a45zp40grwlab941q5ay29iyw8p3v8pbyv";
2938+ revision = "2";
2939+ editedCabalFile = "04b9vn007hlvsrx4ksd3r8r3kbyaj2kvwxchdrmd4370qzi8p6gs";
2940+ libraryHaskellDepends = [ base ];
2941+ description = "locale library";
2942+ license = stdenv.lib.licenses.bsd3;
2943+ }) {};
2944+ "old-time" = callPackage
2945+ ({ mkDerivation, base, old-locale }:
2946+ mkDerivation {
2947+ pname = "old-time";
2948+ version = "1.1.0.3";
2949+ sha256 = "1h9b26s3kfh2k0ih4383w90ibji6n0iwamxp6rfp2lbq1y5ibjqw";
2950+ revision = "2";
2951+ editedCabalFile = "1j6ln1dkvhdvnwl33bp0xf9lhc4sybqk0aw42p8cq81xwwzbn7y9";
2952+ libraryHaskellDepends = [ base old-locale ];
2953+ description = "Time library";
2954+ license = stdenv.lib.licenses.bsd3;
2955+ }) {};
2956+ "optparse-applicative" = callPackage
2957+ ({ mkDerivation, ansi-wl-pprint, base, bytestring, process
2958+ , QuickCheck, transformers, transformers-compat
2959+ }:
2960+ mkDerivation {
2961+ pname = "optparse-applicative";
2962+ version = "0.14.2.0";
2963+ sha256 = "0c3z1mvynlyv1garjbdmdd3npm40dabgm75js4r07cf766c1wd71";
2964+ libraryHaskellDepends = [
2965+ ansi-wl-pprint base process transformers transformers-compat
2966+ ];
2967+ testHaskellDepends = [ base bytestring QuickCheck ];
2968+ homepage = "https://github.com/pcapriotti/optparse-applicative";
2969+ description = "Utilities and combinators for parsing command line options";
2970+ license = stdenv.lib.licenses.bsd3;
2971+ }) {};
2972+ "optparse-simple" = callPackage
2973+ ({ mkDerivation, base, bytestring, directory, gitrev
2974+ , optparse-applicative, template-haskell, transformers
2975+ }:
2976+ mkDerivation {
2977+ pname = "optparse-simple";
2978+ version = "0.1.0";
2979+ sha256 = "1g2cf4pcf1fa001z77g8gwnx0cxdpqs1iw9xp0kb9qrxm9gpk3c3";
2980+ libraryHaskellDepends = [
2981+ base gitrev optparse-applicative template-haskell transformers
2982+ ];
2983+ testHaskellDepends = [ base bytestring directory ];
2984+ homepage = "https://github.com/fpco/optparse-simple#readme";
2985+ description = "Simple interface to optparse-applicative";
2986+ license = stdenv.lib.licenses.bsd3;
2987+ }) {};
2988+ "parallel" = callPackage
2989+ ({ mkDerivation, array, base, containers, deepseq, ghc-prim }:
2990+ mkDerivation {
2991+ pname = "parallel";
2992+ version = "3.2.2.0";
2993+ sha256 = "1xkfi96w6yfpppd0nw1rnszdxmvifwzm699ilv6332ra3akm610p";
2994+ libraryHaskellDepends = [ array base containers deepseq ghc-prim ];
2995+ description = "Parallel programming library";
2996+ license = stdenv.lib.licenses.bsd3;
2997+ }) {};
2998+ "parsec" = callPackage
2999+ ({ mkDerivation, base, bytestring, HUnit, mtl, test-framework
3000+ , test-framework-hunit, text
3001+ }:
3002+ mkDerivation {
3003+ pname = "parsec";
3004+ version = "3.1.13.0";
3005+ sha256 = "1wc09pyn70p8z6llink10c8pqbh6ikyk554911yfwxv1g91swqbq";
3006+ revision = "1";
3007+ editedCabalFile = "1dpr1wfpykkl6kayp4wnyn0n1zv7pvqksax2i54dhdgjijj8qynd";
3008+ libraryHaskellDepends = [ base bytestring mtl text ];
3009+ testHaskellDepends = [
3010+ base HUnit mtl test-framework test-framework-hunit
3011+ ];
3012+ homepage = "https://github.com/hvr/parsec";
3013+ description = "Monadic parser combinators";
3014+ license = stdenv.lib.licenses.bsd3;
3015+ }) {};
3016+ "parser-combinators" = callPackage
3017+ ({ mkDerivation, base }:
3018+ mkDerivation {
3019+ pname = "parser-combinators";
3020+ version = "1.0.0";
3021+ sha256 = "1pwfdsklqwvaynwpdzmx1bs35mp6dpsyaqdnzxnqcrxwf5h8sk75";
3022+ libraryHaskellDepends = [ base ];
3023+ homepage = "https://github.com/mrkkrp/parser-combinators";
3024+ description = "Lightweight package providing commonly useful parser combinators";
3025+ license = stdenv.lib.licenses.bsd3;
3026+ }) {};
3027+ "pcre-light" = callPackage
3028+ ({ mkDerivation, base, bytestring, pcre }:
3029+ mkDerivation {
3030+ pname = "pcre-light";
3031+ version = "0.4.0.4";
3032+ sha256 = "0xcyi1fivwg7a92mch5bcqzmrfxzqj42rmb3m8kgs61x4qwpxj82";
3033+ libraryHaskellDepends = [ base bytestring ];
3034+ libraryPkgconfigDepends = [ pcre ];
3035+ homepage = "https://github.com/Daniel-Diaz/pcre-light";
3036+ description = "Portable regex library for Perl 5 compatible regular expressions";
3037+ license = stdenv.lib.licenses.bsd3;
3038+ }) {inherit (pkgs) pcre;};
3039+ "pem" = callPackage
3040+ ({ mkDerivation, base, basement, bytestring, HUnit, memory
3041+ , QuickCheck, test-framework, test-framework-hunit
3042+ , test-framework-quickcheck2
3043+ }:
3044+ mkDerivation {
3045+ pname = "pem";
3046+ version = "0.2.4";
3047+ sha256 = "1m7qjsxrd8m88cvkqmr8kscril500j2a9y0iynvksjyjkhdlq33p";
3048+ libraryHaskellDepends = [ base basement bytestring memory ];
3049+ testHaskellDepends = [
3050+ base bytestring HUnit QuickCheck test-framework
3051+ test-framework-hunit test-framework-quickcheck2
3052+ ];
3053+ homepage = "http://github.com/vincenthz/hs-pem";
3054+ description = "Privacy Enhanced Mail (PEM) format reader and writer";
3055+ license = stdenv.lib.licenses.bsd3;
3056+ }) {};
3057+ "pointed" = callPackage
3058+ ({ mkDerivation, base, comonad, containers, data-default-class
3059+ , hashable, kan-extensions, semigroupoids, semigroups, stm, tagged
3060+ , transformers, transformers-compat, unordered-containers
3061+ }:
3062+ mkDerivation {
3063+ pname = "pointed";
3064+ version = "5.0.1";
3065+ sha256 = "1p91a762xglckscnhpflxzav8byf49a02mli3983i4kpr2jkaimr";
3066+ revision = "1";
3067+ editedCabalFile = "1ccjmzz3jf5ybrzv7qdwm3qb8rz0yskvi4ackrixyhdk8bg5f3nc";
3068+ libraryHaskellDepends = [
3069+ base comonad containers data-default-class hashable kan-extensions
3070+ semigroupoids semigroups stm tagged transformers
3071+ transformers-compat unordered-containers
3072+ ];
3073+ homepage = "http://github.com/ekmett/pointed/";
3074+ description = "Pointed and copointed data";
3075+ license = stdenv.lib.licenses.bsd3;
3076+ }) {};
3077+ "polyparse" = callPackage
3078+ ({ mkDerivation, base, bytestring, text }:
3079+ mkDerivation {
3080+ pname = "polyparse";
3081+ version = "1.12";
3082+ sha256 = "05dya1vdvq29hkhkdlsglzhw7bdn51rvs1javs0q75nf99c66k7m";
3083+ libraryHaskellDepends = [ base bytestring text ];
3084+ homepage = "http://code.haskell.org/~malcolm/polyparse/";
3085+ description = "A variety of alternative parser combinator libraries";
3086+ license = "LGPL";
3087+ }) {};
3088+ "pretty-hex" = callPackage
3089+ ({ mkDerivation, base, bytestring }:
3090+ mkDerivation {
3091+ pname = "pretty-hex";
3092+ version = "1.0";
3093+ sha256 = "0ylwkvvjvmpprha9nx83xb8gkhyanhk5fffc0r7lb96n4ch5z6pz";
3094+ libraryHaskellDepends = [ base bytestring ];
3095+ description = "A library for hex dumps of ByteStrings";
3096+ license = stdenv.lib.licenses.bsd3;
3097+ }) {};
3098+ "pretty-show" = callPackage
3099+ ({ mkDerivation, array, base, filepath, ghc-prim, happy
3100+ , haskell-lexer, pretty, text
3101+ }:
3102+ mkDerivation {
3103+ pname = "pretty-show";
3104+ version = "1.7";
3105+ sha256 = "0br7pkxqqqhby2j2v1g847lgqsrasx56g1jw3dhmjh4flzs6warq";
3106+ isLibrary = true;
3107+ isExecutable = true;
3108+ enableSeparateDataOutput = true;
3109+ libraryHaskellDepends = [
3110+ array base filepath ghc-prim haskell-lexer pretty text
3111+ ];
3112+ libraryToolDepends = [ happy ];
3113+ executableHaskellDepends = [ base ];
3114+ homepage = "http://wiki.github.com/yav/pretty-show";
3115+ description = "Tools for working with derived `Show` instances and generic inspection of values";
3116+ license = stdenv.lib.licenses.mit;
3117+ }) {};
3118+ "primitive" = callPackage
3119+ ({ mkDerivation, base, ghc-prim, transformers }:
3120+ mkDerivation {
3121+ pname = "primitive";
3122+ version = "0.6.3.0";
3123+ sha256 = "0mcmbnj08wd6zfwn7xk6zf5hy5zwbla5v78pw0dpymqg9s0gzpnd";
3124+ libraryHaskellDepends = [ base ghc-prim transformers ];
3125+ testHaskellDepends = [ base ghc-prim ];
3126+ homepage = "https://github.com/haskell/primitive";
3127+ description = "Primitive memory-related operations";
3128+ license = stdenv.lib.licenses.bsd3;
3129+ }) {};
3130+ "profunctors" = callPackage
3131+ ({ mkDerivation, base, base-orphans, bifunctors, comonad
3132+ , contravariant, distributive, semigroups, tagged, transformers
3133+ }:
3134+ mkDerivation {
3135+ pname = "profunctors";
3136+ version = "5.2.2";
3137+ sha256 = "0s1pwjidbn761xk43pmzyvn99hm3psdifjd78ylki7f97aiyd0g9";
3138+ revision = "2";
3139+ editedCabalFile = "1ywlg9z8nlhd2avgb8c6gbkv8zyk7hvc25926bafyg0m0k8y1amq";
3140+ libraryHaskellDepends = [
3141+ base base-orphans bifunctors comonad contravariant distributive
3142+ semigroups tagged transformers
3143+ ];
3144+ homepage = "http://github.com/ekmett/profunctors/";
3145+ description = "Profunctors";
3146+ license = stdenv.lib.licenses.bsd3;
3147+ }) {};
3148+ "psqueues" = callPackage
3149+ ({ mkDerivation, array, base, deepseq, ghc-prim, hashable, HUnit
3150+ , QuickCheck, tagged, test-framework, test-framework-hunit
3151+ , test-framework-quickcheck2
3152+ }:
3153+ mkDerivation {
3154+ pname = "psqueues";
3155+ version = "0.2.7.0";
3156+ sha256 = "1sjgc9bxh63kkdp59nbirx3xazr02ia5yhp4f4a0jnq1hj465wsc";
3157+ libraryHaskellDepends = [ base deepseq ghc-prim hashable ];
3158+ testHaskellDepends = [
3159+ array base deepseq ghc-prim hashable HUnit QuickCheck tagged
3160+ test-framework test-framework-hunit test-framework-quickcheck2
3161+ ];
3162+ description = "Pure priority search queues";
3163+ license = stdenv.lib.licenses.bsd3;
3164+ }) {};
3165+ "pureMD5" = callPackage
3166+ ({ mkDerivation, base, binary, bytestring, cereal, crypto-api
3167+ , crypto-api-tests, pretty-hex, QuickCheck, tagged, test-framework
3168+ , test-framework-quickcheck2
3169+ }:
3170+ mkDerivation {
3171+ pname = "pureMD5";
3172+ version = "2.1.3";
3173+ sha256 = "0zdilz41cla2ck7mcw1a9702gyg2abq94mqahr4vci9sbs53bwxy";
3174+ libraryHaskellDepends = [
3175+ base binary bytestring cereal crypto-api tagged
3176+ ];
3177+ testHaskellDepends = [
3178+ base binary bytestring cereal crypto-api-tests pretty-hex
3179+ QuickCheck test-framework test-framework-quickcheck2
3180+ ];
3181+ description = "A Haskell-only implementation of the MD5 digest (hash) algorithm";
3182+ license = stdenv.lib.licenses.bsd3;
3183+ }) {};
3184+ "quickcheck-instances" = callPackage
3185+ ({ mkDerivation, array, base, base-compat, bytestring
3186+ , case-insensitive, containers, hashable, old-time, QuickCheck
3187+ , scientific, tagged, text, time, transformers, transformers-compat
3188+ , unordered-containers, uuid-types, vector
3189+ }:
3190+ mkDerivation {
3191+ pname = "quickcheck-instances";
3192+ version = "0.3.18";
3193+ sha256 = "1bh1pzz5fdcqvzdcirqxna6fnjms02min5md716299g5niz46w55";
3194+ revision = "1";
3195+ editedCabalFile = "1sngfq3v71bvgjsl8cj5kh65m3fziwy8dkvwjzs0kxfrzr87faly";
3196+ libraryHaskellDepends = [
3197+ array base base-compat bytestring case-insensitive containers
3198+ hashable old-time QuickCheck scientific tagged text time
3199+ transformers transformers-compat unordered-containers uuid-types
3200+ vector
3201+ ];
3202+ testHaskellDepends = [
3203+ base containers QuickCheck tagged uuid-types
3204+ ];
3205+ homepage = "https://github.com/phadej/qc-instances";
3206+ description = "Common quickcheck instances";
3207+ license = stdenv.lib.licenses.bsd3;
3208+ }) {};
3209+ "quickcheck-io" = callPackage
3210+ ({ mkDerivation, base, HUnit, QuickCheck }:
3211+ mkDerivation {
3212+ pname = "quickcheck-io";
3213+ version = "0.2.0";
3214+ sha256 = "08k4v7pkgjf30pv5j2dfv1gqv6hclxlniyq2sps8zq4zswcr2xzv";
3215+ libraryHaskellDepends = [ base HUnit QuickCheck ];
3216+ homepage = "https://github.com/hspec/quickcheck-io#readme";
3217+ description = "Use HUnit assertions as QuickCheck properties";
3218+ license = stdenv.lib.licenses.mit;
3219+ }) {};
3220+ "quickcheck-unicode" = callPackage
3221+ ({ mkDerivation, base, QuickCheck }:
3222+ mkDerivation {
3223+ pname = "quickcheck-unicode";
3224+ version = "1.0.1.0";
3225+ sha256 = "0s43s1bzbg3gwsjgm7fpyksd1339f0m26dlw2famxwyzgvm0a80k";
3226+ libraryHaskellDepends = [ base QuickCheck ];
3227+ homepage = "https://github.com/bos/quickcheck-unicode";
3228+ description = "Generator and shrink functions for testing Unicode-related software";
3229+ license = stdenv.lib.licenses.bsd2;
3230+ }) {};
3231+ "random" = callPackage
3232+ ({ mkDerivation, base, time }:
3233+ mkDerivation {
3234+ pname = "random";
3235+ version = "1.1";
3236+ sha256 = "0nis3lbkp8vfx8pkr6v7b7kr5m334bzb0fk9vxqklnp2aw8a865p";
3237+ revision = "1";
3238+ editedCabalFile = "1pv5d7bm2rgap7llp5vjsplrg048gvf0226y0v19gpvdsx7n4rvv";
3239+ libraryHaskellDepends = [ base time ];
3240+ testHaskellDepends = [ base ];
3241+ description = "random number library";
3242+ license = stdenv.lib.licenses.bsd3;
3243+ }) {};
3244+ "reflection" = callPackage
3245+ ({ mkDerivation, base, template-haskell }:
3246+ mkDerivation {
3247+ pname = "reflection";
3248+ version = "2.1.4";
3249+ sha256 = "0kf4a5ijw6jfnfibjcrpdy9vzh1n6v2pxia8dhyyqdissiwc8bzj";
3250+ libraryHaskellDepends = [ base template-haskell ];
3251+ homepage = "http://github.com/ekmett/reflection";
3252+ description = "Reifies arbitrary terms into types that can be reflected back into terms";
3253+ license = stdenv.lib.licenses.bsd3;
3254+ }) {};
3255+ "regex-base" = callPackage
3256+ ({ mkDerivation, array, base, bytestring, containers, mtl }:
3257+ mkDerivation {
3258+ pname = "regex-base";
3259+ version = "0.93.2";
3260+ sha256 = "0y1j4h2pg12c853nzmczs263di7xkkmlnsq5dlp5wgbgl49mgp10";
3261+ libraryHaskellDepends = [ array base bytestring containers mtl ];
3262+ homepage = "http://sourceforge.net/projects/lazy-regex";
3263+ description = "Replaces/Enhances Text.Regex";
3264+ license = stdenv.lib.licenses.bsd3;
3265+ }) {};
3266+ "regex-posix" = callPackage
3267+ ({ mkDerivation, array, base, bytestring, containers, regex-base }:
3268+ mkDerivation {
3269+ pname = "regex-posix";
3270+ version = "0.95.2";
3271+ sha256 = "0gkhzhj8nvfn1ija31c7xnl6p0gadwii9ihyp219ck2arlhrj0an";
3272+ libraryHaskellDepends = [
3273+ array base bytestring containers regex-base
3274+ ];
3275+ homepage = "http://sourceforge.net/projects/lazy-regex";
3276+ description = "Replaces/Enhances Text.Regex";
3277+ license = stdenv.lib.licenses.bsd3;
3278+ }) {};
3279+ "resourcet" = callPackage
3280+ ({ mkDerivation, base, containers, exceptions, hspec, mtl
3281+ , primitive, transformers, unliftio-core
3282+ }:
3283+ mkDerivation {
3284+ pname = "resourcet";
3285+ version = "1.2.1";
3286+ sha256 = "0rzjzh34s36ssign7akqjnwnjxf11c3511wk7ky0xxy0dqmc2rg7";
3287+ libraryHaskellDepends = [
3288+ base containers exceptions mtl primitive transformers unliftio-core
3289+ ];
3290+ testHaskellDepends = [ base exceptions hspec transformers ];
3291+ homepage = "http://github.com/snoyberg/conduit";
3292+ description = "Deterministic allocation and freeing of scarce resources";
3293+ license = stdenv.lib.licenses.bsd3;
3294+ }) {};
3295+ "retry" = callPackage
3296+ ({ mkDerivation, base, data-default-class, exceptions, ghc-prim
3297+ , hedgehog, HUnit, mtl, random, stm, tasty, tasty-hedgehog
3298+ , tasty-hunit, time, transformers
3299+ }:
3300+ mkDerivation {
3301+ pname = "retry";
3302+ version = "0.7.6.2";
3303+ sha256 = "0bmrp2h6pf43hr7sd6562qixw755h2xgszj700157pk2hxcz16ad";
3304+ libraryHaskellDepends = [
3305+ base data-default-class exceptions ghc-prim random transformers
3306+ ];
3307+ testHaskellDepends = [
3308+ base data-default-class exceptions ghc-prim hedgehog HUnit mtl
3309+ random stm tasty tasty-hedgehog tasty-hunit time transformers
3310+ ];
3311+ homepage = "http://github.com/Soostone/retry";
3312+ description = "Retry combinators for monadic actions that may fail";
3313+ license = stdenv.lib.licenses.bsd3;
3314+ }) {};
3315+ "safe" = callPackage
3316+ ({ mkDerivation, base, deepseq, QuickCheck }:
3317+ mkDerivation {
3318+ pname = "safe";
3319+ version = "0.3.17";
3320+ sha256 = "0p3yaf5slvyz1cyy51jq64c5rlp8yzwim8iy2dlnk42if4gc9ibr";
3321+ libraryHaskellDepends = [ base ];
3322+ testHaskellDepends = [ base deepseq QuickCheck ];
3323+ homepage = "https://github.com/ndmitchell/safe#readme";
3324+ description = "Library of safe (exception free) functions";
3325+ license = stdenv.lib.licenses.bsd3;
3326+ }) {};
3327+ "say" = callPackage
3328+ ({ mkDerivation, base, bytestring, criterion, hspec, temporary
3329+ , text, transformers
3330+ }:
3331+ mkDerivation {
3332+ pname = "say";
3333+ version = "0.1.0.0";
3334+ sha256 = "0h7w49v9manw7yml2bms11sf6znsfkmdr87c7d8ax8l1xnadnvzj";
3335+ libraryHaskellDepends = [ base bytestring text transformers ];
3336+ testHaskellDepends = [ base bytestring hspec temporary text ];
3337+ benchmarkHaskellDepends = [
3338+ base bytestring criterion temporary text
3339+ ];
3340+ homepage = "https://github.com/fpco/say#readme";
3341+ description = "Initial project template from stack";
3342+ license = stdenv.lib.licenses.mit;
3343+ }) {};
3344+ "scientific" = callPackage
3345+ ({ mkDerivation, base, binary, bytestring, containers, criterion
3346+ , deepseq, hashable, integer-gmp, integer-logarithms, primitive
3347+ , QuickCheck, smallcheck, tasty, tasty-ant-xml, tasty-hunit
3348+ , tasty-quickcheck, tasty-smallcheck, text
3349+ }:
3350+ mkDerivation {
3351+ pname = "scientific";
3352+ version = "0.3.6.2";
3353+ sha256 = "03ql2f0ac8bsl524idy9xxa3kxisb2sj3avflzw580j5hzy0m397";
3354+ libraryHaskellDepends = [
3355+ base binary bytestring containers deepseq hashable integer-gmp
3356+ integer-logarithms primitive text
3357+ ];
3358+ testHaskellDepends = [
3359+ base binary bytestring QuickCheck smallcheck tasty tasty-ant-xml
3360+ tasty-hunit tasty-quickcheck tasty-smallcheck text
3361+ ];
3362+ benchmarkHaskellDepends = [ base criterion ];
3363+ homepage = "https://github.com/basvandijk/scientific";
3364+ description = "Numbers represented using scientific notation";
3365+ license = stdenv.lib.licenses.bsd3;
3366+ }) {};
3367+ "semigroupoids" = callPackage
3368+ ({ mkDerivation, base, base-orphans, bifunctors, Cabal
3369+ , cabal-doctest, comonad, containers, contravariant, distributive
3370+ , doctest, hashable, semigroups, tagged, template-haskell
3371+ , transformers, transformers-compat, unordered-containers
3372+ }:
3373+ mkDerivation {
3374+ pname = "semigroupoids";
3375+ version = "5.2.2";
3376+ sha256 = "17i96y4iqj8clcs090lf6k0ij3j16nj14vsfwz0mm9nd6i4gbpp4";
3377+ revision = "4";
3378+ editedCabalFile = "0pqfrxzypjq6z8lgdkzq4vhcyqkpk5326hny0r6snpc3gm78r4ij";
3379+ setupHaskellDepends = [ base Cabal cabal-doctest ];
3380+ libraryHaskellDepends = [
3381+ base base-orphans bifunctors comonad containers contravariant
3382+ distributive hashable semigroups tagged template-haskell
3383+ transformers transformers-compat unordered-containers
3384+ ];
3385+ testHaskellDepends = [ base doctest ];
3386+ homepage = "http://github.com/ekmett/semigroupoids";
3387+ description = "Semigroupoids: Category sans id";
3388+ license = stdenv.lib.licenses.bsd3;
3389+ }) {};
3390+ "semigroups" = callPackage
3391+ ({ mkDerivation, base }:
3392+ mkDerivation {
3393+ pname = "semigroups";
3394+ version = "0.18.5";
3395+ sha256 = "17g29h62g1k51ghhvzkw72zksjgi6vs6bfipkj81pqw1dsprcamb";
3396+ libraryHaskellDepends = [ base ];
3397+ homepage = "http://github.com/ekmett/semigroups/";
3398+ description = "Anything that associates";
3399+ license = stdenv.lib.licenses.bsd3;
3400+ }) {};
3401+ "setenv" = callPackage
3402+ ({ mkDerivation, base, unix }:
3403+ mkDerivation {
3404+ pname = "setenv";
3405+ version = "0.1.1.3";
3406+ sha256 = "0cnbgrvb9byyahb37zlqrj05rj25v190crgcw8wmlgf0mwwxyn73";
3407+ revision = "1";
3408+ editedCabalFile = "0ny4g3kjys0hqg41mnwrsymy1bwhl8l169kis4y4fa58sb06m4f5";
3409+ libraryHaskellDepends = [ base unix ];
3410+ description = "A cross-platform library for setting environment variables";
3411+ license = stdenv.lib.licenses.mit;
3412+ }) {};
3413+ "shakespeare" = callPackage
3414+ ({ mkDerivation, aeson, base, blaze-html, blaze-markup, bytestring
3415+ , containers, directory, exceptions, ghc-prim, hspec, HUnit, parsec
3416+ , process, scientific, template-haskell, text, time, transformers
3417+ , unordered-containers, vector
3418+ }:
3419+ mkDerivation {
3420+ pname = "shakespeare";
3421+ version = "2.0.15";
3422+ sha256 = "1vk4b19zvwy4mpwaq9z3l3kfmz75gfyf7alhh0y112gspgpccm23";
3423+ libraryHaskellDepends = [
3424+ aeson base blaze-html blaze-markup bytestring containers directory
3425+ exceptions ghc-prim parsec process scientific template-haskell text
3426+ time transformers unordered-containers vector
3427+ ];
3428+ testHaskellDepends = [
3429+ aeson base blaze-html blaze-markup bytestring containers directory
3430+ exceptions ghc-prim hspec HUnit parsec process template-haskell
3431+ text time transformers
3432+ ];
3433+ homepage = "http://www.yesodweb.com/book/shakespearean-templates";
3434+ description = "A toolkit for making compile-time interpolated templates";
3435+ license = stdenv.lib.licenses.mit;
3436+ }) {};
3437+ "silently" = callPackage
3438+ ({ mkDerivation, base, deepseq, directory, nanospec, temporary }:
3439+ mkDerivation {
3440+ pname = "silently";
3441+ version = "1.2.5";
3442+ sha256 = "0f9qm3f7y0hpxn6mddhhg51mm1r134qkvd2kr8r6192ka1ijbxnf";
3443+ libraryHaskellDepends = [ base deepseq directory ];
3444+ testHaskellDepends = [ base deepseq directory nanospec temporary ];
3445+ homepage = "https://github.com/hspec/silently";
3446+ description = "Prevent or capture writing to stdout and other handles";
3447+ license = stdenv.lib.licenses.bsd3;
3448+ }) {};
3449+ "simple-reflect" = callPackage
3450+ ({ mkDerivation, base }:
3451+ mkDerivation {
3452+ pname = "simple-reflect";
3453+ version = "0.3.3";
3454+ sha256 = "0ayvrx5cm8n6db21jiyjmk5h93pw7cz1707hih09hlhk9jh5x0h7";
3455+ libraryHaskellDepends = [ base ];
3456+ homepage = "http://twanvl.nl/blog/haskell/simple-reflection-of-expressions";
3457+ description = "Simple reflection of expressions containing variables";
3458+ license = stdenv.lib.licenses.bsd3;
3459+ }) {};
3460+ "simple-sendfile" = callPackage
3461+ ({ mkDerivation, base, bytestring, conduit, conduit-extra
3462+ , directory, hspec, HUnit, network, process, resourcet, unix
3463+ }:
3464+ mkDerivation {
3465+ pname = "simple-sendfile";
3466+ version = "0.2.27";
3467+ sha256 = "1bwwqzcm56m2w4ymsa054sxmpbj76h9pvb0jf8zxp8lr41cp51gn";
3468+ libraryHaskellDepends = [ base bytestring network unix ];
3469+ testHaskellDepends = [
3470+ base bytestring conduit conduit-extra directory hspec HUnit network
3471+ process resourcet unix
3472+ ];
3473+ description = "Cross platform library for the sendfile system call";
3474+ license = stdenv.lib.licenses.bsd3;
3475+ }) {};
3476+ "siphash" = callPackage
3477+ ({ mkDerivation, base, bytestring, cpu, QuickCheck, test-framework
3478+ , test-framework-quickcheck2
3479+ }:
3480+ mkDerivation {
3481+ pname = "siphash";
3482+ version = "1.0.3";
3483+ sha256 = "1wq5dan30ggjgmravy92ylqjvjv1q7mxrmddr7zc8h6aqr0wx0fg";
3484+ revision = "1";
3485+ editedCabalFile = "1q2dy0ywngm9iv7k6d9gnf860m9hpf62q5qvdzmxw5s629gk4afn";
3486+ enableSeparateDataOutput = true;
3487+ libraryHaskellDepends = [ base bytestring cpu ];
3488+ testHaskellDepends = [
3489+ base bytestring QuickCheck test-framework
3490+ test-framework-quickcheck2
3491+ ];
3492+ homepage = "http://github.com/vincenthz/hs-siphash";
3493+ description = "siphash: a fast short input PRF";
3494+ license = stdenv.lib.licenses.bsd3;
3495+ }) {};
3496+ "smallcheck" = callPackage
3497+ ({ mkDerivation, base, ghc-prim, logict, mtl, pretty }:
3498+ mkDerivation {
3499+ pname = "smallcheck";
3500+ version = "1.1.5";
3501+ sha256 = "195fj7w3v03d1y1nm2ylavzrwxjcdbq0lb6zsw1dwyx5jmwfc84h";
3502+ libraryHaskellDepends = [ base ghc-prim logict mtl pretty ];
3503+ homepage = "https://github.com/feuerbach/smallcheck";
3504+ description = "A property-based testing library";
3505+ license = stdenv.lib.licenses.bsd3;
3506+ }) {};
3507+ "socks" = callPackage
3508+ ({ mkDerivation, base, bytestring, cereal, network }:
3509+ mkDerivation {
3510+ pname = "socks";
3511+ version = "0.5.6";
3512+ sha256 = "0f44qy74i0n6ll3jym0a2ipafkpw1h67amcpqmj8iq95h21wsqzs";
3513+ libraryHaskellDepends = [ base bytestring cereal network ];
3514+ homepage = "http://github.com/vincenthz/hs-socks";
3515+ description = "Socks proxy (ver 5)";
3516+ license = stdenv.lib.licenses.bsd3;
3517+ }) {};
3518+ "split" = callPackage
3519+ ({ mkDerivation, base, QuickCheck }:
3520+ mkDerivation {
3521+ pname = "split";
3522+ version = "0.2.3.3";
3523+ sha256 = "04qlmkcyklznl03gsjg95b4nzb6i96gdapqg60rny9szgi7ngk8x";
3524+ libraryHaskellDepends = [ base ];
3525+ testHaskellDepends = [ base QuickCheck ];
3526+ description = "Combinator library for splitting lists";
3527+ license = stdenv.lib.licenses.bsd3;
3528+ }) {};
3529+ "statistics" = callPackage
3530+ ({ mkDerivation, aeson, base, base-orphans, binary, deepseq, erf
3531+ , HUnit, ieee754, math-functions, monad-par, mwc-random, primitive
3532+ , QuickCheck, test-framework, test-framework-hunit
3533+ , test-framework-quickcheck2, vector, vector-algorithms
3534+ , vector-binary-instances, vector-th-unbox
3535+ }:
3536+ mkDerivation {
3537+ pname = "statistics";
3538+ version = "0.14.0.2";
3539+ sha256 = "0y27gafkib0x0fn39qfn2rkgsfrm09ng35sbb5dwr7rclhnxz59l";
3540+ revision = "2";
3541+ editedCabalFile = "1bx70yqkn62ii17fjv3pig4hklrzkqd09zj67zzjiyjzmn04fir3";
3542+ libraryHaskellDepends = [
3543+ aeson base base-orphans binary deepseq erf math-functions monad-par
3544+ mwc-random primitive vector vector-algorithms
3545+ vector-binary-instances vector-th-unbox
3546+ ];
3547+ testHaskellDepends = [
3548+ aeson base binary erf HUnit ieee754 math-functions mwc-random
3549+ primitive QuickCheck test-framework test-framework-hunit
3550+ test-framework-quickcheck2 vector vector-algorithms
3551+ ];
3552+ doCheck = false;
3553+ homepage = "https://github.com/bos/statistics";
3554+ description = "A library of statistical types, data, and functions";
3555+ license = stdenv.lib.licenses.bsd2;
3556+ }) {};
3557+ "stm" = callPackage
3558+ ({ mkDerivation, array, base }:
3559+ mkDerivation {
3560+ pname = "stm";
3561+ version = "2.4.5.0";
3562+ sha256 = "19sr11a0hqikhvf561b38phz6k3zg9s157a0f5ffvghk7wcdpmri";
3563+ libraryHaskellDepends = [ array base ];
3564+ homepage = "https://wiki.haskell.org/Software_transactional_memory";
3565+ description = "Software Transactional Memory";
3566+ license = stdenv.lib.licenses.bsd3;
3567+ }) {};
3568+ "stm-chans" = callPackage
3569+ ({ mkDerivation, base, Cabal, stm }:
3570+ mkDerivation {
3571+ pname = "stm-chans";
3572+ version = "3.0.0.4";
3573+ sha256 = "0f27sp09yha43xk9q55sc185jyjs5h7gq2dhsyx6bm9kz9dzqi13";
3574+ revision = "1";
3575+ editedCabalFile = "0v9axxcfszqdmf3dhjxy34ybh22x3r5c48mdnbvjh5i5lp7g7vp2";
3576+ setupHaskellDepends = [ base Cabal ];
3577+ libraryHaskellDepends = [ base stm ];
3578+ homepage = "http://code.haskell.org/~wren/";
3579+ description = "Additional types of channels for STM";
3580+ license = stdenv.lib.licenses.bsd3;
3581+ }) {};
3582+ "stm-conduit" = callPackage
3583+ ({ mkDerivation, async, base, cereal, cereal-conduit, conduit
3584+ , conduit-extra, directory, doctest, exceptions, HUnit, monad-loops
3585+ , QuickCheck, resourcet, stm, stm-chans, test-framework
3586+ , test-framework-hunit, test-framework-quickcheck2, transformers
3587+ , unliftio
3588+ }:
3589+ mkDerivation {
3590+ pname = "stm-conduit";
3591+ version = "4.0.0";
3592+ sha256 = "0paapljn7nqfzrx889y0n8sszci38mdiaxkgr0bb00ph9246rr7z";
3593+ libraryHaskellDepends = [
3594+ async base cereal cereal-conduit conduit conduit-extra directory
3595+ exceptions monad-loops resourcet stm stm-chans transformers
3596+ unliftio
3597+ ];
3598+ testHaskellDepends = [
3599+ base conduit directory doctest HUnit QuickCheck resourcet stm
3600+ stm-chans test-framework test-framework-hunit
3601+ test-framework-quickcheck2 transformers unliftio
3602+ ];
3603+ homepage = "https://github.com/cgaebel/stm-conduit";
3604+ description = "Introduces conduits to channels, and promotes using conduits concurrently";
3605+ license = stdenv.lib.licenses.bsd3;
3606+ }) {};
3607+ "store" = callPackage
3608+ ({ mkDerivation, array, async, base, base-orphans
3609+ , base64-bytestring, bifunctors, bytestring, containers
3610+ , contravariant, criterion, cryptohash, deepseq, directory
3611+ , filepath, free, ghc-prim, hashable, hspec, hspec-smallcheck
3612+ , integer-gmp, lifted-base, monad-control, mono-traversable
3613+ , network, primitive, resourcet, safe, semigroups, smallcheck
3614+ , store-core, syb, template-haskell, text, th-lift
3615+ , th-lift-instances, th-orphans, th-reify-many, th-utilities, time
3616+ , transformers, unordered-containers, vector, void
3617+ }:
3618+ mkDerivation {
3619+ pname = "store";
3620+ version = "0.5.0";
3621+ sha256 = "1ivr2pvfja2plhp625wjv9lbd47vmydp33f31ljwdyzqik2j7vij";
3622+ libraryHaskellDepends = [
3623+ array async base base-orphans base64-bytestring bifunctors
3624+ bytestring containers contravariant cryptohash deepseq directory
3625+ filepath free ghc-prim hashable hspec hspec-smallcheck integer-gmp
3626+ lifted-base monad-control mono-traversable network primitive
3627+ resourcet safe semigroups smallcheck store-core syb
3628+ template-haskell text th-lift th-lift-instances th-orphans
3629+ th-reify-many th-utilities time transformers unordered-containers
3630+ vector void
3631+ ];
3632+ benchmarkHaskellDepends = [
3633+ array async base base-orphans base64-bytestring bifunctors
3634+ bytestring containers contravariant criterion cryptohash deepseq
3635+ directory filepath free ghc-prim hashable hspec hspec-smallcheck
3636+ integer-gmp lifted-base monad-control mono-traversable network
3637+ primitive resourcet safe semigroups smallcheck store-core syb
3638+ template-haskell text th-lift th-lift-instances th-orphans
3639+ th-reify-many th-utilities time transformers unordered-containers
3640+ vector void
3641+ ];
3642+ doCheck = false;
3643+ homepage = "https://github.com/fpco/store#readme";
3644+ description = "Fast binary serialization";
3645+ license = stdenv.lib.licenses.mit;
3646+ }) {};
3647+ "store-core" = callPackage
3648+ ({ mkDerivation, base, bytestring, ghc-prim, primitive, text
3649+ , transformers
3650+ }:
3651+ mkDerivation {
3652+ pname = "store-core";
3653+ version = "0.4.4";
3654+ sha256 = "1489ydwmq3vd9lz193m5w277wvb9g74ssc1ncfjdry2g0y6czbjv";
3655+ libraryHaskellDepends = [
3656+ base bytestring ghc-prim primitive text transformers
3657+ ];
3658+ homepage = "https://github.com/fpco/store#readme";
3659+ description = "Fast and lightweight binary serialization";
3660+ license = stdenv.lib.licenses.mit;
3661+ }) {};
3662+ "streaming-commons" = callPackage
3663+ ({ mkDerivation, array, async, base, bytestring, deepseq, directory
3664+ , gauge, hspec, network, process, QuickCheck, random, stm, text
3665+ , transformers, unix, zlib
3666+ }:
3667+ mkDerivation {
3668+ pname = "streaming-commons";
3669+ version = "0.2.1.0";
3670+ sha256 = "13fn6qmpiggwpn8lczyydgp77cyzfypwds7wxskrwir4i5cgxlfq";
3671+ libraryHaskellDepends = [
3672+ array async base bytestring directory network process random stm
3673+ text transformers unix zlib
3674+ ];
3675+ testHaskellDepends = [
3676+ array async base bytestring deepseq hspec network QuickCheck text
3677+ unix zlib
3678+ ];
3679+ benchmarkHaskellDepends = [ base bytestring deepseq gauge text ];
3680+ homepage = "https://github.com/fpco/streaming-commons";
3681+ description = "Common lower-level functions needed by various streaming data libraries";
3682+ license = stdenv.lib.licenses.mit;
3683+ }) {};
3684+ "stringbuilder" = callPackage
3685+ ({ mkDerivation, base, hspec, QuickCheck }:
3686+ mkDerivation {
3687+ pname = "stringbuilder";
3688+ version = "0.5.1";
3689+ sha256 = "1fh3csx1wcssn8xyvl4ip4aprh9l4qyz2kk8mgjvqvc0vb2bsy6q";
3690+ libraryHaskellDepends = [ base ];
3691+ testHaskellDepends = [ base hspec QuickCheck ];
3692+ description = "A writer monad for multi-line string literals";
3693+ license = stdenv.lib.licenses.mit;
3694+ }) {};
3695+ "syb" = callPackage
3696+ ({ mkDerivation, base, containers, HUnit, mtl }:
3697+ mkDerivation {
3698+ pname = "syb";
3699+ version = "0.7";
3700+ sha256 = "1da2zz7gqm4xbkx5vpd74dayx1svaxyl145fl14mq15lbb77sxdq";
3701+ libraryHaskellDepends = [ base ];
3702+ testHaskellDepends = [ base containers HUnit mtl ];
3703+ homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB";
3704+ description = "Scrap Your Boilerplate";
3705+ license = stdenv.lib.licenses.bsd3;
3706+ }) {};
3707+ "tagged" = callPackage
3708+ ({ mkDerivation, base, deepseq, template-haskell, transformers
3709+ , transformers-compat
3710+ }:
3711+ mkDerivation {
3712+ pname = "tagged";
3713+ version = "0.8.5";
3714+ sha256 = "16cdzh0bw16nvjnyyy5j9s60malhz4nnazw96vxb0xzdap4m2z74";
3715+ revision = "2";
3716+ editedCabalFile = "0r2knfcq0b4s652vlvlnfwxlc2mkc2ra9kl8bp4zdn1awmfy0ia5";
3717+ libraryHaskellDepends = [
3718+ base deepseq template-haskell transformers transformers-compat
3719+ ];
3720+ homepage = "http://github.com/ekmett/tagged";
3721+ description = "Haskell 98 phantom types to avoid unsafely passing dummy arguments";
3722+ license = stdenv.lib.licenses.bsd3;
3723+ }) {};
3724+ "tar" = callPackage
3725+ ({ mkDerivation, array, base, bytestring, containers, criterion
3726+ , deepseq, directory, filepath, time
3727+ }:
3728+ mkDerivation {
3729+ pname = "tar";
3730+ version = "0.5.1.0";
3731+ sha256 = "0s2brvaxg5fki2jdkccmnpssiy6a3wjh24p6a3dkkdvjcixnk7f8";
3732+ configureFlags = [ "-f-old-time" ];
3733+ libraryHaskellDepends = [
3734+ array base bytestring containers deepseq directory filepath time
3735+ ];
3736+ benchmarkHaskellDepends = [
3737+ array base bytestring containers criterion deepseq directory
3738+ filepath time
3739+ ];
3740+ doCheck = false;
3741+ description = "Reading, writing and manipulating \".tar\" archive files.";
3742+ license = stdenv.lib.licenses.bsd3;
3743+ }) {};
3744+ "tasty" = callPackage
3745+ ({ mkDerivation, ansi-terminal, async, base, clock, containers, mtl
3746+ , optparse-applicative, stm, tagged, unbounded-delays, unix
3747+ , wcwidth
3748+ }:
3749+ mkDerivation {
3750+ pname = "tasty";
3751+ version = "1.1.0.2";
3752+ sha256 = "1q3hsy1a6q8xng3m04hp1m10bwamihani30zi25cjhkhmyl4ads7";
3753+ libraryHaskellDepends = [
3754+ ansi-terminal async base clock containers mtl optparse-applicative
3755+ stm tagged unbounded-delays unix wcwidth
3756+ ];
3757+ homepage = "https://github.com/feuerbach/tasty";
3758+ description = "Modern and extensible testing framework";
3759+ license = stdenv.lib.licenses.mit;
3760+ }) {};
3761+ "tasty-ant-xml" = callPackage
3762+ ({ mkDerivation, base, containers, directory, filepath
3763+ , generic-deriving, ghc-prim, mtl, stm, tagged, tasty, transformers
3764+ , xml
3765+ }:
3766+ mkDerivation {
3767+ pname = "tasty-ant-xml";
3768+ version = "1.1.4";
3769+ sha256 = "0v0gsb90kh6hwlgxbclzawsskywc6yf7n8xhiifia97l4y0yx2m8";
3770+ libraryHaskellDepends = [
3771+ base containers directory filepath generic-deriving ghc-prim mtl
3772+ stm tagged tasty transformers xml
3773+ ];
3774+ homepage = "http://github.com/ocharles/tasty-ant-xml";
3775+ description = "Render tasty output to XML for Jenkins";
3776+ license = stdenv.lib.licenses.bsd3;
3777+ }) {};
3778+ "tasty-expected-failure" = callPackage
3779+ ({ mkDerivation, base, tagged, tasty }:
3780+ mkDerivation {
3781+ pname = "tasty-expected-failure";
3782+ version = "0.11.1.1";
3783+ sha256 = "1i2s809m644b7hgiblqay9j364r3fjj1rwbrahsn1pgr5q6mr6ji";
3784+ libraryHaskellDepends = [ base tagged tasty ];
3785+ homepage = "http://github.com/nomeata/tasty-expected-failure";
3786+ description = "Mark tasty tests as failure expected";
3787+ license = stdenv.lib.licenses.mit;
3788+ }) {};
3789+ "tasty-golden" = callPackage
3790+ ({ mkDerivation, async, base, bytestring, containers, deepseq
3791+ , directory, filepath, mtl, optparse-applicative, process, tagged
3792+ , tasty, tasty-hunit, temporary, temporary-rc
3793+ }:
3794+ mkDerivation {
3795+ pname = "tasty-golden";
3796+ version = "2.3.2";
3797+ sha256 = "0k3ibjhjc9vcwzrjnl4rnwvfm8l81q347nb7dgvcib6n5wm3s404";
3798+ libraryHaskellDepends = [
3799+ async base bytestring containers deepseq directory filepath mtl
3800+ optparse-applicative process tagged tasty temporary
3801+ ];
3802+ testHaskellDepends = [
3803+ base directory filepath process tasty tasty-hunit temporary-rc
3804+ ];
3805+ homepage = "https://github.com/feuerbach/tasty-golden";
3806+ description = "Golden tests support for tasty";
3807+ license = stdenv.lib.licenses.mit;
3808+ }) {};
3809+ "tasty-hedgehog" = callPackage
3810+ ({ mkDerivation, base, hedgehog, tagged, tasty
3811+ , tasty-expected-failure
3812+ }:
3813+ mkDerivation {
3814+ pname = "tasty-hedgehog";
3815+ version = "0.2.0.0";
3816+ sha256 = "10m1akbiblnjq9ljk469725k30b254d36d267rk51z2f171py42s";
3817+ revision = "4";
3818+ editedCabalFile = "04d7lhn0dlqna0pqz7wxmz2y6vq7qar2m2g432z38cvm5na9w4y0";
3819+ libraryHaskellDepends = [ base hedgehog tagged tasty ];
3820+ testHaskellDepends = [
3821+ base hedgehog tasty tasty-expected-failure
3822+ ];
3823+ homepage = "https://github.com/qfpl/tasty-hedgehog";
3824+ description = "Integration for tasty and hedgehog";
3825+ license = stdenv.lib.licenses.bsd3;
3826+ }) {};
3827+ "tasty-hunit" = callPackage
3828+ ({ mkDerivation, base, call-stack, tasty }:
3829+ mkDerivation {
3830+ pname = "tasty-hunit";
3831+ version = "0.10.0.1";
3832+ sha256 = "0j3hgga6c3s8h5snzivb8a75h96207ia2rlbxzj07xbf4zpkp44g";
3833+ libraryHaskellDepends = [ base call-stack tasty ];
3834+ homepage = "https://github.com/feuerbach/tasty";
3835+ description = "HUnit support for the Tasty test framework";
3836+ license = stdenv.lib.licenses.mit;
3837+ }) {};
3838+ "tasty-kat" = callPackage
3839+ ({ mkDerivation, base, bytestring, mtl, tasty, tasty-hunit
3840+ , tasty-quickcheck
3841+ }:
3842+ mkDerivation {
3843+ pname = "tasty-kat";
3844+ version = "0.0.3";
3845+ sha256 = "14yvlpli6cv6bn3kh8mlfp4x1l6ns4fvmfv6hmj75cvxyzq029d7";
3846+ libraryHaskellDepends = [ base bytestring tasty ];
3847+ testHaskellDepends = [
3848+ base bytestring mtl tasty tasty-hunit tasty-quickcheck
3849+ ];
3850+ homepage = "https://github.com/vincenthz/tasty-kat";
3851+ description = "Known Answer Tests (KAT) framework for tasty";
3852+ license = stdenv.lib.licenses.mit;
3853+ }) {};
3854+ "tasty-quickcheck" = callPackage
3855+ ({ mkDerivation, base, optparse-applicative, pcre-light, QuickCheck
3856+ , random, tagged, tasty, tasty-hunit
3857+ }:
3858+ mkDerivation {
3859+ pname = "tasty-quickcheck";
3860+ version = "0.10";
3861+ sha256 = "0vr6szbbz3s5461i0zr8zpq347zfvidfzv5gf3xwxhm0yk731z8h";
3862+ revision = "1";
3863+ editedCabalFile = "1ndkkywcqgb2wj339vgckjv5915da5kd4ixlkaww9fsba3qsrnwx";
3864+ libraryHaskellDepends = [
3865+ base optparse-applicative QuickCheck random tagged tasty
3866+ ];
3867+ testHaskellDepends = [ base pcre-light tasty tasty-hunit ];
3868+ homepage = "https://github.com/feuerbach/tasty";
3869+ description = "QuickCheck support for the Tasty test framework";
3870+ license = stdenv.lib.licenses.mit;
3871+ }) {};
3872+ "tasty-smallcheck" = callPackage
3873+ ({ mkDerivation, async, base, smallcheck, tagged, tasty }:
3874+ mkDerivation {
3875+ pname = "tasty-smallcheck";
3876+ version = "0.8.1";
3877+ sha256 = "1n66ngzllf3xrlqykwszlkwsi96n5nkm7xbpfq7774vpvfnafjri";
3878+ libraryHaskellDepends = [ async base smallcheck tagged tasty ];
3879+ homepage = "http://documentup.com/feuerbach/tasty";
3880+ description = "SmallCheck support for the Tasty test framework";
3881+ license = stdenv.lib.licenses.mit;
3882+ }) {};
3883+ "tasty-th" = callPackage
3884+ ({ mkDerivation, base, haskell-src-exts, tasty, tasty-hunit
3885+ , template-haskell
3886+ }:
3887+ mkDerivation {
3888+ pname = "tasty-th";
3889+ version = "0.1.7";
3890+ sha256 = "0b2ivrw2257m4cy4rjnkwqlarh83j1y3zywnmaqqqbvy667sqnj3";
3891+ libraryHaskellDepends = [
3892+ base haskell-src-exts tasty template-haskell
3893+ ];
3894+ testHaskellDepends = [ base tasty-hunit ];
3895+ homepage = "http://github.com/bennofs/tasty-th";
3896+ description = "Automatic tasty test case discovery using TH";
3897+ license = stdenv.lib.licenses.bsd3;
3898+ }) {};
3899+ "temporary" = callPackage
3900+ ({ mkDerivation, base, base-compat, directory, exceptions, filepath
3901+ , random, tasty, tasty-hunit, transformers, unix
3902+ }:
3903+ mkDerivation {
3904+ pname = "temporary";
3905+ version = "1.3";
3906+ sha256 = "144qhwfwg37l3k313raf4ssiz16jbgwlm1nf4flgqpsbd69jji4c";
3907+ libraryHaskellDepends = [
3908+ base directory exceptions filepath random transformers unix
3909+ ];
3910+ testHaskellDepends = [
3911+ base base-compat directory filepath tasty tasty-hunit unix
3912+ ];
3913+ homepage = "https://github.com/feuerbach/temporary";
3914+ description = "Portable temporary file and directory support";
3915+ license = stdenv.lib.licenses.bsd3;
3916+ }) {};
3917+ "temporary-rc" = callPackage
3918+ ({ mkDerivation, base, directory, exceptions, filepath
3919+ , transformers, unix
3920+ }:
3921+ mkDerivation {
3922+ pname = "temporary-rc";
3923+ version = "1.2.0.3";
3924+ sha256 = "1nqih0qks439k3pr5kmbbc8rjdw730slrxlflqb27fbxbzb8skqs";
3925+ libraryHaskellDepends = [
3926+ base directory exceptions filepath transformers unix
3927+ ];
3928+ homepage = "http://www.github.com/feuerbach/temporary";
3929+ description = "Portable temporary file and directory support for Windows and Unix, based on code from Cabal";
3930+ license = stdenv.lib.licenses.bsd3;
3931+ }) {};
3932+ "terminal-size" = callPackage
3933+ ({ mkDerivation, base }:
3934+ mkDerivation {
3935+ pname = "terminal-size";
3936+ version = "0.3.2.1";
3937+ sha256 = "0n4nvj3dbj9gxfnprgish45asn9z4dipv9j98s8i7g2n8yb3xhmm";
3938+ libraryHaskellDepends = [ base ];
3939+ description = "Get terminal window height and width";
3940+ license = stdenv.lib.licenses.bsd3;
3941+ }) {};
3942+ "test-framework" = callPackage
3943+ ({ mkDerivation, ansi-terminal, ansi-wl-pprint, base, containers
3944+ , hostname, old-locale, random, regex-posix, time, xml
3945+ }:
3946+ mkDerivation {
3947+ pname = "test-framework";
3948+ version = "0.8.2.0";
3949+ sha256 = "1hhacrzam6b8f10hyldmjw8pb7frdxh04rfg3farxcxwbnhwgbpm";
3950+ libraryHaskellDepends = [
3951+ ansi-terminal ansi-wl-pprint base containers hostname old-locale
3952+ random regex-posix time xml
3953+ ];
3954+ doCheck = false;
3955+ homepage = "http://haskell.github.io/test-framework/";
3956+ description = "Framework for running and organising tests, with HUnit and QuickCheck support";
3957+ license = stdenv.lib.licenses.bsd3;
3958+ }) {};
3959+ "test-framework-hunit" = callPackage
3960+ ({ mkDerivation, base, extensible-exceptions, HUnit, test-framework
3961+ }:
3962+ mkDerivation {
3963+ pname = "test-framework-hunit";
3964+ version = "0.3.0.2";
3965+ sha256 = "1y0b6vg8nfm43v90lxxcydhi6qlxhfy4vpxbzm5ic2w55bh8xjwm";
3966+ revision = "3";
3967+ editedCabalFile = "0i9mlalv7cl1iq43ld5myrnpszq5rxmd79hk495dcb08rglhgl3z";
3968+ libraryHaskellDepends = [
3969+ base extensible-exceptions HUnit test-framework
3970+ ];
3971+ homepage = "https://batterseapower.github.io/test-framework/";
3972+ description = "HUnit support for the test-framework package";
3973+ license = stdenv.lib.licenses.bsd3;
3974+ }) {};
3975+ "test-framework-quickcheck2" = callPackage
3976+ ({ mkDerivation, base, extensible-exceptions, QuickCheck, random
3977+ , test-framework
3978+ }:
3979+ mkDerivation {
3980+ pname = "test-framework-quickcheck2";
3981+ version = "0.3.0.4";
3982+ sha256 = "0vj834337r6jzr3258cv68ly2sv5999mklpsrfngyk51kywsyqyp";
3983+ revision = "1";
3984+ editedCabalFile = "147ngmfdkskyg7mwsp5w73a4dbx3rp5s38bci3z03kn1m093lxff";
3985+ libraryHaskellDepends = [
3986+ base extensible-exceptions QuickCheck random test-framework
3987+ ];
3988+ homepage = "http://haskell.github.io/test-framework/";
3989+ description = "QuickCheck-2 support for the test-framework package";
3990+ license = stdenv.lib.licenses.bsd3;
3991+ }) {};
3992+ "test-framework-th" = callPackage
3993+ ({ mkDerivation, base, haskell-src-exts, language-haskell-extract
3994+ , regex-posix, template-haskell, test-framework
3995+ }:
3996+ mkDerivation {
3997+ pname = "test-framework-th";
3998+ version = "0.2.4";
3999+ sha256 = "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b";
4000+ libraryHaskellDepends = [
4001+ base haskell-src-exts language-haskell-extract regex-posix
4002+ template-haskell test-framework
4003+ ];
4004+ homepage = "http://github.com/finnsson/test-generator";
4005+ description = "Automagically generate the HUnit- and Quickcheck-bulk-code using Template Haskell";
4006+ license = stdenv.lib.licenses.bsd3;
4007+ }) {};
4008+ "text" = callPackage
4009+ ({ mkDerivation, array, base, binary, bytestring, deepseq, ghc-prim
4010+ , integer-gmp
4011+ }:
4012+ mkDerivation {
4013+ pname = "text";
4014+ version = "1.2.3.0";
4015+ sha256 = "06iir7q99rnffzxi8gagn8w1k9m49368sbidgz634fv1gxib3q10";
4016+ configureFlags = [ "-f-integer-simple" ];
4017+ libraryHaskellDepends = [
4018+ array base binary bytestring deepseq ghc-prim integer-gmp
4019+ ];
4020+ doCheck = false;
4021+ homepage = "https://github.com/haskell/text";
4022+ description = "An efficient packed Unicode text type";
4023+ license = stdenv.lib.licenses.bsd2;
4024+ }) {};
4025+ "text-icu" = callPackage
4026+ ({ mkDerivation, array, base, bytestring, deepseq, directory
4027+ , ghc-prim, HUnit, icu, QuickCheck, random, test-framework
4028+ , test-framework-hunit, test-framework-quickcheck2, text
4029+ }:
4030+ mkDerivation {
4031+ pname = "text-icu";
4032+ version = "0.7.0.1";
4033+ sha256 = "0y3z5jda7v2iyll2148ivxfd2yhp27d3ryxrspp0cdq394klqxp2";
4034+ libraryHaskellDepends = [ base bytestring deepseq text ];
4035+ librarySystemDepends = [ icu ];
4036+ testHaskellDepends = [
4037+ array base bytestring deepseq directory ghc-prim HUnit QuickCheck
4038+ random test-framework test-framework-hunit
4039+ test-framework-quickcheck2 text
4040+ ];
4041+ doCheck = false;
4042+ homepage = "https://github.com/bos/text-icu";
4043+ description = "Bindings to the ICU library";
4044+ license = stdenv.lib.licenses.bsd3;
4045+ }) {inherit (pkgs) icu;};
4046+ "text-short" = callPackage
4047+ ({ mkDerivation, base, binary, bytestring, deepseq, ghc-prim
4048+ , hashable, text
4049+ }:
4050+ mkDerivation {
4051+ pname = "text-short";
4052+ version = "0.1.2";
4053+ sha256 = "0rqiwgjkgyfy8596swl0s0x2jqk6ddh2h02qxa32az2cs5kviwmk";
4054+ libraryHaskellDepends = [
4055+ base binary bytestring deepseq ghc-prim hashable text
4056+ ];
4057+ doCheck = false;
4058+ description = "Memory-efficient representation of Unicode text strings";
4059+ license = stdenv.lib.licenses.bsd3;
4060+ }) {};
4061+ "tf-random" = callPackage
4062+ ({ mkDerivation, base, primitive, random, time }:
4063+ mkDerivation {
4064+ pname = "tf-random";
4065+ version = "0.5";
4066+ sha256 = "0445r2nns6009fmq0xbfpyv7jpzwv0snccjdg7hwj4xk4z0cwc1f";
4067+ libraryHaskellDepends = [ base primitive random time ];
4068+ description = "High-quality splittable pseudorandom number generator";
4069+ license = stdenv.lib.licenses.bsd3;
4070+ }) {};
4071+ "th-abstraction" = callPackage
4072+ ({ mkDerivation, base, containers, ghc-prim, template-haskell }:
4073+ mkDerivation {
4074+ pname = "th-abstraction";
4075+ version = "0.2.8.0";
4076+ sha256 = "0n17w4q2ykd0nica4sck2wng6md56rfad8x0icl0l8vnzb9nn4ya";
4077+ revision = "1";
4078+ editedCabalFile = "0yr4bj9ypbls0ysmwrgn2nsjb1xpsb12bjaiwbkzp6nf3kljwnnv";
4079+ libraryHaskellDepends = [
4080+ base containers ghc-prim template-haskell
4081+ ];
4082+ testHaskellDepends = [ base containers template-haskell ];
4083+ homepage = "https://github.com/glguy/th-abstraction";
4084+ description = "Nicer interface for reified information about data types";
4085+ license = stdenv.lib.licenses.isc;
4086+ }) {};
4087+ "th-expand-syns" = callPackage
4088+ ({ mkDerivation, base, containers, syb, template-haskell }:
4089+ mkDerivation {
4090+ pname = "th-expand-syns";
4091+ version = "0.4.4.0";
4092+ sha256 = "01prlvh3py5hq5ccjidfyp9ixq2zd88dkbsidyjrpkja6v8m43yc";
4093+ libraryHaskellDepends = [ base containers syb template-haskell ];
4094+ testHaskellDepends = [ base template-haskell ];
4095+ homepage = "https://github.com/DanielSchuessler/th-expand-syns";
4096+ description = "Expands type synonyms in Template Haskell ASTs";
4097+ license = stdenv.lib.licenses.bsd3;
4098+ }) {};
4099+ "th-lift" = callPackage
4100+ ({ mkDerivation, base, ghc-prim, template-haskell, th-abstraction
4101+ }:
4102+ mkDerivation {
4103+ pname = "th-lift";
4104+ version = "0.7.10";
4105+ sha256 = "13c89mr9g4jwrmqxx882ygr1lkvj1chw29p80qv2f3g5wnhlgkmr";
4106+ libraryHaskellDepends = [
4107+ base ghc-prim template-haskell th-abstraction
4108+ ];
4109+ testHaskellDepends = [ base ghc-prim template-haskell ];
4110+ homepage = "http://github.com/mboes/th-lift";
4111+ description = "Derive Template Haskell's Lift class for datatypes";
4112+ license = stdenv.lib.licenses.bsd3;
4113+ }) {};
4114+ "th-lift-instances" = callPackage
4115+ ({ mkDerivation, base, bytestring, containers, QuickCheck
4116+ , template-haskell, text, th-lift, vector
4117+ }:
4118+ mkDerivation {
4119+ pname = "th-lift-instances";
4120+ version = "0.1.11";
4121+ sha256 = "1f56cp6ckcalld5jchv0kxpjkwcsixd7smd0g7r8cg67ppx6m90x";
4122+ libraryHaskellDepends = [
4123+ base bytestring containers template-haskell text th-lift vector
4124+ ];
4125+ testHaskellDepends = [
4126+ base bytestring containers QuickCheck template-haskell text vector
4127+ ];
4128+ homepage = "http://github.com/bennofs/th-lift-instances/";
4129+ description = "Lift instances for template-haskell for common data types";
4130+ license = stdenv.lib.licenses.bsd3;
4131+ }) {};
4132+ "th-orphans" = callPackage
4133+ ({ mkDerivation, base, hspec, hspec-discover, mtl, template-haskell
4134+ , th-lift, th-lift-instances, th-reify-many
4135+ }:
4136+ mkDerivation {
4137+ pname = "th-orphans";
4138+ version = "0.13.6";
4139+ sha256 = "0sfl3pn9kq9da3ji3lsgzgzy82vz6yvsg80dmakc1jvk7awycibp";
4140+ libraryHaskellDepends = [
4141+ base mtl template-haskell th-lift th-lift-instances th-reify-many
4142+ ];
4143+ testHaskellDepends = [ base hspec template-haskell ];
4144+ testToolDepends = [ hspec-discover ];
4145+ description = "Orphan instances for TH datatypes";
4146+ license = stdenv.lib.licenses.bsd3;
4147+ }) {};
4148+ "th-reify-many" = callPackage
4149+ ({ mkDerivation, base, containers, mtl, safe, template-haskell
4150+ , th-expand-syns
4151+ }:
4152+ mkDerivation {
4153+ pname = "th-reify-many";
4154+ version = "0.1.8";
4155+ sha256 = "0hzy6hvhvcd6i60vx5cp2b7ggmnnjh9rx4h8bm8xw4grglcaxjnf";
4156+ libraryHaskellDepends = [
4157+ base containers mtl safe template-haskell th-expand-syns
4158+ ];
4159+ testHaskellDepends = [ base template-haskell ];
4160+ homepage = "http://github.com/mgsloan/th-reify-many";
4161+ description = "Recurseively reify template haskell datatype info";
4162+ license = stdenv.lib.licenses.bsd3;
4163+ }) {};
4164+ "th-utilities" = callPackage
4165+ ({ mkDerivation, base, bytestring, containers, directory, filepath
4166+ , hspec, primitive, syb, template-haskell, text, th-orphans, vector
4167+ }:
4168+ mkDerivation {
4169+ pname = "th-utilities";
4170+ version = "0.2.0.1";
4171+ sha256 = "1mki2s821b1zpdn5463qz5vl3kvxxam90iax1n6vznf0d7p4rik5";
4172+ libraryHaskellDepends = [
4173+ base bytestring containers directory filepath primitive syb
4174+ template-haskell text th-orphans
4175+ ];
4176+ testHaskellDepends = [
4177+ base bytestring containers directory filepath hspec primitive syb
4178+ template-haskell text th-orphans vector
4179+ ];
4180+ homepage = "https://github.com/fpco/th-utilities#readme";
4181+ description = "Collection of useful functions for use with Template Haskell";
4182+ license = stdenv.lib.licenses.mit;
4183+ }) {};
4184+ "time-locale-compat" = callPackage
4185+ ({ mkDerivation, base, time }:
4186+ mkDerivation {
4187+ pname = "time-locale-compat";
4188+ version = "0.1.1.4";
4189+ sha256 = "0qmyxf8nz0q6brvplc4s2wsb1bbpq7kb65b69m503g9bgranblgj";
4190+ configureFlags = [ "-f-old-locale" ];
4191+ libraryHaskellDepends = [ base time ];
4192+ homepage = "https://github.com/khibino/haskell-time-locale-compat";
4193+ description = "Compatibile module for time-format locale";
4194+ license = stdenv.lib.licenses.bsd3;
4195+ }) {};
4196+ "tls" = callPackage
4197+ ({ mkDerivation, asn1-encoding, asn1-types, async, base, bytestring
4198+ , cereal, criterion, cryptonite, data-default-class, hourglass
4199+ , memory, mtl, network, QuickCheck, tasty, tasty-quickcheck
4200+ , transformers, x509, x509-store, x509-validation
4201+ }:
4202+ mkDerivation {
4203+ pname = "tls";
4204+ version = "1.4.1";
4205+ sha256 = "1y083724mym28n6xfaz7pcc7zqxdhjpaxpbvzxfbs25qq2px3smv";
4206+ libraryHaskellDepends = [
4207+ asn1-encoding asn1-types async base bytestring cereal cryptonite
4208+ data-default-class memory mtl network transformers x509 x509-store
4209+ x509-validation
4210+ ];
4211+ testHaskellDepends = [
4212+ asn1-types base bytestring cereal cryptonite data-default-class
4213+ hourglass mtl QuickCheck tasty tasty-quickcheck x509
4214+ x509-validation
4215+ ];
4216+ benchmarkHaskellDepends = [
4217+ asn1-types base bytestring criterion cryptonite data-default-class
4218+ hourglass mtl QuickCheck tasty-quickcheck x509 x509-validation
4219+ ];
4220+ doCheck = false;
4221+ homepage = "http://github.com/vincenthz/hs-tls";
4222+ description = "TLS/SSL protocol native implementation (Server and Client)";
4223+ license = stdenv.lib.licenses.bsd3;
4224+ }) {};
4225+ "tls-session-manager" = callPackage
4226+ ({ mkDerivation, auto-update, base, clock, psqueues, tls }:
4227+ mkDerivation {
4228+ pname = "tls-session-manager";
4229+ version = "0.0.0.2";
4230+ sha256 = "0rvmln545vghsx8zhxp44f0f6pzma8cylarmfhhysy55ipywr1n5";
4231+ libraryHaskellDepends = [ auto-update base clock psqueues tls ];
4232+ description = "In-memory TLS session manager";
4233+ license = stdenv.lib.licenses.bsd3;
4234+ }) {};
4235+ "transformers-base" = callPackage
4236+ ({ mkDerivation, base, base-orphans, stm, transformers
4237+ , transformers-compat
4238+ }:
4239+ mkDerivation {
4240+ pname = "transformers-base";
4241+ version = "0.4.5.2";
4242+ sha256 = "1s256bi0yh0x2hp2gwd30f3mg1cv53zz397dv1yhfsnfzmihrj6h";
4243+ libraryHaskellDepends = [
4244+ base base-orphans stm transformers transformers-compat
4245+ ];
4246+ homepage = "https://github.com/mvv/transformers-base";
4247+ description = "Lift computations from the bottom of a transformer stack";
4248+ license = stdenv.lib.licenses.bsd3;
4249+ }) {};
4250+ "transformers-compat" = callPackage
4251+ ({ mkDerivation, base, ghc-prim, transformers }:
4252+ mkDerivation {
4253+ pname = "transformers-compat";
4254+ version = "0.6.2";
4255+ sha256 = "1gp4a8kvniwgm8947ghb4iwv4b7wd6ry4kvv4nfnym4agf5j41nw";
4256+ configureFlags = [ "-ffive-three" ];
4257+ libraryHaskellDepends = [ base ghc-prim transformers ];
4258+ homepage = "http://github.com/ekmett/transformers-compat/";
4259+ description = "A small compatibility shim for the transformers library";
4260+ license = stdenv.lib.licenses.bsd3;
4261+ }) {};
4262+ "typed-process" = callPackage
4263+ ({ mkDerivation, async, base, base64-bytestring, bytestring, hspec
4264+ , process, stm, temporary, transformers
4265+ }:
4266+ mkDerivation {
4267+ pname = "typed-process";
4268+ version = "0.2.2.0";
4269+ sha256 = "0c6gvgvjyncbni9a5bvpbglknd4yclr3d3hfg9bhgahmkj40dva2";
4270+ libraryHaskellDepends = [
4271+ async base bytestring process stm transformers
4272+ ];
4273+ testHaskellDepends = [
4274+ async base base64-bytestring bytestring hspec process stm temporary
4275+ transformers
4276+ ];
4277+ homepage = "https://haskell-lang.org/library/typed-process";
4278+ description = "Run external processes, with strong typing of streams";
4279+ license = stdenv.lib.licenses.mit;
4280+ }) {};
4281+ "unbounded-delays" = callPackage
4282+ ({ mkDerivation, base }:
4283+ mkDerivation {
4284+ pname = "unbounded-delays";
4285+ version = "0.1.1.0";
4286+ sha256 = "1ir9fghbrc214c97bwafk5ck6cacxz1pdnq4i18p604d1b8zg9wa";
4287+ libraryHaskellDepends = [ base ];
4288+ homepage = "https://github.com/basvandijk/unbounded-delays";
4289+ description = "Unbounded thread delays and timeouts";
4290+ license = stdenv.lib.licenses.bsd3;
4291+ }) {};
4292+ "unix-compat" = callPackage
4293+ ({ mkDerivation, base, unix }:
4294+ mkDerivation {
4295+ pname = "unix-compat";
4296+ version = "0.5.0.1";
4297+ sha256 = "1gdf3h2knbymkivm784vq51mbcyj5y91r480awyxj5cw8gh9kwn2";
4298+ libraryHaskellDepends = [ base unix ];
4299+ homepage = "http://github.com/jystic/unix-compat";
4300+ description = "Portable POSIX-compatibility layer";
4301+ license = stdenv.lib.licenses.bsd3;
4302+ }) {};
4303+ "unix-time" = callPackage
4304+ ({ mkDerivation, base, binary, bytestring, doctest, hspec
4305+ , old-locale, old-time, QuickCheck, time
4306+ }:
4307+ mkDerivation {
4308+ pname = "unix-time";
4309+ version = "0.3.8";
4310+ sha256 = "051slgpid5cxiaw203ky0ql3823h28fcjs08axkzd4265wrvv8fw";
4311+ libraryHaskellDepends = [ base binary bytestring old-time ];
4312+ testHaskellDepends = [
4313+ base bytestring doctest hspec old-locale old-time QuickCheck time
4314+ ];
4315+ description = "Unix time parser/formatter and utilities";
4316+ license = stdenv.lib.licenses.bsd3;
4317+ }) {};
4318+ "unliftio" = callPackage
4319+ ({ mkDerivation, async, base, deepseq, directory, filepath, hspec
4320+ , process, stm, time, transformers, unix, unliftio-core
4321+ }:
4322+ mkDerivation {
4323+ pname = "unliftio";
4324+ version = "0.2.7.0";
4325+ sha256 = "0qql93lq5w7qghl454cc3s1i8v1jb4h08n82fqkw0kli4g3g9njs";
4326+ libraryHaskellDepends = [
4327+ async base deepseq directory filepath process stm time transformers
4328+ unix unliftio-core
4329+ ];
4330+ testHaskellDepends = [
4331+ async base deepseq directory filepath hspec process stm time
4332+ transformers unix unliftio-core
4333+ ];
4334+ homepage = "https://github.com/fpco/unliftio/tree/master/unliftio#readme";
4335+ description = "The MonadUnliftIO typeclass for unlifting monads to IO (batteries included)";
4336+ license = stdenv.lib.licenses.mit;
4337+ }) {};
4338+ "unliftio-core" = callPackage
4339+ ({ mkDerivation, base, transformers }:
4340+ mkDerivation {
4341+ pname = "unliftio-core";
4342+ version = "0.1.1.0";
4343+ sha256 = "1193fplsjm1lcr05xwvkj1rsyzx74i755f6kw3ikmxbsv0bv0l3m";
4344+ revision = "1";
4345+ editedCabalFile = "16bjwcsaghqqmyi69rq65dn3ydifyfaabq3ns37apdm00mwqbcj2";
4346+ libraryHaskellDepends = [ base transformers ];
4347+ homepage = "https://github.com/fpco/unliftio/tree/master/unliftio-core#readme";
4348+ description = "The MonadUnliftIO typeclass for unlifting monads to IO";
4349+ license = stdenv.lib.licenses.mit;
4350+ }) {};
4351+ "unordered-containers" = callPackage
4352+ ({ mkDerivation, base, ChasingBottoms, containers, deepseq
4353+ , hashable, HUnit, QuickCheck, test-framework, test-framework-hunit
4354+ , test-framework-quickcheck2
4355+ }:
4356+ mkDerivation {
4357+ pname = "unordered-containers";
4358+ version = "0.2.9.0";
4359+ sha256 = "0l4264p0av12cc6i8gls13q8y27x12z2ar4x34n3x59y99fcnc37";
4360+ libraryHaskellDepends = [ base deepseq hashable ];
4361+ testHaskellDepends = [
4362+ base ChasingBottoms containers hashable HUnit QuickCheck
4363+ test-framework test-framework-hunit test-framework-quickcheck2
4364+ ];
4365+ homepage = "https://github.com/tibbe/unordered-containers";
4366+ description = "Efficient hashing-based container types";
4367+ license = stdenv.lib.licenses.bsd3;
4368+ }) {};
4369+ "utf8-string" = callPackage
4370+ ({ mkDerivation, base, bytestring }:
4371+ mkDerivation {
4372+ pname = "utf8-string";
4373+ version = "1.0.1.1";
4374+ sha256 = "0h7imvxkahiy8pzr8cpsimifdfvv18lizrb33k6mnq70rcx9w2zv";
4375+ revision = "3";
4376+ editedCabalFile = "02vhj5gykkqa2dyn7s6gn8is1b5fdn9xcqqvlls268g7cpv6rk38";
4377+ libraryHaskellDepends = [ base bytestring ];
4378+ homepage = "http://github.com/glguy/utf8-string/";
4379+ description = "Support for reading and writing UTF8 Strings";
4380+ license = stdenv.lib.licenses.bsd3;
4381+ }) {};
4382+ "uuid-types" = callPackage
4383+ ({ mkDerivation, base, binary, bytestring, deepseq, hashable
4384+ , random, text
4385+ }:
4386+ mkDerivation {
4387+ pname = "uuid-types";
4388+ version = "1.0.3";
4389+ sha256 = "1zdka5jnm1h6k36w3nr647yf3b5lqb336g3fkprhd6san9x52xlj";
4390+ revision = "1";
4391+ editedCabalFile = "0iwwj07gp28g357hv76k4h8pvlzamvchnw003cv3qk778pcpx201";
4392+ libraryHaskellDepends = [
4393+ base binary bytestring deepseq hashable random text
4394+ ];
4395+ doCheck = false;
4396+ homepage = "https://github.com/aslatter/uuid";
4397+ description = "Type definitions for Universally Unique Identifiers";
4398+ license = stdenv.lib.licenses.bsd3;
4399+ }) {};
4400+ "vault" = callPackage
4401+ ({ mkDerivation, base, containers, hashable, semigroups
4402+ , unordered-containers
4403+ }:
4404+ mkDerivation {
4405+ pname = "vault";
4406+ version = "0.3.1.1";
4407+ sha256 = "0a1fir7gvbj2w894daac5c4c3gy36r6c74yci78lb2nvk431b95j";
4408+ libraryHaskellDepends = [
4409+ base containers hashable semigroups unordered-containers
4410+ ];
4411+ homepage = "https://github.com/HeinrichApfelmus/vault";
4412+ description = "a persistent store for values of arbitrary types";
4413+ license = stdenv.lib.licenses.bsd3;
4414+ }) {};
4415+ "vector" = callPackage
4416+ ({ mkDerivation, base, deepseq, ghc-prim, primitive }:
4417+ mkDerivation {
4418+ pname = "vector";
4419+ version = "0.12.0.1";
4420+ sha256 = "0yrx2ypiaxahvaz84af5bi855hd3107kxkbqc8km29nsp5wyw05i";
4421+ revision = "3";
4422+ editedCabalFile = "0y5rh8k710i2a3p1h2rghvr5cfg78p5h0kbfi7ifxqqf6pzlyr1x";
4423+ libraryHaskellDepends = [ base deepseq ghc-prim primitive ];
4424+ doCheck = false;
4425+ homepage = "https://github.com/haskell/vector";
4426+ description = "Efficient Arrays";
4427+ license = stdenv.lib.licenses.bsd3;
4428+ }) {};
4429+ "vector-algorithms" = callPackage
4430+ ({ mkDerivation, base, bytestring, containers, primitive
4431+ , QuickCheck, vector
4432+ }:
4433+ mkDerivation {
4434+ pname = "vector-algorithms";
4435+ version = "0.7.0.1";
4436+ sha256 = "0w4hf598lpxfg58rnimcqxrbnpqq2jmpjx82qa5md3q6r90hlipd";
4437+ revision = "1";
4438+ editedCabalFile = "1996aj239vasr4hd5c0pi9i0bd08r6clzr76nqvf3hc5kjs7vml2";
4439+ isLibrary = true;
4440+ isExecutable = true;
4441+ libraryHaskellDepends = [ base bytestring primitive vector ];
4442+ testHaskellDepends = [
4443+ base bytestring containers QuickCheck vector
4444+ ];
4445+ doCheck = false;
4446+ homepage = "http://code.haskell.org/~dolio/";
4447+ description = "Efficient algorithms for vector arrays";
4448+ license = stdenv.lib.licenses.bsd3;
4449+ }) {};
4450+ "vector-binary-instances" = callPackage
4451+ ({ mkDerivation, base, binary, bytestring, criterion, deepseq
4452+ , tasty, tasty-quickcheck, vector
4453+ }:
4454+ mkDerivation {
4455+ pname = "vector-binary-instances";
4456+ version = "0.2.4";
4457+ sha256 = "1y236jb72iab9ska1mc48z6yb0xgwmj45laaqdyjxksd84z7hbrb";
4458+ revision = "1";
4459+ editedCabalFile = "196frl4akhfk7xf1nxzn8lmq99dxhzhsimanswn9yy7ym8zhki4i";
4460+ libraryHaskellDepends = [ base binary vector ];
4461+ testHaskellDepends = [ base binary tasty tasty-quickcheck vector ];
4462+ benchmarkHaskellDepends = [
4463+ base binary bytestring criterion deepseq vector
4464+ ];
4465+ homepage = "https://github.com/bos/vector-binary-instances";
4466+ description = "Instances of Data.Binary and Data.Serialize for vector";
4467+ license = stdenv.lib.licenses.bsd3;
4468+ }) {};
4469+ "vector-builder" = callPackage
4470+ ({ mkDerivation, base, base-prelude, semigroups, vector }:
4471+ mkDerivation {
4472+ pname = "vector-builder";
4473+ version = "0.3.4.1";
4474+ sha256 = "1dzbcm6br9cay28hz804n15bwdhbzhysd4hj0fa6ijfwmfb90r6i";
4475+ libraryHaskellDepends = [ base base-prelude semigroups vector ];
4476+ doCheck = false;
4477+ homepage = "https://github.com/nikita-volkov/vector-builder";
4478+ description = "Vector builder";
4479+ license = stdenv.lib.licenses.mit;
4480+ }) {};
4481+ "vector-instances" = callPackage
4482+ ({ mkDerivation, base, comonad, hashable, keys, pointed
4483+ , semigroupoids, semigroups, vector
4484+ }:
4485+ mkDerivation {
4486+ pname = "vector-instances";
4487+ version = "3.4";
4488+ sha256 = "10akvpa5w9bp0d8hflab63r9laa9gy2hv167smhjsdzq1kplc0hv";
4489+ libraryHaskellDepends = [
4490+ base comonad hashable keys pointed semigroupoids semigroups vector
4491+ ];
4492+ homepage = "http://github.com/ekmett/vector-instances";
4493+ description = "Orphan Instances for 'Data.Vector'";
4494+ license = stdenv.lib.licenses.bsd3;
4495+ }) {};
4496+ "vector-th-unbox" = callPackage
4497+ ({ mkDerivation, base, data-default, template-haskell, vector }:
4498+ mkDerivation {
4499+ pname = "vector-th-unbox";
4500+ version = "0.2.1.6";
4501+ sha256 = "0d82x55f5vvr1jvaia382m23rs690lg55pvavv8f4ph0y6kd91xy";
4502+ libraryHaskellDepends = [ base template-haskell vector ];
4503+ testHaskellDepends = [ base data-default vector ];
4504+ description = "Deriver for Data.Vector.Unboxed using Template Haskell";
4505+ license = stdenv.lib.licenses.bsd3;
4506+ }) {};
4507+ "void" = callPackage
4508+ ({ mkDerivation, base }:
4509+ mkDerivation {
4510+ pname = "void";
4511+ version = "0.7.2";
4512+ sha256 = "0aygw0yb1h3yhmfl3bkwh5d3h0l4mmsxz7j53vdm6jryl1kgxzyk";
4513+ libraryHaskellDepends = [ base ];
4514+ homepage = "http://github.com/ekmett/void";
4515+ description = "A Haskell 98 logically uninhabited data type";
4516+ license = stdenv.lib.licenses.bsd3;
4517+ }) {};
4518+ "wai" = callPackage
4519+ ({ mkDerivation, base, bytestring, hspec, hspec-discover
4520+ , http-types, network, text, transformers, vault
4521+ }:
4522+ mkDerivation {
4523+ pname = "wai";
4524+ version = "3.2.1.2";
4525+ sha256 = "0jr3b2789wa4m6mxkz12ynz4lfsqmgbrcy0am8karyqr3x3528r8";
4526+ libraryHaskellDepends = [
4527+ base bytestring http-types network text transformers vault
4528+ ];
4529+ testHaskellDepends = [ base bytestring hspec ];
4530+ testToolDepends = [ hspec-discover ];
4531+ homepage = "https://github.com/yesodweb/wai";
4532+ description = "Web Application Interface";
4533+ license = stdenv.lib.licenses.mit;
4534+ }) {};
4535+ "wai-conduit" = callPackage
4536+ ({ mkDerivation, base, bytestring, conduit, http-types
4537+ , transformers, wai
4538+ }:
4539+ mkDerivation {
4540+ pname = "wai-conduit";
4541+ version = "3.0.0.4";
4542+ sha256 = "07yn41rn2skd5p3wqqa09wa761vj7ibl8l19gh4bi4i8slxhk417";
4543+ libraryHaskellDepends = [
4544+ base bytestring conduit http-types transformers wai
4545+ ];
4546+ homepage = "https://github.com/yesodweb/wai";
4547+ description = "conduit wrappers for WAI";
4548+ license = stdenv.lib.licenses.mit;
4549+ }) {};
4550+ "warp" = callPackage
4551+ ({ mkDerivation, array, async, auto-update, base, bsb-http-chunked
4552+ , bytestring, case-insensitive, containers, directory, doctest
4553+ , gauge, ghc-prim, hashable, hspec, http-client, http-date
4554+ , http-types, http2, HUnit, iproute, lifted-base, network, process
4555+ , QuickCheck, silently, simple-sendfile, stm, streaming-commons
4556+ , text, time, transformers, unix, unix-compat, vault, wai, word8
4557+ }:
4558+ mkDerivation {
4559+ pname = "warp";
4560+ version = "3.2.23";
4561+ sha256 = "12v9qhi4hyp0sb90yddsax16jj7x47nmqwn53sv7b5nszcxgzam0";
4562+ libraryHaskellDepends = [
4563+ array async auto-update base bsb-http-chunked bytestring
4564+ case-insensitive containers ghc-prim hashable http-date http-types
4565+ http2 iproute network simple-sendfile stm streaming-commons text
4566+ unix unix-compat vault wai word8
4567+ ];
4568+ testHaskellDepends = [
4569+ array async auto-update base bsb-http-chunked bytestring
4570+ case-insensitive containers directory doctest ghc-prim hashable
4571+ hspec http-client http-date http-types http2 HUnit iproute
4572+ lifted-base network process QuickCheck silently simple-sendfile stm
4573+ streaming-commons text time transformers unix unix-compat vault wai
4574+ word8
4575+ ];
4576+ benchmarkHaskellDepends = [
4577+ auto-update base bytestring containers gauge hashable http-date
4578+ http-types network unix unix-compat
4579+ ];
4580+ homepage = "http://github.com/yesodweb/wai";
4581+ description = "A fast, light-weight web server for WAI applications";
4582+ license = stdenv.lib.licenses.mit;
4583+ }) {};
4584+ "warp-tls" = callPackage
4585+ ({ mkDerivation, base, bytestring, cryptonite, data-default-class
4586+ , network, streaming-commons, tls, tls-session-manager, wai, warp
4587+ }:
4588+ mkDerivation {
4589+ pname = "warp-tls";
4590+ version = "3.2.4.3";
4591+ sha256 = "17gj295fr98l7mkz2gdz6kahdnmja0sql3kvy2zab6q168g53kc4";
4592+ libraryHaskellDepends = [
4593+ base bytestring cryptonite data-default-class network
4594+ streaming-commons tls tls-session-manager wai warp
4595+ ];
4596+ homepage = "http://github.com/yesodweb/wai";
4597+ description = "HTTP over TLS support for Warp via the TLS package";
4598+ license = stdenv.lib.licenses.mit;
4599+ }) {};
4600+ "wcwidth" = callPackage
4601+ ({ mkDerivation, base, containers }:
4602+ mkDerivation {
4603+ pname = "wcwidth";
4604+ version = "0.0.2";
4605+ sha256 = "1n1fq7v64b59ajf5g50iqj9sa34wm7s2j3viay0kxpmvlcv8gipz";
4606+ isLibrary = true;
4607+ isExecutable = true;
4608+ libraryHaskellDepends = [ base containers ];
4609+ homepage = "http://github.com/solidsnack/wcwidth/";
4610+ description = "Native wcwidth";
4611+ license = stdenv.lib.licenses.bsd3;
4612+ }) {};
4613+ "weigh" = callPackage
4614+ ({ mkDerivation, base, deepseq, mtl, process, split, temporary }:
4615+ mkDerivation {
4616+ pname = "weigh";
4617+ version = "0.0.12";
4618+ sha256 = "0zw2a997gxgdzqmd7j730kxgynzmjvvlkw84dajmfzf1v9pbij7x";
4619+ libraryHaskellDepends = [
4620+ base deepseq mtl process split temporary
4621+ ];
4622+ testHaskellDepends = [ base deepseq ];
4623+ homepage = "https://github.com/fpco/weigh#readme";
4624+ description = "Measure allocations of a Haskell functions/values";
4625+ license = stdenv.lib.licenses.bsd3;
4626+ }) {};
4627+ "with-location" = callPackage
4628+ ({ mkDerivation, base, hspec }:
4629+ mkDerivation {
4630+ pname = "with-location";
4631+ version = "0.1.0";
4632+ sha256 = "1rzxvsyh8x3ql3zh7gyw9hjx9bl4v73h0y5kzgaxcfcdn86dg49c";
4633+ libraryHaskellDepends = [ base ];
4634+ testHaskellDepends = [ base hspec ];
4635+ homepage = "https://github.com/sol/with-location#readme";
4636+ description = "Use ImplicitParams-based source locations in a backward compatible way";
4637+ license = stdenv.lib.licenses.mit;
4638+ }) {};
4639+ "wl-pprint-annotated" = callPackage
4640+ ({ mkDerivation, base, containers, deepseq, tasty, tasty-hunit
4641+ , text
4642+ }:
4643+ mkDerivation {
4644+ pname = "wl-pprint-annotated";
4645+ version = "0.1.0.0";
4646+ sha256 = "0c2996x5gdrif1l0lfwlqnka7xp5diac74rckv0jasv2i0333kmp";
4647+ libraryHaskellDepends = [ base containers deepseq text ];
4648+ testHaskellDepends = [
4649+ base containers deepseq tasty tasty-hunit text
4650+ ];
4651+ homepage = "https://github.com/minad/wl-pprint-annotated#readme";
4652+ description = "Wadler/Leijen pretty printer with annotations and slightly modernized API";
4653+ license = stdenv.lib.licenses.bsd3;
4654+ }) {};
4655+ "word8" = callPackage
4656+ ({ mkDerivation, base, bytestring, criterion, hspec }:
4657+ mkDerivation {
4658+ pname = "word8";
4659+ version = "0.1.3";
4660+ sha256 = "12jx7f13d2h1djq4fh4dyrab61sm49mj1w61j3rzp2vjfm696c16";
4661+ libraryHaskellDepends = [ base ];
4662+ testHaskellDepends = [ base hspec ];
4663+ benchmarkHaskellDepends = [ base bytestring criterion ];
4664+ description = "Word8 library";
4665+ license = stdenv.lib.licenses.bsd3;
4666+ }) {};
4667+ "x509" = callPackage
4668+ ({ mkDerivation, asn1-encoding, asn1-parse, asn1-types, base
4669+ , bytestring, containers, cryptonite, hourglass, memory, mtl, pem
4670+ , tasty, tasty-quickcheck
4671+ }:
4672+ mkDerivation {
4673+ pname = "x509";
4674+ version = "1.7.3";
4675+ sha256 = "0mkk29g32fs70bqkikg83v45h9jig9c8aail3mrdqwxpkfa0yx21";
4676+ revision = "1";
4677+ editedCabalFile = "06zzirygvzp0ssdg9blipdwmd0b41p4gxh3ldai7ngjyjsdclwsx";
4678+ libraryHaskellDepends = [
4679+ asn1-encoding asn1-parse asn1-types base bytestring containers
4680+ cryptonite hourglass memory mtl pem
4681+ ];
4682+ testHaskellDepends = [
4683+ asn1-types base bytestring cryptonite hourglass mtl tasty
4684+ tasty-quickcheck
4685+ ];
4686+ homepage = "http://github.com/vincenthz/hs-certificate";
4687+ description = "X509 reader and writer";
4688+ license = stdenv.lib.licenses.bsd3;
4689+ }) {};
4690+ "x509-store" = callPackage
4691+ ({ mkDerivation, asn1-encoding, asn1-types, base, bytestring
4692+ , containers, cryptonite, directory, filepath, mtl, pem, tasty
4693+ , tasty-hunit, x509
4694+ }:
4695+ mkDerivation {
4696+ pname = "x509-store";
4697+ version = "1.6.6";
4698+ sha256 = "0dbndqmnmyixxc7308nyq3zlkhz9dff4rbcw2a49c77rbicny9va";
4699+ libraryHaskellDepends = [
4700+ asn1-encoding asn1-types base bytestring containers cryptonite
4701+ directory filepath mtl pem x509
4702+ ];
4703+ testHaskellDepends = [ base bytestring tasty tasty-hunit x509 ];
4704+ homepage = "http://github.com/vincenthz/hs-certificate";
4705+ description = "X.509 collection accessing and storing methods";
4706+ license = stdenv.lib.licenses.bsd3;
4707+ }) {};
4708+ "x509-system" = callPackage
4709+ ({ mkDerivation, base, bytestring, containers, directory, filepath
4710+ , mtl, pem, process, x509, x509-store
4711+ }:
4712+ mkDerivation {
4713+ pname = "x509-system";
4714+ version = "1.6.6";
4715+ sha256 = "06a4m9c7vlr9nhp9gmqbb46arf0yj1dkdm4nip03hzy67spdmp20";
4716+ libraryHaskellDepends = [
4717+ base bytestring containers directory filepath mtl pem process x509
4718+ x509-store
4719+ ];
4720+ homepage = "http://github.com/vincenthz/hs-certificate";
4721+ description = "Handle per-operating-system X.509 accessors and storage";
4722+ license = stdenv.lib.licenses.bsd3;
4723+ }) {};
4724+ "x509-validation" = callPackage
4725+ ({ mkDerivation, asn1-encoding, asn1-types, base, bytestring
4726+ , containers, cryptonite, data-default-class, hourglass, memory
4727+ , mtl, pem, tasty, tasty-hunit, x509, x509-store
4728+ }:
4729+ mkDerivation {
4730+ pname = "x509-validation";
4731+ version = "1.6.10";
4732+ sha256 = "1ms51scawldgyfcim5a2qlgyn3rnrclyh205d6djaa1569vrs73n";
4733+ revision = "1";
4734+ editedCabalFile = "1isap8v1gh31q4pj3gn155ya8nd1da0a5a3cryqh4yhf0ivbwl0w";
4735+ libraryHaskellDepends = [
4736+ asn1-encoding asn1-types base bytestring containers cryptonite
4737+ data-default-class hourglass memory mtl pem x509 x509-store
4738+ ];
4739+ testHaskellDepends = [
4740+ asn1-encoding asn1-types base bytestring cryptonite
4741+ data-default-class hourglass tasty tasty-hunit x509 x509-store
4742+ ];
4743+ homepage = "http://github.com/vincenthz/hs-certificate";
4744+ description = "X.509 Certificate and CRL validation";
4745+ license = stdenv.lib.licenses.bsd3;
4746+ }) {};
4747+ "xml" = callPackage
4748+ ({ mkDerivation, base, bytestring, text }:
4749+ mkDerivation {
4750+ pname = "xml";
4751+ version = "1.3.14";
4752+ sha256 = "0g814lj7vaxvib2g3r734221k80k7ap9czv9hinifn8syals3l9j";
4753+ libraryHaskellDepends = [ base bytestring text ];
4754+ homepage = "http://code.galois.com";
4755+ description = "A simple XML library";
4756+ license = stdenv.lib.licenses.bsd3;
4757+ }) {};
4758+ "xml-conduit" = callPackage
4759+ ({ mkDerivation, attoparsec, base, blaze-html, blaze-markup
4760+ , bytestring, conduit, conduit-extra, containers
4761+ , data-default-class, deepseq, hspec, HUnit, monad-control
4762+ , resourcet, text, transformers, xml-types
4763+ }:
4764+ mkDerivation {
4765+ pname = "xml-conduit";
4766+ version = "1.8.0";
4767+ sha256 = "0di0ll2p4ykqnlipf2jrlalirxdf9wkli292245rgr3vcb9vz0h3";
4768+ libraryHaskellDepends = [
4769+ attoparsec base blaze-html blaze-markup bytestring conduit
4770+ conduit-extra containers data-default-class deepseq monad-control
4771+ resourcet text transformers xml-types
4772+ ];
4773+ testHaskellDepends = [
4774+ base blaze-markup bytestring conduit containers hspec HUnit
4775+ resourcet text transformers xml-types
4776+ ];
4777+ homepage = "http://github.com/snoyberg/xml";
4778+ description = "Pure-Haskell utilities for dealing with XML with the conduit package";
4779+ license = stdenv.lib.licenses.mit;
4780+ }) {};
4781+ "xml-types" = callPackage
4782+ ({ mkDerivation, base, deepseq, text }:
4783+ mkDerivation {
4784+ pname = "xml-types";
4785+ version = "0.3.6";
4786+ sha256 = "1jgqxsa9p2q3h6nymbfmvhldqrqlwrhrzmwadlyc0li50x0d8dwr";
4787+ libraryHaskellDepends = [ base deepseq text ];
4788+ homepage = "https://john-millikin.com/software/haskell-xml/";
4789+ description = "Basic types for representing XML";
4790+ license = stdenv.lib.licenses.mit;
4791+ }) {};
4792+ "yaml" = callPackage
4793+ ({ mkDerivation, aeson, attoparsec, base, base-compat, bytestring
4794+ , conduit, containers, directory, filepath, hspec, HUnit, mockery
4795+ , resourcet, scientific, semigroups, template-haskell, temporary
4796+ , text, transformers, unordered-containers, vector
4797+ }:
4798+ mkDerivation {
4799+ pname = "yaml";
4800+ version = "0.8.32";
4801+ sha256 = "0cbsyh4ilvjzq1q7pxls43k6pdqxg1l85xzibcwpbvmlvrizh86w";
4802+ isLibrary = true;
4803+ isExecutable = true;
4804+ libraryHaskellDepends = [
4805+ aeson attoparsec base bytestring conduit containers directory
4806+ filepath resourcet scientific semigroups template-haskell text
4807+ transformers unordered-containers vector
4808+ ];
4809+ testHaskellDepends = [
4810+ aeson attoparsec base base-compat bytestring conduit containers
4811+ directory filepath hspec HUnit mockery resourcet scientific
4812+ semigroups template-haskell temporary text transformers
4813+ unordered-containers vector
4814+ ];
4815+ homepage = "https://github.com/snoyberg/yaml#readme";
4816+ description = "Support for parsing and rendering YAML documents";
4817+ license = stdenv.lib.licenses.bsd3;
4818+ }) {};
4819+ "zlib" = callPackage
4820+ ({ mkDerivation, base, bytestring, zlib }:
4821+ mkDerivation {
4822+ pname = "zlib";
4823+ version = "0.6.2";
4824+ sha256 = "1vbzf0awb6zb456xf48za1kl22018646cfzq4frvxgb9ay97vk0d";
4825+ libraryHaskellDepends = [ base bytestring ];
4826+ librarySystemDepends = [ zlib ];
4827+ doCheck = false;
4828+ description = "Compression and decompression in the gzip and zlib formats";
4829+ license = stdenv.lib.licenses.bsd3;
4830+ }) {inherit (pkgs) zlib;};
4831+
4832+}
nix/lib.nixnew file+60
@@ -0,0 +1,60 @@
1+{ stdenv, cacert, git, curl, lndir, runCommand
2+, _cacheVersion ? "0" }:
3+
4+rec {
5+ hackage-db = stdenv.mkDerivation {
6+ name = "hackage-db";
7+ version = _cacheVersion;
8+ phases = [ "installPhase" ];
9+ buildInputs = [ curl ];
10+ installPhase = ''
11+ mkdir -p $out
12+ pushd $out
13+ curl -o 01-index.tar.gz https://hackage.haskell.org/01-index.tar.gz
14+ gunzip --keep 01-index.tar.gz
15+ popd
16+ '';
17+ SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
18+ };
19+ all-cabal-hashes = stdenv.mkDerivation rec {
20+ name = "all-cabal-hashes";
21+ version = _cacheVersion;
22+ phases = [ "installPhase" ];
23+ buildInputs = [ git ];
24+ installPhase = ''
25+ mkdir -p $out
26+ git clone --bare --branch hackage https://github.com/commercialhaskell/all-cabal-hashes.git $out
27+ '';
28+ SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
29+ };
30+ stackage-lts = stdenv.mkDerivation {
31+ name = "stackage-lts";
32+ version = _cacheVersion;
33+ phases = [ "installPhase" ];
34+ buildInputs = [ git ];
35+ installPhase = ''
36+ mkdir -p $out
37+ git clone --depth 1 https://github.com/fpco/lts-haskell.git $out
38+ '';
39+ SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
40+ };
41+ stackage-nightly = stdenv.mkDerivation {
42+ name = "stackage-nightly";
43+ version = _cacheVersion;
44+ phases = [ "installPhase" ];
45+ buildInputs = [ git ];
46+ installPhase = ''
47+ mkdir -p $out
48+ git clone --depth 1 https://github.com/fpco/stackage-nightly.git $out
49+ '';
50+ SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
51+ };
52+ stackage-all = runCommand "stackage-all"
53+ {nativeBuildInputs = [ stackage-nightly stackage-lts lndir ];}
54+ ''
55+ mkdir $out
56+ for i in ${stackage-nightly} ${stackage-lts}; do
57+ lndir -silent $i $out
58+ done
59+ '';
60+}
nix/stackage2nix/default.nixnew file+22
@@ -0,0 +1,22 @@
1+{ nixpkgs ? import <nixpkgs> {} }:
2+
3+with nixpkgs;
4+let
5+ lib = callPackage ../lib.nix {};
6+ haskellPackages = import ../haskell-packages { inherit nixpkgs; };
7+in stdenv.mkDerivation rec {
8+ name = "stackage2nix-${version}";
9+ version = haskellPackages.stackage2nix.version;
10+ phases = [ "installPhase" "fixupPhase" ];
11+ buildInputs = [ makeWrapper ];
12+
13+ installPhase = ''
14+ mkdir -p $out/bin
15+ makeWrapper ${haskellPackages.stackage2nix}/bin/stackage2nix $out/bin/stackage2nix \
16+ --add-flags "--all-cabal-hashes ${lib.all-cabal-hashes}" \
17+ --add-flags "--lts-haskell ${lib.stackage-all}" \
18+ --add-flags "--hackage-db ${lib.hackage-db}/01-index.tar" \
19+ --prefix PATH ":" "${nix}/bin" \
20+ --prefix PATH ":" "${nix-prefetch-scripts}/bin"
21+ '';
22+}
src/AllCabalHashes.hsnew file+88
@@ -0,0 +1,88 @@
1+module AllCabalHashes where
2+
3+import Control.Lens hiding ((<.>))
4+import Data.Aeson as A
5+import Data.ByteString as BS
6+import Data.ByteString.Char8 as B8
7+import Data.Map as M
8+import Data.Tagged (Tagged(..))
9+import Data.Text as T
10+import Distribution.Nixpkgs.Hashes as NH
11+import Distribution.Package
12+import Distribution.PackageDescription
13+import Distribution.PackageDescription.Parsec
14+import Distribution.Text ( display )
15+import Git
16+import Git.Libgit2 as Libgit2
17+import OpenSSL.Digest as SSL ( digest, digestByName )
18+import System.FilePath
19+
20+
21+type SHA1Hash = T.Text
22+type SHA256Hash = String
23+
24+data Meta = Meta
25+ { _mHashes :: !(Map String String)
26+ , _mLocations :: ![String]
27+ , _mPkgsize :: !Int
28+ } deriving (Show)
29+
30+makeLenses ''Meta
31+
32+instance FromJSON Meta where
33+ parseJSON (Object v) = Meta
34+ <$> v .: "package-hashes"
35+ <*> v .: "package-locations"
36+ <*> v .: "package-size"
37+ parseJSON o = fail ("invalid Cabal metadata: " ++ show o)
38+
39+readPackageByHash :: FilePath -> SHA1Hash -> IO (GenericPackageDescription, SHA256Hash)
40+readPackageByHash repoDir sha1Hash = do
41+ let repoOpts = defaultRepositoryOptions { repoPath = repoDir }
42+ repo <- openLgRepository repoOpts
43+ buf <- runLgRepository repo $ do
44+ oid <- parseOid sha1Hash
45+ catBlob (Tagged oid)
46+ parseCabal ("Git SHA1 " ++ show sha1Hash) buf
47+
48+readPackageByName :: FilePath -> PackageIdentifier -> IO (GenericPackageDescription, SHA256Hash)
49+readPackageByName repoDir (PackageIdentifier name version) = do
50+ let cabalFile = unPackageName name </> display version </> unPackageName name <.> "cabal"
51+ let repoOpts = defaultRepositoryOptions { repoPath = repoDir }
52+ repo <- openLgRepository repoOpts
53+ buf <- runLgRepository repo $ do
54+ headCommit <- resolveReference "HEAD" >>= \case
55+ Nothing -> fail "Failed to parse HEAD ref"
56+ Just oid -> lookupCommit $ Tagged oid
57+ blobOid <- commitTreeEntry headCommit (B8.pack cabalFile) >>= \case
58+ Nothing -> fail (cabalFile ++ ": no such file at HEAD")
59+ Just (BlobEntry oid PlainBlob) -> pure oid
60+ Just (BlobEntry _ _) -> fail (cabalFile ++ " is not a plain blob")
61+ _ -> fail (cabalFile ++ " points to a non-blob!")
62+ catBlob blobOid
63+ parseCabal cabalFile buf
64+
65+parseCabal :: String -> BS.ByteString -> IO (GenericPackageDescription, SHA256Hash)
66+parseCabal what blob = do
67+ cabal <- let (_, res) = runParseResult (parseGenericPackageDescription blob)
68+ in case res of Right a -> return a
69+ Left (_, err) -> fail (what ++ ": " ++ show err)
70+ let
71+ hash = NH.printSHA256 (SSL.digest (SSL.digestByName "sha256") blob)
72+ pkg = setCabalFileHash hash cabal
73+ return (pkg, hash)
74+
75+setCabalFileHash :: SHA256Hash -> GenericPackageDescription -> GenericPackageDescription
76+setCabalFileHash hash cabal = cabal
77+ { packageDescription = (packageDescription cabal)
78+ { customFieldsPD = ("X-Cabal-File-Hash", hash) : customFieldsPD (packageDescription cabal)
79+ }
80+ }
81+
82+readPackageMeta :: FilePath -> PackageIdentifier -> IO Meta
83+readPackageMeta dirPrefix (PackageIdentifier name version) = do
84+ let metaFile = dirPrefix </> unPackageName name </> display version </> unPackageName name <.> "json"
85+ buf <- BS.readFile metaFile
86+ case eitherDecodeStrict buf of
87+ Left msg -> fail (metaFile ++ ": " ++ msg)
88+ Right x -> return $ over (mHashes . ix "SHA256") (printSHA256 . packHex) x
src/Distribution/Nixpkgs/Haskell/FromStack.hsnew file+101
@@ -0,0 +1,101 @@
1+module Distribution.Nixpkgs.Haskell.FromStack where
2+
3+import AllCabalHashes
4+import Control.Lens
5+import Data.Set.Lens
6+import Distribution.Compiler (CompilerInfo(..))
7+import Distribution.System (Platform(..))
8+import Distribution.Package (PackageName, PackageIdentifier(..), Dependency(..))
9+import Distribution.PackageDescription
10+import Distribution.Nixpkgs.Haskell.FromStack.Package
11+import Distribution.Nixpkgs.Haskell.PackageSourceSpec
12+import Distribution.Nixpkgs.Haskell.FromCabal
13+import Distribution.Nixpkgs.Haskell.Derivation
14+import Stackage.BuildPlan
15+import Stackage.Types (CabalFileInfo(..),PackageConstraints(..), DepInfo(..), SimpleDesc(..), TestState(..))
16+import qualified Distribution.Nixpkgs.Meta as Nix
17+
18+import qualified Data.Map as Map
19+import qualified Data.Set as Set
20+
21+data PackageSetConfig = PackageSetConfig
22+ { haskellResolver :: HaskellResolver
23+ , nixpkgsResolver :: NixpkgsResolver
24+ , packageLoader :: Maybe SHA1Hash -> PackageIdentifier -> IO Package
25+ , targetPlatform :: Platform
26+ , targetCompiler :: CompilerInfo }
27+
28+data PackageConfig = PackageConfig
29+ { enableCheck :: Bool
30+ , enableHaddock :: Bool }
31+
32+removeTests :: GenericPackageDescription -> GenericPackageDescription
33+removeTests gd = gd { condTestSuites = [] }
34+
35+removeBenches :: GenericPackageDescription -> GenericPackageDescription
36+removeBenches gd = gd { condBenchmarks = [] }
37+
38+planDependencies :: PackagePlan -> [Dependency]
39+planDependencies = map makeDependency . Map.toList . sdPackages . ppDesc
40+ where
41+ makeDependency (name, depInfo) = Dependency name (diRange depInfo)
42+
43+buildNode :: PackageSetConfig -> PackageConfig -> PackageName -> PackagePlan -> IO Node
44+buildNode conf pconf name plan = do
45+ let
46+ cabalHashes = maybe mempty cfiHashes $ ppCabalFileInfo plan
47+ mGitSha1 = Map.lookup "GitSHA1" cabalHashes
48+ pkg <- packageLoader conf mGitSha1 $ PackageIdentifier name (ppVersion plan)
49+ pure . mkNode $ fromPackage conf pconf plan pkg
50+
51+fromPackage :: PackageSetConfig -> PackageConfig -> PackagePlan -> Package -> Derivation
52+fromPackage conf pconf plan pkg =
53+ let
54+ constraints = ppConstraints plan
55+ testsEnabled =
56+ pcTests constraints == ExpectSuccess
57+ haddocksEnabled =
58+ pcHaddocks constraints == ExpectSuccess &&
59+ not (Set.null (sdModules (ppDesc plan)))
60+ configureTests
61+ | pcTests constraints == Don'tBuild = removeTests
62+ | otherwise = id
63+ configureBenches
64+ | pcBenches constraints == Don'tBuild = removeBenches
65+ | otherwise = id
66+ flags = Map.toList (pcFlagOverrides constraints)
67+ (descr, missingDeps) = finalizeGenericPackageDescription
68+ (haskellResolver conf)
69+ (targetPlatform conf)
70+ (targetCompiler conf)
71+ (mkFlagAssignment flags)
72+ (planDependencies plan)
73+ (configureBenches . configureTests $ pkgCabal pkg)
74+ genericDrv = fromPackageDescription
75+ (haskellResolver conf)
76+ (nixpkgsResolver conf)
77+ missingDeps
78+ (mkFlagAssignment flags)
79+ descr
80+ depName (Dependency name _) = name
81+ testDeps = setOf
82+ ( to testSuites . folded
83+ . to testBuildInfo . to targetBuildDepends
84+ . folded . to depName )
85+ hasIntersection a b = not . null $ Set.intersection a b
86+ brokenEnabled =
87+ testsEnabled &&
88+ not (null missingDeps) &&
89+ setOf (folded . to depName) missingDeps `hasIntersection` testDeps descr
90+ in finalizePackage pkg pconf
91+ $ genericDrv
92+ & doCheck .~ testsEnabled
93+ & runHaddock .~ haddocksEnabled
94+ & metaSection . Nix.broken .~ brokenEnabled
95+
96+finalizePackage :: Package -> PackageConfig -> Derivation -> Derivation
97+finalizePackage pkg pconf drv = drv
98+ & src .~ pkgSource pkg
99+ & doCheck &&~ enableCheck pconf
100+ & testDepends %~ (if enableCheck pconf then id else const mempty)
101+ & runHaddock &&~ enableHaddock pconf
src/Distribution/Nixpkgs/Haskell/FromStack/Package.hsnew file+151
@@ -0,0 +1,151 @@
1+module Distribution.Nixpkgs.Haskell.FromStack.Package where
2+
3+import Control.Lens
4+import Data.Foldable as F
5+import Data.Function (on)
6+import Data.Graph (Graph, Vertex)
7+import Data.Maybe
8+import Data.Ord as O
9+import Distribution.Text (display, disp)
10+import Distribution.Package (unPackageName, packageName)
11+import Distribution.Nixpkgs.Haskell.BuildInfo
12+import Distribution.Nixpkgs.Haskell.Derivation
13+import Language.Nix.PrettyPrinting (onlyIf)
14+import Language.Nix as Nix
15+import Stackage.Types (SystemInfo(..))
16+import Text.PrettyPrint.HughesPJClass hiding ((<>))
17+
18+
19+import qualified Data.Graph as Graph
20+import qualified Data.Map as Map
21+import qualified Data.Set as Set
22+
23+data Node = Node
24+ { _nodeDerivation :: Derivation
25+ , _nodeTestDepends :: Set.Set String
26+ , _nodeBenchmarkDepends :: Set.Set String
27+ , _nodeExecutableDepends :: Set.Set String
28+ , _nodeSetupDepends :: Set.Set String
29+ , _nodeOtherDepends :: Set.Set String }
30+
31+makeLenses ''Node
32+
33+instance Eq Node where
34+ (==) = (==) `on` nodeName
35+
36+instance Ord Node where
37+ compare = compare `on` nodeName
38+
39+mkNode :: Derivation -> Node
40+mkNode _nodeDerivation = Node{..}
41+ where
42+ haskellDependencies s = Set.map (view (localName . ident))
43+ . Set.filter isFromHackage
44+ $ view (s . (haskell <> tool)) _nodeDerivation
45+ _nodeTestDepends = haskellDependencies testDepends
46+ _nodeBenchmarkDepends = haskellDependencies benchmarkDepends
47+ _nodeExecutableDepends = haskellDependencies executableDepends
48+ _nodeSetupDepends = haskellDependencies setupDepends
49+ _nodeOtherDepends = haskellDependencies (executableDepends <> libraryDepends)
50+
51+nodeName :: Node -> String
52+nodeName = unPackageName . packageName . view (nodeDerivation . pkgid)
53+
54+nodeCycleDepends :: Node -> Set.Set String
55+nodeCycleDepends = _nodeTestDepends <> _nodeOtherDepends
56+
57+nodeDepends :: Node -> Set.Set String
58+nodeDepends = _nodeTestDepends
59+ <> _nodeOtherDepends
60+ <> _nodeBenchmarkDepends
61+ <> _nodeExecutableDepends
62+ <> _nodeSetupDepends
63+
64+findCycles :: [Node] -> [[Node]]
65+findCycles nodes = mapMaybe cyclic $
66+ Graph.stronglyConnComp [(node, nodeName node, Set.toList $ nodeCycleDepends node) | node <- nodes]
67+ where
68+ cyclic (Graph.AcyclicSCC _) = Nothing
69+ cyclic (Graph.CyclicSCC c) = Just c
70+
71+breakCycle :: [Node] -> [String]
72+breakCycle [] = []
73+breakCycle c = nodeName breaker : concatMap breakCycle (findCycles remaining)
74+ where
75+ breaker = F.maximumBy (O.comparing rate) c
76+ remaining = map updateNode c
77+ updateNode n
78+ | nodeName n == nodeName breaker = n & nodeTestDepends .~ mempty
79+ | otherwise = n
80+ names = Set.fromList $ map nodeName c
81+ rate node = - Set.size (view nodeOtherDepends node `Set.intersection` names)
82+
83+type FromVertex = Vertex -> (Node, String, [String])
84+type FromKey = String -> Maybe Vertex
85+
86+buildNodeGraph :: [Node] -> (Graph, FromVertex, FromKey)
87+buildNodeGraph nodes = Graph.graphFromEdges
88+ [(node, nodeName node, Set.toList $ nodeDepends node) | node <- nodes]
89+
90+reachableDependencies :: [Node] -> [Node] -> Set.Set Node
91+reachableDependencies keyNodes nodes = Set.map (view _1 . fromVertex) reachableVerticesS
92+ where
93+ (graph, fromVertex, fromKey) = buildNodeGraph nodes
94+ keys = mapMaybe (fromKey . nodeName) keyNodes
95+ reachableVerticesS = F.foldr1 Set.union
96+ $ (Set.fromList . F.toList) <$> Graph.dfs graph keys
97+
98+-- pretty printing
99+
100+isFromHackage :: Binding -> Bool
101+isFromHackage b = case view (reference . Nix.path) b of
102+ ["self",_] -> True
103+ _ -> False
104+
105+
106+pPrintOutConfig :: SystemInfo -> [Node] -> Doc
107+pPrintOutConfig systemInfo nodes = vcat
108+ [ "{ pkgs, haskellLib }:"
109+ , ""
110+ , "with haskellLib; self: super: {"
111+ , ""
112+ , " # core packages"
113+ , nest 2 $ vcat $
114+ Map.toList (siCorePackages systemInfo) <&> \(pkg, _version) ->
115+ onlyIf (pkg /= "ghc")
116+ $ hsep [doubleQuotes (text (display pkg)), equals, text "null"] <> semi
117+ , ""
118+ , nest 2 $ vcat $ pPrintBreakCycle <$> findCycles nodes
119+ , ""
120+ , "}"
121+ ]
122+
123+pPrintBreakCycle :: [Node] -> Doc
124+pPrintBreakCycle c = vcat
125+ [ text $ "# break cycle: " ++ unwords (map nodeName c)
126+ , vcat $ breakCycle c <&> \breaker ->
127+ hsep [doubleQuotes (text breaker), equals, text "dontCheck", text "super." <> text breaker] <> semi
128+ ]
129+
130+pPrintOutPackages :: [Derivation] -> Doc
131+pPrintOutPackages drvs = vcat
132+ [ "{ pkgs, stdenv, callPackage }:"
133+ , ""
134+ , "self: {"
135+ , ""
136+ , nest 2 $ vcat (pPrintPackageOverride <$> drvs)
137+ , ""
138+ , "}"
139+ ]
140+
141+pPrintPackageOverride :: Derivation -> Doc
142+pPrintPackageOverride drv =
143+ let
144+ name = drv ^. pkgid . to packageName
145+ overrides = fsep
146+ [ disp bind <> semi
147+ | bind <- Set.toList $ view (dependencies . each <> extraFunctionArgs) drv
148+ , not $ isFromHackage bind ]
149+ in
150+ hang (hsep [doubleQuotes (text (display name)), equals, text "callPackage"]) 2
151+ $ parens (pPrint drv) <+> (braces overrides <> semi)
src/Distribution/Nixpkgs/Haskell/Packages/PrettyPrinting.hs+2
@@ -2,6 +2,8 @@ module Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting where
22
33import Language.Nix.PrettyPrinting
44
5+import Prelude hiding ((<>))
6+
57compilerConfig :: Doc -> Doc
68compilerConfig body =
79 funargsCurried ["self", "super"] <+> body
src/Distribution/Nixpkgs/Haskell/Stack.hs+54−70
@@ -1,111 +1,95 @@
11module Distribution.Nixpkgs.Haskell.Stack where
22
33import Control.Lens
4+import Data.Maybe (fromMaybe)
45import Data.Text as T
56import Distribution.Compiler as Compiler
67import Distribution.Nixpkgs.Fetch
78import Distribution.Nixpkgs.Haskell.Derivation
89import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
9−import Distribution.Nixpkgs.Haskell.FromStack.Package as FromStack
10+import Distribution.Nixpkgs.Haskell.FromStack as FromStack
11+import Distribution.Nixpkgs.Haskell.Hackage as DB
1012import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
1113import Distribution.PackageDescription as PackageDescription
1214import Distribution.System as System
13−import Language.Nix as Nix
1415import Network.URI as URI
1516import Stack.Config
1617
17−newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
18− deriving (Eq, Ord, Show)
1918
20−makePrisms ''HackageDb
2119
22−unHackageDb :: HackageDb -> String
23−unHackageDb = T.unpack . fromHackageDB
24−
25−data PackageConfig = PackageConfig
26− { _pcHaskellResolver :: !HaskellResolver
27− , _pcNixpkgsResolver :: !NixpkgsResolver
28− , _pcTargetPlatform :: !Platform
29− , _pcTargetCompiler :: !CompilerInfo
30− , _pcFlagAssignment :: !FlagAssignment
20+data StackPackagesConfig = StackPackagesConfig
21+ { _spcHaskellResolver :: HaskellResolver
22+ , _spcNixpkgsResolver :: NixpkgsResolver
23+ , _spcTargetPlatform :: Platform
24+ , _spcTargetCompiler :: CompilerInfo
25+ , _spcFlagAssignment :: FlagAssignment
26+ , _spcDoCheckPackages :: Bool
27+ , _spcDoHaddockPackages :: Bool
3128 }
3229
33−makeLenses ''PackageConfig
34−
35−mkPackageConfig :: Platform -> CompilerId -> PackageConfig
36−mkPackageConfig platform compilerId = PackageConfig
37− { _pcHaskellResolver = const True
38− , _pcNixpkgsResolver = \i -> Just (Nix.binding # (i, Nix.path # [i]))
39− , _pcTargetPlatform = platform
40− , _pcTargetCompiler = unknownCompilerInfo compilerId NoAbiTag
41− , _pcFlagAssignment = []
42− }
30+makeLenses ''StackPackagesConfig
4331
44−getStackPackageFromDb
45− :: Maybe HackageDb
46− -> StackPackage
47− -> IO Package
48−getStackPackageFromDb optHackageDb stackPackage =
49− PackageSourceSpec.getPackage
50− (unHackageDb <$> optHackageDb)
51− (stackLocationToSource $ stackPackage ^. spLocation)
32+getStackPackageFromDb :: DB.HackageDB -> StackPackage -> IO Package
33+getStackPackageFromDb hackageDb stackPackage = do
34+ PackageSourceSpec.getPackage'
35+ False
36+ (pure hackageDb)
37+ (stackLocationToSource (stackPackage ^. spLocation) (stackPackage ^. spDir))
5238
53−stackLocationToSource :: PackageLocation -> Source
54−stackLocationToSource = \case
55− HackagePackage p -> Source
56− { sourceUrl = "cabal://" ++ T.unpack p
39+stackLocationToSource
40+ :: PackageLocation
41+ -- ^ Subdirectory in the package containing cabal file.
42+ -> Maybe FilePath
43+ -> Source
44+stackLocationToSource pl mCabalDir = case pl of
45+ PlIndex p -> Source
46+ { sourceUrl = "cabal://" ++ T.unpack (p ^. piNameVersion)
5747 , sourceRevision = mempty
5848 , sourceHash = UnknownHash
59− , sourceCabalDir = mempty }
60− StackFilePath p -> Source
49+ , sourceCabalDir = cabalDir }
50+ PlFilePath p -> Source
6151 { sourceUrl = p
6252 , sourceRevision = mempty
6353 , sourceHash = UnknownHash
64− , sourceCabalDir = mempty }
65− StackUri uri -> Source
54+ , sourceCabalDir = cabalDir }
55+ PlUri uri -> Source
6656 { sourceUrl = URI.uriToString id uri mempty
6757 , sourceRevision = mempty
6858 , sourceHash = UnknownHash
69− , sourceCabalDir = mempty }
70− StackRepoGit rg -> Source
71− { sourceUrl = T.unpack $ rg ^. rgUri
72− , sourceRevision = T.unpack $ rg ^. rgCommit
59+ , sourceCabalDir = cabalDir }
60+ PlRepo r -> Source
61+ { sourceUrl = T.unpack $ r ^. rUri
62+ , sourceRevision = T.unpack $ r ^. rCommit
7363 , sourceHash = UnknownHash
74− , sourceCabalDir = mempty }
64+ , sourceCabalDir = cabalDir }
65+ where
66+ cabalDir = fromMaybe mempty mCabalDir
7567
7668packageDerivation
77− :: PackageConfig
78− -> Maybe HackageDb
69+ :: StackPackagesConfig
70+ -> DB.HackageDB
7971 -> StackPackage
8072 -> IO Derivation
81−packageDerivation conf optHackageDb stackPackage = do
82− pkg <- getStackPackageFromDb optHackageDb stackPackage
83− pure . overrideStackageDerivation
84− $ genericPackageDerivation conf pkg
85− & src .~ pkgSource pkg
86− & doCheck .~ False
87− & runHaddock .~ False
73+packageDerivation conf hackageDb stackPackage = do
74+ pkg <- getStackPackageFromDb hackageDb stackPackage
75+ let
76+ drv = genericPackageDerivation conf pkg
77+ & subpath %~ flip fromMaybe (stackPackage ^. spDir)
78+ pconf = PackageConfig
79+ { enableCheck = conf ^. spcDoCheckPackages
80+ , enableHaddock = conf ^. spcDoHaddockPackages }
81+ return $ finalizePackage pkg pconf drv
8882
8983genericPackageDerivation
90− :: PackageConfig
84+ :: StackPackagesConfig
9185 -> Package
9286 -> Derivation
9387genericPackageDerivation conf pkg =
9488 FromCabal.fromGenericPackageDescription
95− (conf ^. pcHaskellResolver)
96− (conf ^. pcNixpkgsResolver)
97− (conf ^. pcTargetPlatform)
98− (conf ^. pcTargetCompiler)
99− (conf ^. pcFlagAssignment)
89+ (conf ^. spcHaskellResolver)
90+ (conf ^. spcNixpkgsResolver)
91+ (conf ^. spcTargetPlatform)
92+ (conf ^. spcTargetCompiler)
93+ (conf ^. spcFlagAssignment)
10094 []
10195 (pkgCabal pkg)
102−
103−-- Stackage packages set only consistent for packages with their library and
104−-- executable dependencies and completely ignores test dependencies.
105−overrideStackageDerivation :: Derivation -> Derivation
106−overrideStackageDerivation node = node
107− & doCheck .~ False
108− & runHaddock .~ False
109−
110−overrideStackageNode :: Node -> Node
111−overrideStackageNode = over nodeDerivation overrideStackageDerivation
src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+114−30
@@ -3,29 +3,45 @@
33module Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting where
44
55import Control.Lens
6+import Data.Foldable as F
7+import Data.List as L
8+import Data.List.NonEmpty as NE
69import Data.Maybe
710import Data.String
811import Distribution.Nixpkgs.Haskell.Derivation
912import Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting as PP
1013import Distribution.Package
1114import Distribution.Text
12−import Distribution.Version (Version(..))
15+import Distribution.Version (Version)
1316import qualified Language.Nix.FilePath as Nix
1417import Language.Nix.PrettyPrinting as PP
18+import Stack.Config (StackResolver, unStackResolver)
19+
20+import Prelude hiding ((<>))
1521
1622
1723data OverrideConfig = OverrideConfig
18− { _ocGhc :: !Version
19− , _ocStackagePackages :: !FilePath
20− , _ocStackageConfig :: !FilePath }
24+ { _ocGhc :: Version
25+ , _ocStackagePackages :: FilePath
26+ , _ocStackageConfig :: FilePath
27+ , _ocNixpkgs :: FilePath
28+ }
2129
2230makeLenses ''OverrideConfig
2331
32+systemNixpkgs :: Doc
33+systemNixpkgs = "<nixpkgs>"
34+
35+renderNixpkgs :: FilePath -> Doc
36+renderNixpkgs nixpkgsPath
37+ | fromString nixpkgsPath == systemNixpkgs = systemNixpkgs
38+ | otherwise = disp $ (fromString nixpkgsPath :: Nix.FilePath)
39+
2440hasField :: Lens' a (Maybe b) -> a -> Bool
2541hasField p = views p isJust
2642
27−overridePackages :: [Derivation] -> Doc
28−overridePackages = PP.packageSetConfig . PP.cat . fmap callPackage
43+overridePackages :: (Foldable t, Functor t) => t Derivation -> Doc
44+overridePackages = PP.packageSetConfig . PP.cat . F.toList . fmap callPackage
2945 where
3046 drvNameQuoted = PP.doubleQuotes . disp . pkgName . view pkgid
3147 callPackage drv = hang
@@ -34,33 +50,25 @@ overridePackages = PP.packageSetConfig . PP.cat . fmap callPackage
3450
3551importStackagePackages :: FilePath -> Doc
3652importStackagePackages path = hsep
37− [ funarg "self", "import", disp (fromString path :: Nix.FilePath), "{"
38− , "inherit pkgs stdenv;"
39− , "inherit (self) callPackage;"
40− , "}"
41− ]
53+ ["import", disp (fromString path :: Nix.FilePath)]
4254
4355importStackageConfig :: FilePath -> Doc
4456importStackageConfig path = hsep
45− [ "import", disp (fromString path :: Nix.FilePath), "{"
46− , "inherit pkgs;"
47− , "}"
48− ]
49−
50−callStackageConfig :: FilePath -> Doc
51−callStackageConfig path = hsep
52− [ "callPackage", disp (fromString path :: Nix.FilePath), "{}"]
57+ ["import ", disp (fromString path :: Nix.FilePath), "{ inherit pkgs haskellLib; }"]
5358
54−overrideHaskellPackages :: OverrideConfig -> [Derivation] -> Doc
59+overrideHaskellPackages :: OverrideConfig -> NonEmpty Derivation -> Doc
5560overrideHaskellPackages oc packages = vcat
56− [ funargs ["nixpkgs ? import <nixpkgs> {}"]
61+ [ funargs
62+ [ "nixpkgs ? import " <> renderNixpkgs (oc ^. ocNixpkgs) <> " {}"
63+ ]
5764 , ""
5865 , "with nixpkgs;"
5966 , "let"
6067 , nest 2 "inherit (stdenv.lib) extends;"
6168 , nest 2 $ vcat
62− [ attr "stackagePackages" . importStackagePackages $ oc ^. ocStackagePackages
63− , attr "stackageConfig" . callStackageConfig $ oc ^. ocStackageConfig ]
69+ [ attr "haskellLib" "callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules/lib.nix\") {}"
70+ , attr "stackagePackages" . importStackagePackages $ oc ^. ocStackagePackages
71+ , attr "stackageConfig" . importStackageConfig $ oc ^. ocStackageConfig ]
6472 , nest 2 $ vcat
6573 [ "stackPackages ="
6674 , nest 2 $ overridePackages packages <> semi
@@ -69,16 +77,92 @@ overrideHaskellPackages oc packages = vcat
6977 , nest 2 "inherit pkgs stdenv;"
7078 , nest 2 "inherit (self) callPackage;"
7179 , "};"
72− , ""
80+ ]
81+ , "in callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules\") {"
82+ , nest 2 $ vcat
83+ [ attr "ghc" ("pkgs.haskell.compiler." <> nixGhc)
84+ , attr "buildHaskellPackages" ("buildPackages.haskell.packages." <> nixGhc)
85+ , attr "compilerConfig" "self: extends pkgOverrides (stackageConfig self)"
86+ , attr "initialPackages" "stackagePackages"
87+ , attr "configurationCommon" "args: self: super: {}"
88+ , "inherit haskellLib;"
7389 ]
74− , "in callPackage <nixpkgs/pkgs/development/haskell-modules> {"
90+ , "}"
91+ ]
92+ where
93+ nixGhc = toNixGhcVersion (oc ^. ocGhc)
94+
95+overrideStackage :: StackResolver -> FilePath -> NonEmpty Derivation -> Doc
96+overrideStackage stackResolver nixpkgsPath packages = vcat
97+ [ funargs
98+ [ "nixpkgs ? import " <> renderNixpkgs nixpkgsPath <> " {}"
99+ ]
100+ , ""
101+ , "let"
75102 , nest 2 $ vcat
76− [ attr "ghc" ("pkgs.haskell.compiler." <> toNixGhcVersion (oc ^. ocGhc))
77− , attr "compilerConfig" "self: extends stackageConfig (stackagePackages self)"
78− , attr "overrides" "self: pkgOverrides self"]
103+ [ "stackPackages ="
104+ , nest 2 $ overridePackages packages <> semi
105+ ]
106+ , "in nixpkgs.haskell.packages.stackage." <> toNixStackResolver stackResolver <> ".override {"
107+ , nest 2
108+ $ attr "packageSetConfig" "self: super: stackPackages { inherit (nixpkgs) pkgs stdenv; inherit (self) callPackage; } super"
79109 , "}"
80110 ]
81111
112+pPrintHaskellPackages :: OverrideConfig -> Doc
113+pPrintHaskellPackages oc = vcat
114+ [ funargs
115+ [ "callPackage"
116+ , "buildPackages"
117+ , "pkgs"
118+ , "stdenv"
119+ , "lib"
120+ , "overrides ? (self: super: {})"
121+ , "packageSetConfig ? (self: super: {})"
122+ ]
123+ , ""
124+ , "let"
125+ , nest 2 $ vcat
126+ [ "inherit (lib) extends makeExtensible;"
127+ , attr "haskellLib" "pkgs.haskell.lib"
128+ , "inherit (haskellLib) makePackageSet;"
129+ , ""
130+ , attr "haskellPackages" $ vcat
131+ [ "pkgs.callPackage makePackageSet {"
132+ , nest 2 $ vcat
133+ [ attr "ghc" ("buildPackages.haskell.compiler." <> toNixGhcVersion (oc ^. ocGhc))
134+ , attr "buildHaskellPackages" ("buildPackages.haskell.packages." <> toNixGhcVersion (oc ^. ocGhc))
135+ , attr "package-set" . importStackagePackages $ oc ^. ocStackagePackages
136+ , "inherit stdenv haskellLib extensible-self;"
137+ ]
138+ , "}"
139+ ]
140+ , ""
141+ , attr "compilerConfig" . importStackageConfig $ oc ^. ocStackageConfig
142+ , ""
143+ , attr "configurationCommon" "if builtins.pathExists ./configuration-common.nix then import ./configuration-common.nix { inherit pkgs haskellLib; } else self: super: {}"
144+ , attr "configurationNix" "import (pkgs.path + \"/pkgs/development/haskell-modules/configuration-nix.nix\") { inherit pkgs haskellLib; }"
145+ , ""
146+ , attr "extensible-self" "makeExtensible (extends overrides (extends configurationCommon (extends packageSetConfig (extends compilerConfig (extends configurationNix haskellPackages)))))"
147+ ]
148+ , ""
149+ , "in extensible-self"
150+ ]
151+
152+stackYamlPackages :: NonEmpty Derivation -> Doc
153+stackYamlPackages packages = hcat
154+ [ "self: { "
155+ , "inherit (self) "
156+ , text . intercalate " " $ NE.toList packageNames
157+ , "; }" ]
158+ where
159+ packageNames = unPackageName . pkgName . packageId <$> packages
160+
82161toNixGhcVersion :: Version -> Doc
83−toNixGhcVersion =
84− (<>) "ghc" . text . filter (/= '.') . show . disp
162+toNixGhcVersion = (<>) "ghc" . toNixVersion . show . disp
163+
164+toNixStackResolver :: StackResolver -> Doc
165+toNixStackResolver = toNixVersion . unStackResolver
166+
167+toNixVersion :: String -> Doc
168+toNixVersion = text . L.filter (/= '.')
src/Language/Nix/FilePath.hs+7−4
@@ -11,7 +11,7 @@ import Distribution.Compat.ReadP as ReadP
1111import Distribution.Text
1212import GHC.Generics (Generic)
1313import Prelude hiding (FilePath)
14−import qualified System.FilePath.Posix as Posix
14+import qualified System.FilePath as FP
1515import Test.QuickCheck as QC
1616import Text.PrettyPrint as PP
1717
@@ -25,7 +25,7 @@ instance NFData FilePath where
2525 rnf = rnf . unFilePath
2626
2727instance Arbitrary FilePath where
28− arbitrary = FilePath <$> QC.suchThat arbitrary Posix.isValid
28+ arbitrary = FilePath <$> QC.suchThat arbitrary FP.isValid
2929 shrink = fmap FilePath . shrink . unFilePath
3030
3131instance Text FilePath where
@@ -38,9 +38,12 @@ instance IsString FilePath where
3838parseFilePath :: ReadP r FilePath
3939parseFilePath = do
4040 path <- ReadP.munch (const True)
41− if Posix.isValid path
41+ if FP.isValid path
4242 then pure (FilePath path)
4343 else pfail
4444
4545renderFilePath :: FilePath -> String
46−renderFilePath = Posix.combine "." . Posix.normalise . unFilePath
46+renderFilePath = FP.combine "."
47+ . FP.normalise
48+ . FP.dropTrailingPathSeparator
49+ . unFilePath
src/LtsHaskell.hsnew file+98
@@ -0,0 +1,98 @@
1+module LtsHaskell where
2+
3+import AllCabalHashes
4+import Control.Lens
5+import Control.Monad.Catch
6+import Data.Maybe
7+import Data.Text as T
8+import Distribution.Text as Text (display)
9+import Control.Monad
10+import Distribution.Compiler (CompilerInfo(..), AbiTag(NoAbiTag), CompilerId(..), CompilerFlavor(GHC))
11+import Distribution.System (Platform(..))
12+import Distribution.Package (PackageName, PackageIdentifier(..), Dependency(..))
13+import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
14+import Distribution.Nixpkgs.Haskell.FromStack
15+import Distribution.Nixpkgs.Haskell.Stack
16+import Distribution.Nixpkgs.Fetch
17+import Distribution.Nixpkgs.PackageMap (readNixpkgPackageMap, resolve)
18+import Distribution.Version (Version, withinRange)
19+import Language.Haskell.Extension (Language(Haskell98, Haskell2010))
20+import Language.Nix
21+import Stack.Config
22+import Stackage.BuildPlan
23+import Stackage.Types (SystemInfo(..))
24+import System.FilePath as Path
25+
26+import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
27+import qualified Data.Yaml as Yaml
28+import qualified Data.Map as Map
29+import qualified Data.Set as Set
30+
31+
32+loadBuildPlan :: FilePath -> IO BuildPlan
33+loadBuildPlan = Yaml.decodeFileEither >=> \case
34+ Left err -> fail $ "Failed to parse stackage build plan: " ++ show err
35+ Right bp -> return bp
36+
37+getPackageFromRepo :: FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
38+getPackageFromRepo allCabalHashesPath mSha1Hash pkgId = do
39+ (pkgDesc, _) <- case mSha1Hash of
40+ Just sha1 ->
41+ readPackageByHash allCabalHashesPath sha1
42+ `catchAll` const (readPackageByName allCabalHashesPath pkgId)
43+ Nothing -> readPackageByName allCabalHashesPath pkgId
44+ meta <- readPackageMeta allCabalHashesPath pkgId
45+ let
46+ tarballSHA256 = fromMaybe
47+ (error (display pkgId ++ ": meta data has no SHA256 hash for the tarball"))
48+ (view (mHashes . at "SHA256") meta)
49+ source = DerivationSource "url" ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") "" tarballSHA256
50+ return $ Package source False pkgDesc
51+
52+getPackageFromDb :: DB.HackageDB -> PackageIdentifier -> IO Package
53+getPackageFromDb hackageDb pkgId =
54+ getStackPackageFromDb hackageDb
55+ $ StackPackage (PlIndex $ PackageIndex (T.pack $ Text.display pkgId) Nothing) True Nothing
56+
57+loadPackage :: DB.HackageDB -> FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
58+loadPackage hackageDb allCabalHashesPath mSha1Hash pkgId =
59+ getPackageFromRepo allCabalHashesPath mSha1Hash pkgId
60+ `catchIOError` const (getPackageFromDb hackageDb pkgId)
61+
62+ghcCompilerInfo :: Version -> CompilerInfo
63+ghcCompilerInfo v = CompilerInfo
64+ { compilerInfoId = CompilerId GHC v
65+ , compilerInfoAbiTag = NoAbiTag
66+ , compilerInfoCompat = Just []
67+ , compilerInfoLanguages = Just [Haskell98, Haskell2010]
68+ , compilerInfoExtensions = Nothing
69+ }
70+
71+buildPlanContainsDependency :: Map.Map PackageName Version -> Dependency -> Bool
72+buildPlanContainsDependency packageVersions (Dependency depName versionRange) =
73+ maybe False (`withinRange` versionRange) $ Map.lookup depName packageVersions
74+
75+buildPackageSetConfig
76+ :: DB.HackageDB
77+ -> FilePath
78+ -> FilePath
79+ -> BuildPlan
80+ -> IO PackageSetConfig
81+buildPackageSetConfig hackageDb optAllCabalHashes optNixpkgsRepository buildPlan = do
82+ nixpkgs <- readNixpkgPackageMap optNixpkgsRepository Nothing
83+ let
84+ systemInfo = bpSystemInfo buildPlan
85+ packageVersions = fmap ppVersion (bpPackages buildPlan) `Map.union` siCorePackages systemInfo
86+ return PackageSetConfig
87+ { packageLoader = loadPackage hackageDb optAllCabalHashes
88+ , targetPlatform = Platform (siArch systemInfo) (siOS systemInfo)
89+ , targetCompiler = ghcCompilerInfo (siGhcVersion systemInfo)
90+ , nixpkgsResolver = resolve (Map.map (Set.map (over path ("pkgs":))) nixpkgs)
91+ , haskellResolver = buildPlanContainsDependency packageVersions }
92+
93+-- Path to Yaml build definition file in lts-haskell repository
94+buildPlanFilePath :: FilePath -> StackResolver -> FilePath
95+buildPlanFilePath ltsRepoDir resolver =
96+ ltsRepoDir Path.</>
97+ (resolver ^. to unStackResolver) Path.<.>
98+ ".yaml"
src/Runner.hs+170−42
@@ -1,69 +1,197 @@
11module Runner ( run ) where
22
33import Control.Lens
4−import Data.Functor
4+import Data.Foldable as F
5+import Data.List as L
6+import Data.Maybe (fromMaybe)
7+import Data.Semigroup ((<>))
58import Distribution.Nixpkgs.Haskell.FromStack
69import Distribution.Nixpkgs.Haskell.FromStack.Package
10+import Distribution.Nixpkgs.Haskell.Hackage as DB
11+import Distribution.Nixpkgs.Haskell.PackageSourceSpec (loadHackageDB)
712import Distribution.Nixpkgs.Haskell.Stack
813import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
9−import Distribution.Version (Version(..))
10−import System.FilePath as Path
14+import Distribution.Version (Version)
15+import Distribution.Compiler (AbiTag(..), unknownCompilerInfo)
16+import Distribution.Package (PackageName, mkPackageName, pkgName)
17+import Distribution.Text as Text (display)
18+import Language.Nix as Nix
1119import Options.Applicative
20+import Paths_stackage2nix ( version )
1221import Runner.Cli
1322import Stack.Config
23+import Stack.Types
1424import Stackage.Types
1525import System.IO (withFile, IOMode(..), hPutStrLn)
16−import Text.PrettyPrint.HughesPJClass (render)
26+import Text.PrettyPrint.HughesPJClass (Doc, render)
1727
28+import qualified Data.List.NonEmpty as NE
1829import qualified Data.Map as Map
19−import qualified Stackage2nix as S2n
20−
30+import qualified Data.Set as Set
31+import qualified LtsHaskell as LH
2132
2233run :: IO ()
2334run = do
2435 opts <- execParser pinfo
25− stackYaml <- envStackYaml >>= \case
26− Just p -> putStrLn "Getting project config file from STACK_YAML environment" $> p
27− Nothing -> pure $ opts ^. optStackYaml
28− stackConf <- either fail pure =<< readStackConfig stackYaml
36+ hackageDb <- loadHackageDB (opts ^. optHackageDb) Nothing
2937 let
30− s2nOpts = mkS2nOptions stackConf opts
31− (buildPlan, packageSetConfig) <- S2n.run s2nOpts
32− -- generate haskell packages override
38+ -- With optparse-applicative it seems there's no way to make
39+ -- 'StackageOptions' optional for Stackage override and required in
40+ -- other cases
41+ missingErr = error . ("Missing required parameter: " <>)
42+ sopts = StackageOptions
43+ (fromMaybe (missingErr "--all-cabal-hashes") (opts ^. optAllCabalHashesRepo) )
44+ (fromMaybe (missingErr "--lts-haskell") (opts ^. optLtsHaskellRepo))
45+
46+ case opts ^. optConfigOrigin of
47+ -- Generate Stackage packages from stack.yaml resolver
48+ OriginStackYaml stackYaml buildTarget -> do
49+ stackConf <- either fail pure =<< readStackConfig stackYaml
50+ let
51+ stackResolver = stackConf ^. scResolver
52+ stackPackagesConfig = mkStackPackagesConfig opts
53+ stackExtraDepsConfig = stackPackagesConfig
54+ & spcDoCheckPackages .~ False
55+ & spcDoHaddockPackages .~ False
56+ stackConfPackages <- traverse (fmap mkNode . packageDerivation stackPackagesConfig hackageDb)
57+ $ stackConf ^. scPackages
58+ stackConfExtraDeps <- traverse (fmap mkNode . packageDerivation stackExtraDepsConfig hackageDb)
59+ $ stackConf ^. scExtraDeps
60+ let
61+ stackConfAllPackages = maybe stackConfPackages ((<>) stackConfPackages)
62+ $ NE.nonEmpty stackConfExtraDeps
63+
64+ case buildTarget of
65+ TargetStackageClosure -> do
66+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
67+ let
68+ overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
69+ stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
70+ then extraDepsLatestConfig stackConfAllPackages packageSetConfig
71+ else packageSetConfig
72+ stackagePackages <- buildStackagePackages stackageSetConfig buildPlan
73+ let
74+ reachable = reachableDeps stackConfAllPackages
75+ -- Nixpkgs generic-builder puts hscolour on path for all libraries
76+ withHscolour pkgs =
77+ let hscolour = F.find ((== "hscolour") . nodeName) stackagePackages
78+ in maybe pkgs (`Set.insert` pkgs) hscolour
79+ -- Find all reachable dependencies in stackage set to stick into
80+ -- stackage packages file. This is performed on the full stackage
81+ -- set rather than pruning stackage packages beforehand because
82+ -- stackage does not concern itself with build tools while cabal2nix
83+ -- does: pruning only after generating full set of packages allows
84+ -- us to make sure all those extra dependencies are explicitly
85+ -- listed as well.
86+ nodes = Set.toAscList
87+ $ withHscolour
88+ $ flip reachableDependencies stackagePackages
89+ -- Originally reachable nodes are root nodes
90+ $ L.filter (\n -> mkPackageName (nodeName n) `Set.member` reachable) stackagePackages
91+ writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
92+ $ pPrintOutPackages (view nodeDerivation <$> nodes)
93+ writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
94+ $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
95+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
96+ $ PP.overrideHaskellPackages overrideConfig (view nodeDerivation <$> stackConfAllPackages)
97+
98+ TargetStackagePackages -> do
99+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
100+ let
101+ overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
102+ stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
103+ then extraDepsLatestConfig stackConfAllPackages packageSetConfig
104+ else packageSetConfig
105+ -- stackageLoader mHash pkgId =
106+ -- if pkgName pkgId `Set.member` reachable
107+ -- then packageLoader packageSetConfig Nothing pkgId
108+ -- else packageLoader packageSetConfig mHash pkgId
109+ -- stackageSetConfig = packageSetConfig { packageLoader = stackageLoader }
110+ nodes <- buildStackagePackages stackageSetConfig buildPlan
111+ writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
112+ $ pPrintOutPackages (view nodeDerivation <$> nodes)
113+ writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
114+ $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
115+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
116+ $ PP.overrideHaskellPackages overrideConfig (view nodeDerivation <$> stackConfAllPackages)
117+
118+ TargetStackageOverride -> do
119+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
120+ $ PP.overrideStackage
121+ (stackConf ^. scResolver)
122+ (opts ^. optNixpkgsRepository)
123+ (view nodeDerivation <$> stackConfAllPackages)
124+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutStackYamlPackages)
125+ $ PP.stackYamlPackages (view nodeDerivation <$> stackConfPackages)
126+
127+ -- Generate Stackage packages from resolver
128+ OriginResolver stackResolver -> do
129+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
130+ nodes <- buildStackagePackages packageSetConfig buildPlan
131+ let overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
132+ writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
133+ $ pPrintOutPackages (view nodeDerivation <$> nodes)
134+ writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
135+ $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
136+ writeOutFile buildPlanFile (opts ^. optOutDerivation)
137+ $ PP.pPrintHaskellPackages overrideConfig
138+
139+loadStackageBuildPlan :: DB.HackageDB -> StackResolver -> Options -> StackageOptions -> IO (FilePath, BuildPlan, PackageSetConfig)
140+loadStackageBuildPlan hackageDb stackResolver opts sopts = do
141+ let buildPlanFile = LH.buildPlanFilePath (sopts ^. soptLtsHaskellRepo) stackResolver
142+ buildPlan <- LH.loadBuildPlan buildPlanFile
143+ packageSetConfig <- LH.buildPackageSetConfig
144+ hackageDb
145+ (sopts ^. soptAllCabalHashesRepo)
146+ (opts ^. optNixpkgsRepository)
147+ buildPlan
148+ return (buildPlanFile, buildPlan, packageSetConfig)
149+
150+buildStackagePackages :: PackageSetConfig -> BuildPlan -> IO [Node]
151+buildStackagePackages packageSetConfig buildPlan = do
33152 let
34− pkgConfig = mkPackageConfig (opts ^. optPlatform) (opts ^. optCompilerId)
35− overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
36− packages <- traverse (packageDerivation pkgConfig (opts ^. optHackageDb))
37− $ stackConf ^. scPackages
153+ stackagePackageConfig = PackageConfig
154+ { enableCheck = True
155+ , enableHaddock = True }
156+ traverse (uncurry (buildNode packageSetConfig stackagePackageConfig))
157+ $ Map.toAscList (bpPackages buildPlan)
158+
159+reachableDeps :: Traversable t => t Node -> Set.Set PackageName
160+reachableDeps = Set.map mkPackageName
161+ . F.foldr1 Set.union
162+ . fmap nodeDepends
163+
164+-- Return 'PackageSetConfig' with package loader that loads latest Hackage
165+-- revison for direct (reachable) dependencies of input packages
166+extraDepsLatestConfig :: Traversable t => t Node -> PackageSetConfig -> PackageSetConfig
167+extraDepsLatestConfig packages packageSetConfig =
38168 let
39− out = PP.overrideHaskellPackages overrideConfig packages
40− writeFile (opts ^. optOutDerivation) (show out)
41− -- generate stackage packages
42− nodes <- traverse (fmap overrideStackageNode . uncurry (buildNodeM packageSetConfig))
43− $ Map.toList (bpPackages buildPlan)
44− -- let nodes = reachableDependencies (mkNode <$> packages) allNodes
45− withFile (opts ^. optOutStackagePackages) WriteMode $ \h -> do
46− hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)
47− hPutStrLn h $ render $ pPrintOutPackages (view nodeDerivation <$> nodes)
48− withFile (opts ^. optOutStackageConfig) WriteMode $ \h -> do
49− hPutStrLn h ("# Generated by stack2nix from " ++ S2n.optBuildPlanFile s2nOpts)
50− hPutStrLn h $ render $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
51− putStrLn $ "Derivation was written to " ++ opts ^. optOutDerivation
169+ reachable = reachableDeps packages
170+ stackageLoader mHash pkgId =
171+ if pkgName pkgId `Set.member` reachable
172+ then packageLoader packageSetConfig Nothing pkgId
173+ else packageLoader packageSetConfig mHash pkgId
174+ in packageSetConfig { packageLoader = stackageLoader }
175+
176+writeOutFile :: Show source => source -> FilePath -> Doc -> IO ()
177+writeOutFile source filePath contents =
178+ withFile filePath WriteMode $ \h -> do
179+ hPutStrLn h ("# Generated by stackage2nix " ++ Text.display version ++ " from " ++ show source)
180+ hPutStrLn h $ render contents
52181
53182mkOverrideConfig :: Options -> Version -> OverrideConfig
54183mkOverrideConfig opts ghcVersion = OverrideConfig
55184 { _ocGhc = ghcVersion
56185 , _ocStackagePackages = opts ^. optOutStackagePackages
57− , _ocStackageConfig = opts ^. optOutStackageConfig }
186+ , _ocStackageConfig = opts ^. optOutStackageConfig
187+ , _ocNixpkgs = opts ^. optNixpkgsRepository }
58188
59−mkS2nOptions :: StackConfig -> Options -> S2n.Options
60−mkS2nOptions conf opts = S2n.Options
61− { S2n.optBuildPlanFile =
62− (opts ^. optLtsHaskellRepo) Path.</>
63− (conf ^. scResolver . to unStackResolver) Path.<.>
64− ".yaml"
65− , S2n.optAllCabalHashes = opts ^. optAllCabalHashesRepo
66− , S2n.optNixpkgsRepository = opts ^. optNixpkgsRepository
67− , S2n.optNixpkgsMap = Nothing
68− , S2n.optOutPackages = opts ^. optOutStackagePackages
69− , S2n.optOutConfig = opts ^. optOutStackageConfig }
189+mkStackPackagesConfig :: Options -> StackPackagesConfig
190+mkStackPackagesConfig opts = StackPackagesConfig
191+ { _spcHaskellResolver = const True
192+ , _spcNixpkgsResolver = \i -> Just (Nix.binding # (i, Nix.path # [i]))
193+ , _spcTargetPlatform = opts ^. optPlatform
194+ , _spcTargetCompiler = unknownCompilerInfo (opts ^. optCompilerId) NoAbiTag
195+ , _spcFlagAssignment = mempty
196+ , _spcDoCheckPackages = opts ^. optDoCheckPackages
197+ , _spcDoHaddockPackages = opts ^. optDoHaddockPackages }
src/Runner/Cli.hs+123−36
@@ -5,62 +5,98 @@ import Data.Monoid ( (<>) )
55import Data.Text as T
66import qualified Distribution.Compat.ReadP as P
77import Distribution.Compiler as Compiler
8−import Distribution.Nixpkgs.Haskell.Stack
98import Distribution.System as System
109import qualified Distribution.Text as Text
1110import Options.Applicative as Opts
11+import Paths_stackage2nix ( version )
12+import Stack.Config
1213import Stack.Types
13−import System.Environment
1414import System.FilePath
1515
16+data Tweaks = Tweaks
17+ { _tExtraDepsRevisionLatest :: Bool
18+ } deriving (Show)
1619
17−data Options = Options
18− { _optAllCabalHashesRepo :: !FilePath
19− , _optLtsHaskellRepo :: !FilePath
20− , _optOutStackagePackages :: !FilePath
21− , _optOutStackageConfig :: !FilePath
22− , _optOutDerivation :: !FilePath
23− , _optHackageDb :: !(Maybe HackageDb)
24− , _optNixpkgsRepository :: !FilePath
25− , _optCompilerId :: !CompilerId
26− , _optPlatform :: !Platform
27− , _optStackYamlArg :: !FilePath
20+makeLenses ''Tweaks
21+
22+-- | What will be generated
23+data Target
24+ = TargetStackagePackages
25+ | TargetStackageClosure
26+ | TargetStackageOverride
27+ deriving (Show)
28+
29+makePrisms ''Target
30+
31+-- | Source that would be used to produce target derivation
32+data ConfigOrigin
33+ = OriginResolver StackResolver
34+ -- ^ Resolver to generate Stackage LTS
35+ | OriginStackYaml StackYaml Target
36+ -- ^ Stack config to generate build derivation
37+ deriving (Show)
38+
39+makePrisms ''ConfigOrigin
40+
41+data StackageOptions = StackageOptions
42+ { _soptAllCabalHashesRepo :: FilePath
43+ , _soptLtsHaskellRepo :: FilePath
2844 } deriving (Show)
2945
30−makeLenses ''Options
46+makeLenses ''StackageOptions
3147
32−envStackYaml :: IO (Maybe StackYaml)
33−envStackYaml = fmap mkStackYaml <$> lookupEnv "STACK_YAML"
48+data Options = Options
49+ { _optAllCabalHashesRepo :: Maybe FilePath
50+ , _optLtsHaskellRepo :: Maybe FilePath
51+ , _optOutStackagePackages :: FilePath
52+ , _optOutStackageConfig :: FilePath
53+ , _optOutDerivation :: FilePath
54+ , _optOutStackYamlPackages :: FilePath
55+ , _optDoCheckPackages :: Bool
56+ , _optDoHaddockPackages :: Bool
57+ , _optTweaks :: Tweaks
58+ , _optHackageDb :: Maybe FilePath
59+ , _optNixpkgsRepository :: FilePath
60+ , _optCompilerId :: CompilerId
61+ , _optPlatform :: Platform
62+ , _optConfigOrigin :: ConfigOrigin
63+ } deriving (Show)
3464
35−optStackYaml :: Getter Options StackYaml
36−optStackYaml = optStackYamlArg . to mkStackYaml
65+makeLenses ''Options
3766
3867mkStackYaml :: FilePath -> StackYaml
3968mkStackYaml p = case splitFileName p of
4069 (dir, "") -> StackYaml dir "stack.yaml"
4170 (dir, ".") -> StackYaml dir "stack.yaml"
4271 (_ , "..") -> StackYaml p "stack.yaml"
43− _ -> StackYaml "." p
72+ (dir, file) -> case splitExtension file of
73+ (_, "") -> StackYaml p "stack.yaml"
74+ _ -> StackYaml dir file
4475
4576options :: Parser Options
4677options = Options
47− <$> allCabalHashesRepo
48− <*> ltsHaskellRepo
78+ <$> optional allCabalHashesRepo
79+ <*> optional ltsHaskellRepo
4980 <*> outStackagePackages
5081 <*> outStackageConfig
5182 <*> outDerivation
52− <*> optional hackageDb
83+ <*> outStackYamlPackages
84+ <*> doCheckPackages
85+ <*> doHaddockPackages
86+ <*> tweaks
87+ <*> optional optionHackageDb
5388 <*> nixpkgsRepository
5489 <*> compilerId
5590 <*> platform
56− <*> stackYamlArg
91+ <*> configOrigin
5792
5893pinfo :: ParserInfo Options
5994pinfo = info
60− ( helper
61− <*> options )
62− ( fullDesc
63− <> header "stack2nix converts Stack files into build instructions for Nix." )
95+ ( helper
96+ <*> infoOption ("stackage2nix " ++ Text.display version) (long "version" <> help "Show version")
97+ <*> options )
98+ ( fullDesc
99+ <> header "stackage2nix converts Stack files into build instructions for Nix." )
64100
65101nixpkgsRepository :: Parser FilePath
66102nixpkgsRepository = option str
@@ -106,19 +142,70 @@ outDerivation = option str
106142 <> value "default.nix"
107143 <> showDefaultWith id )
108144
109−stackYamlArg :: Parser FilePath
110−stackYamlArg = Opts.argument str
145+outStackYamlPackages :: Parser FilePath
146+outStackYamlPackages = option str
147+ ( long "out-stack-yaml-packages"
148+ <> metavar "NIX_FILE"
149+ <> help "path to output stackage.yaml packages list"
150+ <> value "stack-yaml-packages.nix"
151+ <> showDefaultWith id )
152+
153+doCheckPackages :: Parser Bool
154+doCheckPackages = flag True False
155+ ( long "no-check"
156+ <> help "disable tests for project packages")
157+
158+doHaddockPackages :: Parser Bool
159+doHaddockPackages = flag True False
160+ ( long "no-haddock"
161+ <> help "disable haddock for project packages")
162+
163+withStackage :: Parser ()
164+withStackage = flag' ()
165+ ( long "with-stackage"
166+ <> help "generate full Stackage" )
167+
168+withStackageClosure :: Parser ()
169+withStackageClosure = flag' ()
170+ ( long "with-stackage-closure"
171+ <> help "generate Stackage subset containing only build dependencies" )
172+
173+extraDepsRevisionLatest :: Parser Bool
174+extraDepsRevisionLatest = switch
175+ ( long "extra-deps-revision-latest"
176+ <> help "Changes algorithm for the dependencies generation of the stack.yaml extra-deps. Default one is to generate exact revision defined in the Stackage config. With this flag enabled, direct dependencies of the stack.yaml extra-deps will be generated with the latest revision available on Hackage. This may help when Cabal fails to resolve dependencies of extra-deps, and dependences are fixed in the latest revision" )
177+
178+tweaks :: Parser Tweaks
179+tweaks = Tweaks <$> extraDepsRevisionLatest
180+
181+resolver :: Parser StackResolver
182+resolver = StackResolver <$> option text
183+ ( long "resolver"
184+ <> help "stackage LTS resolver" )
185+
186+stackYamlArg :: Parser StackYaml
187+stackYamlArg = mkStackYaml <$> Opts.argument str
111188 ( metavar "STACK_YAML"
112189 <> help "path to stack.yaml file or directory" )
113190
114−-- inherited from cabal2nix
191+target :: Parser Target
192+target =
193+ withStackage *> pure TargetStackagePackages <|>
194+ withStackageClosure *> pure TargetStackageClosure <|>
195+ pure TargetStackageOverride
115196
116−hackageDb :: Parser HackageDb
117−hackageDb = HackageDb <$>
118− option text
119− ( long "hackage-db"
120− <> metavar "HACKAGE_DB"
121− <> help "path to the local hackage db in tar format" )
197+configOrigin :: Parser ConfigOrigin
198+configOrigin =
199+ OriginStackYaml <$> stackYamlArg <*> target <|>
200+ OriginResolver <$> resolver
201+
202+-- required for cabal2nix
203+
204+optionHackageDb :: Parser FilePath
205+optionHackageDb = option str
206+ ( long "hackage-db"
207+ <> metavar "HACKAGE_DB"
208+ <> help "path to the local hackage db in tar format" )
122209
123210cabalFlag :: Parser CabalFlag
124211cabalFlag = CabalFlag <$>
src/Stack/Config.hs+138−37
@@ -3,16 +3,17 @@
33module Stack.Config where
44
55import Control.Lens
6−import Data.Bifunctor
76import Data.ByteString as BS
87import Data.Coerce
8+import Data.List as L
9+import Data.List.NonEmpty as NE
910import Data.Maybe
1011import Data.Text as T
1112import Data.Yaml
1213import Network.URI
1314import Stack.Config.Yaml as Yaml
1415import Stack.Types
15−import System.FilePath
16+import System.FilePath as FilePath
1617
1718
1819newtype StackResolver = StackResolver { fromStackResolver :: Text }
@@ -23,70 +24,170 @@ makePrisms ''StackResolver
2324unStackResolver :: StackResolver -> String
2425unStackResolver = T.unpack . fromStackResolver
2526
26−data RepoGit = RepoGit
27− { _rgUri :: !Text
28− , _rgCommit :: !Text
27+newtype Vcs = Vcs { fromVcs :: Text }
28+ deriving (Eq, Ord, Show)
29+
30+data Repo = Repo
31+ { _rVcs :: Vcs
32+ , _rUri :: Text
33+ , _rCommit :: Text
34+ } deriving (Eq, Ord, Show)
35+
36+makeLenses ''Repo
37+
38+data PackageRevision
39+ = PrSha256 Text
40+ | PrRev Text
41+ deriving (Eq, Ord, Show)
42+
43+makePrisms ''PackageRevision
44+
45+data PackageIndex = PackageIndex
46+ { _piNameVersion :: Text
47+ , _piRevision :: Maybe PackageRevision
2948 } deriving (Eq, Ord, Show)
3049
31−makeLenses ''RepoGit
50+makeLenses ''PackageIndex
3251
3352data PackageLocation
34− = HackagePackage Text
35− | StackFilePath FilePath
36− | StackUri URI
37− | StackRepoGit RepoGit
53+ = PlIndex PackageIndex
54+ | PlFilePath FilePath
55+ | PlUri URI
56+ | PlRepo Repo
3857 deriving (Eq, Ord, Show)
3958
4059makePrisms ''PackageLocation
4160
4261data StackPackage = StackPackage
43− { _spLocation :: !PackageLocation
44− , _spExtraDep :: !Bool
62+ { _spLocation :: PackageLocation
63+ , _spExtraDep :: Bool
64+ -- | Subdirectory containing the cabal file if any specified.
65+ , _spDir :: Maybe FilePath
4566 } deriving (Eq, Ord, Show)
4667
4768makeLenses ''StackPackage
4869
4970data StackConfig = StackConfig
50− { _scResolver :: !StackResolver
51− , _scPackages :: ![StackPackage]
71+ { _scResolver :: StackResolver
72+ , _scPackages :: NonEmpty StackPackage
73+ , _scExtraDeps :: [StackPackage]
5274 } deriving (Eq, Ord, Show)
5375
5476makeLenses ''StackConfig
5577
78+scAllPackages :: Getter StackConfig (NonEmpty StackPackage)
79+scAllPackages = to allPs
80+ where
81+ allPs sc = maybe ps ((<>) ps) (NE.nonEmpty ed)
82+ where
83+ ps = sc ^. scPackages
84+ ed = sc ^. scExtraDeps
85+
5686fromYamlConfig :: Yaml.Config -> StackConfig
5787fromYamlConfig c = StackConfig{..}
5888 where
5989 _scResolver = coerce $ c ^. cResolver
60− _scPackages =
61− (fromYamlPackage <$> c ^. cPackages . to (fromMaybe mempty)) ++
62− (fromYamlExtraDep <$> c ^. cExtraDeps . to (fromMaybe mempty))
63−
64−fromYamlPackage :: Yaml.Package -> StackPackage
65−fromYamlPackage = \case
66− Yaml.Simple p ->
67− StackPackage (parseSimplePath p) False
68− Yaml.LocationSimple (Yaml.Location p extraDep) ->
69− StackPackage (parseSimplePath p) (fromMaybe False extraDep)
70− Yaml.LocationGit (Location git extraDep) ->
71− StackPackage (StackRepoGit $ fromYamlGit git) (fromMaybe False extraDep)
90+ -- 'nub' replicates Stack behavior of having a Set of packages rather than list
91+ _scPackages = NE.nub nePackages
92+ _scExtraDeps = L.nub $ extraDeps ++ yamlExtraDeps
93+ nePackages = fromMaybe (pure defaultPackage)
94+ $ NE.nonEmpty packages
95+ -- yaml packages section can contain extra-deps
96+ (extraDeps, packages) = L.partition (view spExtraDep) yamlPackages
97+ yamlPackages = L.concatMap NE.toList
98+ $ fromYamlPackage packagesSimplePath False
99+ <$> fromMaybe mempty (c ^. cPackages)
100+ yamlExtraDeps = L.concatMap NE.toList
101+ $ fromYamlPackage extraDepsSimplePath True
102+ <$> fromMaybe mempty (c ^. cExtraDeps)
103+ defaultPackage = StackPackage (PlFilePath ".") False Nothing
104+
105+-- | Simple string in a packages section can be an URI or FilePath location
106+packagesSimplePath :: Text -> StackPackage
107+packagesSimplePath t = StackPackage (parseSimplePath t) False Nothing
108+
109+-- | Parse location as URI or a FilePath
110+parseSimplePath :: Text -> PackageLocation
111+parseSimplePath (T.unpack -> p) = maybe (PlFilePath p) PlUri $ parseURI p
112+
113+-- | Simple string in an extra-deps section can be an URI or FilePath or PackageIndex name-version
114+extraDepsSimplePath :: Text -> StackPackage
115+extraDepsSimplePath t = StackPackage loc True Nothing
72116 where
73− parseSimplePath (T.unpack -> p) = maybe (StackFilePath p) StackUri $ parseURI p
74−
75−fromYamlExtraDep :: Text -> StackPackage
76−fromYamlExtraDep = flip StackPackage True . HackagePackage
77−
78−fromYamlGit :: Yaml.Git -> RepoGit
79−fromYamlGit yg = RepoGit{..}
117+ loc = maybe (parsePackageIndex t) PlUri $ parseURI (T.unpack t)
118+
119+-- TODO: support new package index format with hash and revision
120+parsePackageIndex :: Text -> PackageLocation
121+parsePackageIndex t = if isFilePath t
122+ then PlFilePath (T.unpack t)
123+ else PlIndex $ PackageIndex t Nothing
124+
125+-- Determine wether package is file path
126+isFilePath :: Text -> Bool
127+isFilePath = T.any (== FilePath.pathSeparator)
128+
129+-- | A single 'Yaml.Package' can result in multiple actual
130+-- packages if it has multiple subdirs specified.
131+fromYamlPackage
132+ :: (Text -> StackPackage)
133+ -> Bool
134+ -> Yaml.Package
135+ -> NonEmpty StackPackage
136+fromYamlPackage fromSimple isExtraDep = \case
137+ Yaml.PSimple p ->
138+ pure (fromSimple p)
139+ Yaml.PLocationSimple (Location p extraDep ms) ->
140+ unroll ms $ StackPackage (parseSimplePath p) (fromMaybe False extraDep)
141+ Yaml.PLocationGit loc ->
142+ mkStackPackageRepo fromYamlGit loc
143+ Yaml.PLocationHg loc ->
144+ mkStackPackageRepo fromYamlHg loc
145+ Yaml.PArchive a ->
146+ unroll (a ^. aSubdirs) $ StackPackage (a ^. aArchive . to parseSimplePath) isExtraDep
147+ Yaml.PNewGit ng -> unroll (ng ^. ngSubdirs)
148+ $ StackPackage (PlRepo $ fromYamlNewGit ng) isExtraDep
149+ Yaml.PNewHg nh -> unroll (nh ^. nhSubdirs)
150+ $ StackPackage (PlRepo $ fromYamlNewHg nh) isExtraDep
80151 where
81− _rgUri = yg ^. gGit
82− _rgCommit = yg ^. gCommit
152+ mkStackPackageRepo f loc = unroll (loc ^. lSubdirs)
153+ $ StackPackage (PlRepo (loc ^. lLocation . to f)) (fromMaybe isExtraDep $ loc ^. lExtraDep)
154+ -- Each package gets a single directory with cabal file in it. If
155+ -- it's not specified, path is empty.
156+ unroll subs p = case subs of
157+ Just (x : xs) -> NE.map (p . Just) (x :| xs)
158+ _ -> p Nothing :| []
159+
160+fromYamlGit :: Yaml.Git -> Repo
161+fromYamlGit yg = Repo
162+ { _rVcs = Vcs "git"
163+ , _rUri = yg ^. gGit
164+ , _rCommit = yg ^. gCommit }
165+
166+fromYamlHg :: Yaml.Hg -> Repo
167+fromYamlHg yh = Repo
168+ { _rVcs = Vcs "hg"
169+ , _rUri = yh ^. hHg
170+ , _rCommit = yh ^. hCommit }
171+
172+fromYamlNewGit :: NewGit -> Repo
173+fromYamlNewGit ng = Repo
174+ { _rVcs = Vcs "git"
175+ , _rUri = ng ^. ngGit
176+ , _rCommit = ng ^. ngCommit }
177+
178+fromYamlNewHg :: NewHg -> Repo
179+fromYamlNewHg nh = Repo
180+ { _rVcs = Vcs "hg"
181+ , _rUri = nh ^. nhHg
182+ , _rCommit = nh ^. nhCommit }
83183
84184readStackConfig :: StackYaml -> IO (Either String StackConfig)
85185readStackConfig stackYaml = do
86186 let
87187 relativeToStackYaml = \case
88− StackFilePath p -> StackFilePath $ stackYaml ^. syDirName </> p
188+ PlFilePath p -> PlFilePath $ stackYaml ^. syDirName </> p
89189 packageLocation -> packageLocation
90190 mkStackConfig = over (scPackages . traversed . spLocation) relativeToStackYaml
191+ . over (scExtraDeps . traversed . spLocation) relativeToStackYaml
91192 . fromYamlConfig
92− second mkStackConfig . decodeEither <$> BS.readFile (stackYaml ^. syFilePath)
193+ bimap show mkStackConfig . decodeEither' <$> BS.readFile (stackYaml ^. syFilePath)
src/Stack/Config/Yaml.hs+68−18
@@ -8,47 +8,97 @@ import Data.Text as T
88import Stack.Config.TH
99
1010data Location a = Location
11− { _lLocation :: !a
12− , _lExtraDep :: !(Maybe Bool)
11+ { _lLocation :: a
12+ , _lExtraDep :: Maybe Bool
13+ , _lSubdirs :: Maybe [FilePath]
1314 } deriving (Eq, Show)
1415
1516makeLenses ''Location
16−
1717deriveJSON jsonOpts ''Location
1818
19+data Archive = Archive
20+ { _aArchive :: Text
21+ , _aSha256 :: Maybe Text
22+ , _aSubdirs :: Maybe [FilePath]
23+ } deriving (Eq, Show)
24+
25+makeLenses ''Archive
26+deriveJSON jsonOpts ''Archive
27+
1928data Git = Git
20− { _gGit :: !Text
21− , _gCommit :: !Text
29+ { _gGit :: Text
30+ , _gCommit :: Text
2231 } deriving (Eq, Show)
2332
2433makeLenses ''Git
25−
2634deriveJSON jsonOpts ''Git
2735
36+data Hg = Hg
37+ { _hHg :: Text
38+ , _hCommit :: Text
39+ } deriving (Eq, Show)
40+
41+makeLenses ''Hg
42+deriveJSON jsonOpts ''Hg
43+
44+-- New syntax
45+
46+data NewGit = NewGit
47+ { _ngGit :: Text
48+ , _ngCommit :: Text
49+ , _ngSubdirs :: Maybe [FilePath]
50+ } deriving (Eq, Show)
51+
52+makeLenses ''NewGit
53+deriveJSON jsonOpts ''NewGit
54+
55+data NewHg = NewHg
56+ { _nhHg :: Text
57+ , _nhCommit :: Text
58+ , _nhSubdirs :: Maybe [FilePath]
59+ } deriving (Eq, Show)
60+
61+makeLenses ''NewHg
62+deriveJSON jsonOpts ''NewHg
63+
2864data Package
29− = Simple Text
30− | LocationSimple (Location Text)
31− | LocationGit (Location Git)
65+ = PSimple Text
66+ | PLocationSimple (Location Text)
67+ | PLocationGit (Location Git)
68+ | PLocationHg (Location Hg)
69+ | PArchive Archive
70+ | PNewGit NewGit
71+ | PNewHg NewHg
3272 deriving (Eq, Show)
3373
3474makePrisms ''Package
3575
3676instance FromJSON Package where
3777 parseJSON v =
38− (Simple <$> parseJSON v) <|>
39− (LocationSimple <$> parseJSON v) <|>
40− (LocationGit <$> parseJSON v)
78+ (PSimple <$> parseJSON v) <|>
79+ (PLocationSimple <$> parseJSON v) <|>
80+ (PLocationGit <$> parseJSON v) <|>
81+ (PLocationHg <$> parseJSON v) <|>
82+ (PArchive <$> parseJSON v) <|>
83+ (PNewGit <$> parseJSON v) <|>
84+ (PNewHg <$> parseJSON v)
4185
4286instance ToJSON Package where
4387 toJSON = \case
44− Simple t -> toJSON t
45− LocationSimple t -> toJSON t
46− LocationGit t -> toJSON t
88+ PSimple t -> toJSON t
89+ PLocationSimple t -> toJSON t
90+ PLocationGit t -> toJSON t
91+ PLocationHg t -> toJSON t
92+ PArchive t -> toJSON t
93+ PNewGit t -> toJSON t
94+ PNewHg t -> toJSON t
4795
96+-- To support both old and new syntax, we allow all variants of package
97+-- definitions in "packages" and "extra-deps" sections
4898data Config = Config
49− { _cResolver :: !Text
50− , _cPackages :: !(Maybe [Package])
51− , _cExtraDeps :: !(Maybe [Text])
99+ { _cResolver :: Text
100+ , _cPackages :: Maybe [Package]
101+ , _cExtraDeps :: Maybe [Package]
52102 } deriving (Eq, Show)
53103
54104makeLenses ''Config
src/Stack/Types.hs+3−4
@@ -1,5 +1,3 @@
1−{-# LANGUAGE TemplateHaskell #-}
2−
31module Stack.Types where
42
53import Control.Lens
@@ -8,8 +6,9 @@ import System.FilePath
86
97
108data StackYaml = StackYaml
11− { _syDirName :: !FilePath
12− , _syFileName :: !FilePath }
9+ { _syDirName :: FilePath
10+ , _syFileName :: FilePath }
11+ deriving (Ord, Eq, Show)
1312
1413makeLenses ''StackYaml
1514
stack.yaml+10−9
@@ -1,10 +1,11 @@
1−resolver: lts-8.15
2−packages:
3−- '.'
4−- location:
5− git: https://github.com/4e6/cabal2nix.git
6− commit: 2a87207751b4f4949987c995c3962e142172312a
7− extra-dep: true
1+resolver: lts-12.2
82extra-deps:
9−- distribution-nixpkgs-1.1
10−- hopenssl-2.2
3+ - yaml-0.8.31.1
4+ - git: https://github.com/fpco/stackage-curator.git
5+ commit: 73c5ed06602990c33d3fec1711e27875f283b6bf
6+ - git: https://github.com/jwiegley/gitlib.git
7+ commit: 70c99759b8b9377f67492fe29afb32f05882409d
8+ subdirs:
9+ - gitlib
10+ - gitlib-libgit2
11+
stack2nix.cabal → stackage2nix.cabalrenamed+29−14
@@ -1,19 +1,23 @@
1−name: stack2nix
2−version: 0.1.0.0
1+name: stackage2nix
2+version: 0.7.2
33synopsis: Convert Stack files into Nix build instructions.
4−homepage: https://github.com/4e6/stack2nix#readme
4+homepage: https://github.com/typeable/stackage2nix#readme
55license: BSD3
66license-file: LICENSE
77author: Dmitry Bushev
8+ , Benno Fünfstück
89maintainer: bushevdv@gmail.com
910category: Distribution, Nix
1011build-type: Simple
1112extra-source-files: README.md
1213cabal-version: >=1.10
14+extra-source-files: CHANGELOG.md
1315
1416library
1517 hs-source-dirs: src
16− exposed-modules: Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting
18+ exposed-modules: Distribution.Nixpkgs.Haskell.FromStack
19+ , Distribution.Nixpkgs.Haskell.FromStack.Package
20+ , Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting
1721 , Distribution.Nixpkgs.Haskell.Stack
1822 , Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting
1923 , Language.Nix.FilePath
@@ -23,38 +27,47 @@ library
2327 , Stack.Config.TH
2428 , Stack.Config.Yaml
2529 , Stack.Types
30+ other-modules: AllCabalHashes
31+ , LtsHaskell
32+ , Paths_stackage2nix
2633 build-depends: base > 4.7 && < 5
27− , Cabal > 1.24
34+ , Cabal > 2.2
2835 , QuickCheck
2936 , aeson
3037 , bytestring
31− , cabal2nix >= 2.3
38+ , cabal2nix >= 2.7.2
3239 , containers
3340 , deepseq
3441 , distribution-nixpkgs >= 1.1
42+ , exceptions > 0.8
3543 , filepath
36− , inflections
44+ , gitlib > 3
45+ , gitlib-libgit2 > 3
46+ , hopenssl > 2.2
47+ , inflections >= 0.3
3748 , language-nix
3849 , lens
3950 , network-uri
4051 , optparse-applicative
4152 , pretty
42− , stackage-curator
53+ , stackage-curator >= 0.15
54+ , tagged
4355 , text
56+ , unordered-containers
4457 , yaml
4558 default-extensions: LambdaCase
4659 , OverloadedStrings
4760 , RecordWildCards
4861 , TemplateHaskell
4962 default-language: Haskell2010
50− ghc-options: -Wall -funbox-strict-fields
63+ ghc-options: -Wall
5164
52−executable stack2nix
53− hs-source-dirs: app
65+executable stackage2nix
66+ hs-source-dirs: stackage2nix
5467 main-is: Main.hs
5568 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
5669 build-depends: base
57− , stack2nix
70+ , stackage2nix
5871 default-language: Haskell2010
5972
6073test-suite spec
@@ -65,18 +78,20 @@ test-suite spec
6578 , Cabal
6679 , bytestring
6780 , hspec
81+ , network-uri
6882 , pretty
6983 , shakespeare
70− , stack2nix
84+ , stackage2nix
7185 , text
7286 , yaml
7387 default-extensions: OverloadedStrings
7488 other-modules: Language.Nix.FilePathSpec
7589 , PrettyPrintingSpec
7690 , Stack.Config.YamlSpec
91+ , Stack.ConfigSpec
7792 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
7893 default-language: Haskell2010
7994
8095source-repository head
8196 type: git
82− location: https://github.com/4e6/stack2nix
97+ location: https://github.com/typeable/stackage2nix
app/Main.hs → stackage2nix/Main.hsrenamed

The content is the same.

test/Stack/Config/YamlSpec.hs+109−13
@@ -1,7 +1,7 @@
11{-# LANGUAGE OverloadedStrings #-}
22{-# LANGUAGE QuasiQuotes #-}
33
4−module Stack.Config.YamlSpec where
4+module Stack.Config.YamlSpec (spec) where
55
66import Data.ByteString
77import Data.Text.Encoding as T
@@ -28,15 +28,59 @@ packages:
2828 - location:
2929 git: git@github.com:commercialhaskell/stack.git
3030 commit: 6a86ee32e5b869a877151f74064572225e1a0398
31+ - location:
32+ git: git@github.com:example/mega-repo
33+ commit: 6a86ee32e5b869a877151f74064572225e1a0000
34+ subdirs:
35+ - subdir1
36+ - subdir2
3137# Comment
3238extra-deps:
3339- acme-missiles-0.3
3440|]
3541
42+-- | New yaml config support all package definitions in "extra-deps" section
43+configNewYaml :: ByteString
44+configNewYaml = T.encodeUtf8 [st|
45+resolver: lts-3.7
46+packages:
47+ - .
48+ - location: dir1/dir2
49+ - location: https://example.com/foo/bar/baz-0.0.2.tar.gz
50+ extra-dep: true
51+ - location:
52+ git: git@github.com:commercialhaskell/stack.git
53+ commit: 6a86ee32e5b869a877151f74064572225e1a0398
54+ - location:
55+ git: git@github.com:example/mega-repo
56+ commit: 6a86ee32e5b869a877151f74064572225e1a0000
57+ subdirs:
58+ - subdir1
59+ - subdir2
60+# Comment
61+extra-deps:
62+ - acme-missiles-0.3
63+ - acme-missiles-hash-0.4@sha256:2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1
64+ - acme-missiles-rev-0.5@rev:0
65+ - git: git@github.com:commercialhaskell/stack.git
66+ commit: 6a86ee32e5b869a877151f74064572225e1a0398
67+ - git: git@github.com:example/mega-repo
68+ commit: 6a86ee32e5b869a877151f74064572225e1a0000
69+ subdirs:
70+ - subdir1
71+ - subdir2
72+ - archive: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip
73+ subdirs:
74+ - wai
75+ - warp
76+ - archive: ../acme-missiles-0.3.tar.gz
77+ sha256: e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b
78+|]
79+
3680configMinimal :: Config
3781configMinimal = Config
3882 { _cResolver = "lts-8.15"
39− , _cPackages = Just [ Simple "." ]
83+ , _cPackages = Just [ PSimple "." ]
4084 , _cExtraDeps = Nothing
4185 }
4286
@@ -44,21 +88,73 @@ config :: Config
4488config = Config
4589 { _cResolver = "lts-3.7"
4690 , _cPackages = Just
47− [ Simple "."
48− , LocationSimple (Location "dir1/dir2" Nothing)
49− , LocationSimple (Location "https://example.com/foo/bar/baz-0.0.2.tar.gz" (Just True))
50− , LocationGit $ Location
91+ [ PSimple "."
92+ , PLocationSimple (Location "dir1/dir2" Nothing Nothing)
93+ , PLocationSimple (Location "https://example.com/foo/bar/baz-0.0.2.tar.gz" (Just True) Nothing)
94+ , PLocationGit $ Location
5195 (Git
5296 "git@github.com:commercialhaskell/stack.git"
5397 "6a86ee32e5b869a877151f74064572225e1a0398")
54− Nothing]
98+ Nothing Nothing
99+ , PLocationGit (Location
100+ (Git
101+ "git@github.com:example/mega-repo"
102+ "6a86ee32e5b869a877151f74064572225e1a0000")
103+ Nothing (Just ["subdir1", "subdir2"]))
104+ ]
55105 , _cExtraDeps = Just
56− ["acme-missiles-0.3"]
106+ [PSimple "acme-missiles-0.3"]
107+ }
108+
109+configNew :: Config
110+configNew = Config
111+ { _cResolver = "lts-3.7"
112+ , _cPackages = Just
113+ [ PSimple "."
114+ , PLocationSimple (Location "dir1/dir2" Nothing Nothing)
115+ , PLocationSimple (Location "https://example.com/foo/bar/baz-0.0.2.tar.gz" (Just True) Nothing)
116+ , PLocationGit $ Location
117+ (Git
118+ "git@github.com:commercialhaskell/stack.git"
119+ "6a86ee32e5b869a877151f74064572225e1a0398")
120+ Nothing Nothing
121+ , PLocationGit (Location
122+ (Git
123+ "git@github.com:example/mega-repo"
124+ "6a86ee32e5b869a877151f74064572225e1a0000")
125+ Nothing (Just ["subdir1", "subdir2"]))
126+ ]
127+ , _cExtraDeps = Just
128+ [ PSimple "acme-missiles-0.3"
129+ , PSimple "acme-missiles-hash-0.4@sha256:2ba66a092a32593880a87fb00f3213762d7bca65a687d45965778deb8694c5d1"
130+ , PSimple "acme-missiles-rev-0.5@rev:0"
131+ , PNewGit $ NewGit
132+ "git@github.com:commercialhaskell/stack.git"
133+ "6a86ee32e5b869a877151f74064572225e1a0398"
134+ Nothing
135+ , PNewGit $ NewGit
136+ "git@github.com:example/mega-repo"
137+ "6a86ee32e5b869a877151f74064572225e1a0000"
138+ (Just ["subdir1", "subdir2"])
139+ , PArchive $ Archive
140+ "http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip"
141+ Nothing
142+ (Just ["wai", "warp"])
143+ , PArchive $ Archive
144+ "../acme-missiles-0.3.tar.gz"
145+ (Just "e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b")
146+ Nothing
147+ ]
57148 }
58149
59150spec :: Spec
60−spec = describe "Parse" $ do
61− specify "config-minimal" $
62− (Y.decode configYamlMinimal :: Maybe Config) `shouldBe` Just configMinimal
63− specify "config-full" $
64− (Y.decode configYaml :: Maybe Config) `shouldBe` Just config
151+spec = describe "Config" $ do
152+ specify "minimal" $
153+ (decodeMaybe configYamlMinimal :: Maybe Config) `shouldBe` Just configMinimal
154+ specify "full" $
155+ (decodeMaybe configYaml :: Maybe Config) `shouldBe` Just config
156+ specify "new" $
157+ (decodeMaybe configNewYaml :: Maybe Config) `shouldBe` Just configNew
158+
159+decodeMaybe :: ByteString -> Maybe Config
160+decodeMaybe = either (const Nothing) id . Y.decodeEither'
test/Stack/ConfigSpec.hsnew file+191
@@ -0,0 +1,191 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+{-# LANGUAGE QuasiQuotes #-}
3+
4+module Stack.ConfigSpec (spec) where
5+
6+import Data.ByteString
7+import Data.List.NonEmpty as NE
8+import Data.Text.Encoding as T
9+import Data.Yaml as Y
10+import Network.URI as URI
11+import Stack.Config
12+import Test.Hspec
13+import Text.Shakespeare.Text
14+
15+
16+spec :: Spec
17+spec = describe "StackConfig" $ do
18+ specify "minimal"
19+ $ checkYamlConfig minimalBs minimalConf
20+ specify "packageDefault"
21+ $ checkYamlConfig packageDefaultBs packageDefaultConf
22+ specify "packageSimpleList"
23+ $ checkYamlConfig packageSimpleListBs packageSimpleListConf
24+ specify "packageLocations"
25+ $ checkYamlConfig packageLocationsBs packageLocationsConf
26+ specify "packageExtraDeps"
27+ $ checkYamlConfig packageExtraDepsBs packageExtraDepsConf
28+ specify "packageMixed"
29+ $ checkYamlConfig packageMixedBs packageMixedConf
30+ specify "packageExtraDepsNew"
31+ $ checkYamlConfig packageExtraDepsNewBs packageExtraDepsNewConf
32+
33+parseYamlConfig :: ByteString -> Maybe StackConfig
34+parseYamlConfig = either (const Nothing) (Just . fromYamlConfig) . Y.decodeEither'
35+
36+checkYamlConfig :: ByteString -> StackConfig -> Expectation
37+checkYamlConfig bs sc = parseYamlConfig bs `shouldBe` Just sc
38+
39+stUri :: String -> URI
40+stUri s =
41+ let Just uri = parseURI s
42+ in uri
43+
44+minimalBs :: ByteString
45+minimalBs = T.encodeUtf8 [st|
46+resolver: lts-10.0
47+|]
48+
49+minimalConf :: StackConfig
50+minimalConf = StackConfig
51+ { _scResolver = StackResolver "lts-10.0"
52+ , _scPackages = NE.fromList
53+ [ StackPackage (PlFilePath ".") False Nothing]
54+ , _scExtraDeps = []
55+ }
56+
57+packageDefaultBs :: ByteString
58+packageDefaultBs = T.encodeUtf8 [st|
59+resolver: lts-10.0
60+packages:
61+ - .
62+|]
63+
64+packageDefaultConf :: StackConfig
65+packageDefaultConf = minimalConf
66+
67+packageSimpleListBs :: ByteString
68+packageSimpleListBs = T.encodeUtf8 [st|
69+resolver: lts-10.0
70+packages:
71+ - client
72+ - server
73+|]
74+
75+packageSimpleListConf :: StackConfig
76+packageSimpleListConf = StackConfig
77+ { _scResolver = StackResolver "lts-10.0"
78+ , _scPackages = NE.fromList
79+ [ StackPackage (PlFilePath "client") False Nothing
80+ , StackPackage (PlFilePath "server") False Nothing ]
81+ , _scExtraDeps = []
82+ }
83+
84+packageLocationsBs :: ByteString
85+packageLocationsBs = T.encodeUtf8 [st|
86+resolver: lts-10.0
87+packages:
88+ - location: humble/package
89+ subdirs:
90+ - client
91+ - server
92+ - location: https://example.com/foo/bar/baz-0.0.2.tar.gz
93+ extra-dep: true
94+ subdirs:
95+ - extra
96+ - location:
97+ git: git@github.com:example/mega-repo
98+ commit: 6a86ee32e5b869a877151f74064572225e1a0000
99+ subdirs:
100+ - subdir1
101+ - subdir2
102+ extra-dep: true
103+|]
104+
105+packageLocationsConf :: StackConfig
106+packageLocationsConf = StackConfig
107+ { _scResolver = StackResolver "lts-10.0"
108+ , _scPackages = NE.fromList
109+ [ StackPackage (PlFilePath "humble/package") False (Just "client")
110+ , StackPackage (PlFilePath "humble/package") False (Just "server") ]
111+ , _scExtraDeps =
112+ [ StackPackage (PlUri $ stUri "https://example.com/foo/bar/baz-0.0.2.tar.gz") True (Just "extra")
113+ , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:example/mega-repo" "6a86ee32e5b869a877151f74064572225e1a0000") True (Just "subdir1")
114+ , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:example/mega-repo" "6a86ee32e5b869a877151f74064572225e1a0000") True (Just "subdir2")
115+ ]
116+ }
117+
118+packageExtraDepsBs :: ByteString
119+packageExtraDepsBs = T.encodeUtf8 [st|
120+resolver: lts-10.0
121+extra-deps:
122+ - acme-missiles-0.3
123+ - humble-package-1
124+|]
125+
126+packageExtraDepsConf :: StackConfig
127+packageExtraDepsConf = StackConfig
128+ { _scResolver = StackResolver "lts-10.0"
129+ , _scPackages = NE.fromList [ StackPackage (PlFilePath ".") False Nothing ]
130+ , _scExtraDeps =
131+ [ StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
132+ , StackPackage (PlIndex $ PackageIndex "humble-package-1" Nothing) True Nothing ]
133+ }
134+
135+packageMixedBs :: ByteString
136+packageMixedBs = T.encodeUtf8 [st|
137+resolver: lts-10.0
138+packages:
139+ - client
140+ - server
141+extra-deps:
142+ - acme-missiles-0.3
143+ - humble-package-1
144+|]
145+
146+packageMixedConf :: StackConfig
147+packageMixedConf = StackConfig
148+ { _scResolver = StackResolver "lts-10.0"
149+ , _scPackages = NE.fromList
150+ [ StackPackage (PlFilePath "client") False Nothing
151+ , StackPackage (PlFilePath "server") False Nothing ]
152+ , _scExtraDeps =
153+ [ StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
154+ , StackPackage (PlIndex $ PackageIndex "humble-package-1" Nothing) True Nothing ]
155+ }
156+
157+packageExtraDepsNewBs :: ByteString
158+packageExtraDepsNewBs = T.encodeUtf8 [st|
159+resolver: lts-10.0
160+extra-deps:
161+ - vendor/lib
162+ - acme-missiles-0.3
163+ - git: git@github.com:yesodweb/wai
164+ commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f
165+ subdirs:
166+ - auto-update
167+ - wai
168+ - https://example.com/foo/bar/baz-0.0.2.tar.gz
169+ - archive: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip
170+ subdirs:
171+ - wai
172+ - warp
173+ - archive: ../acme-missiles-0.3.tar.gz
174+ sha256: e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b
175+|]
176+
177+packageExtraDepsNewConf :: StackConfig
178+packageExtraDepsNewConf = StackConfig
179+ { _scResolver = StackResolver "lts-10.0"
180+ , _scPackages = NE.fromList [ StackPackage (PlFilePath ".") False Nothing ]
181+ , _scExtraDeps =
182+ [ StackPackage (PlFilePath "vendor/lib") True Nothing
183+ , StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
184+ , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:yesodweb/wai" "2f8a8e1b771829f4a8a77c0111352ce45a14c30f") True (Just "auto-update")
185+ , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:yesodweb/wai" "2f8a8e1b771829f4a8a77c0111352ce45a14c30f") True (Just "wai")
186+ , StackPackage (PlUri $ stUri "https://example.com/foo/bar/baz-0.0.2.tar.gz") True Nothing
187+ , StackPackage (PlUri $ stUri "http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip") True (Just "wai")
188+ , StackPackage (PlUri $ stUri "http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip") True (Just "warp")
189+ , StackPackage (PlFilePath "../acme-missiles-0.3.tar.gz") True Nothing
190+ ]
191+ }