git.iko.soy/typeable/stackage2nix
on master help sign in
.gitignore+1
since splitsnapshots
unifiedsplit
@@ -1,3 +1,4 @@
1.stack-work
1.stack-work
2Paths_stackage2nix.hs
2Paths_stackage2nix.hs
3/*.nix
3/*.nix
4+/result*
.travis.yml+19−15
@@ -11,30 +11,34 @@ cache:
11 directories:
11 directories:
12 - $HOME/.local/bin
12 - $HOME/.local/bin
13 - $HOME/.stack
13 - $HOME/.stack
14− - $HOME/.nix
15
14
16jobs:
15jobs:
17 include:
16 include:
18− - stage: test
17+ - stage: build
19− script:
20− - stack --no-terminal --install-ghc build --fast --only-dependencies
21− - stack --no-terminal --install-ghc test --fast --pedantic
22− - stack --no-terminal install
23 - stage: bootstrap
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
24 script:
30 script:
25− - nix-env -i cabal-install
31+ - nix-env -i cabal-install nix-prefetch-scripts
26 - cabal update
32 - cabal update
33+ - nix-build nix/stackage2nix --dry-run
27− - ./stackage2nix-test --dry-run
34+ - ./ci-stackage2nix --dry-run
28
35
29before_install:
36before_install:
30# Download and unpack the stack executable
37# Download and unpack the stack executable
31- mkdir -p ~/.local/bin
38- mkdir -p ~/.local/bin
32- export PATH=$HOME/.local/bin:$PATH
39- export PATH=$HOME/.local/bin:$PATH
33- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
40- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
34−# Install Nix
41+
35−- mkdir -p ~/.nix
42+script:
36−- sudo mkdir -p /nix
43+- stack --no-terminal --install-ghc build --test --haddock --no-haddock-deps --copy-bins --fast --pedantic
37−- sudo chmod a+w /nix
44+
38−- sudo mount --bind ~/.nix /nix
39−- curl https://nixos.org/nix/install | sh
40−- source ~/.nix-profile/etc/profile.d/nix.sh
CHANGELOG.md+46−1
@@ -1,4 +1,49 @@
1−# 0.3.0
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
2
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
3- Initial Hackage release
48- Initial Hackage release
4- Add CHANGELOG.md
49- Add CHANGELOG.md
README.md+75−24
@@ -1,42 +1,88 @@
1−# stackage2nix
1+# stackage2nix (DEPRECATED)
2
2
3[![Build Status](https://travis-ci.org/typeable/stackage2nix.svg?branch=master)](https://travis-ci.org/typeable/stackage2nix)
3[![Build Status](https://travis-ci.org/typeable/stackage2nix.svg?branch=master)](https://travis-ci.org/typeable/stackage2nix)
4
4
5`stackage2nix` converts a Stack file into a Nix Haskell packages set.
5`stackage2nix` converts a Stack file into a Nix Haskell packages set.
6−It creates LTS Stackage packages set, and applies appropriate overrides on top of it.
7
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
8```
37```
9−stackage2nix \
38+
10− --lts-haskell "$LTS_HASKELL_REPO" \
39+To generate Stackage packages, supply the `--all-cabal-hashes` flag
11− --all-cabal-hashes "$ALL_CABAL_HASHES_REPO" \
40+with the path to a local clone of
12− .
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
13```
53```
14
54
15−`stackage2nix` has three required arguments:
55+This command will produce `packages.nix` and `configuration-packages.nix`
16−- `--lts-haskell` - path to [fpco/lts-haskell](https://github.com/fpco/lts-haskell)
56+Stackage packages and its override in `default.nix`
17−- `--all-cabal-hashes` - path to [commercialhaskell/all-cabal-hashes](https://github.com/commercialhaskell/all-cabal-hashes) checked out to `hackage` branch
57+
18−- `.` - path to stack.yaml file or directory
58+## Generate full Stackage
19
59
20−Produced Nix derivation split on following files:
60+`--with-stackage` parameter generates full Stackage LTS in addition to the
21−- packages.nix - Base Stackage packages set
61+targets from `stack.yaml`
22−- configuration-packages.nix - Compiler configuration
23−- default.nix - Final Haskell packages set with all overrides applied
24
62
25−A particular package from result Haskell packages set can be built with:
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:
26
71
27```
72```
28−nix-build -A <package-name>
73+nix-env -i -f ./nix/stackage2nix
74+stackage2nix --resolver lts-10.0
29```
75```
30
76
31−See also the [blog post](https://blog.typeable.io/posts/2017-08-24-stackage2nix.html)
77+This command will produce Stackage packages `packages.nix`, packages config
32−about history and motivation behind the project.
78+`configuration-packages.nix` and a Haskell packages set `default.nix`.
33
79
34## Runtime dependencies
80## Runtime dependencies
35
81
36- `nix-env` is required to be on PATH by the
82- `nix-env` is required to be on PATH by the
37 [distribution-nixpkgs](https://hackage.haskell.org/package/distribution-nixpkgs)
83 [distribution-nixpkgs](https://hackage.haskell.org/package/distribution-nixpkgs)
38 dependency
84 dependency
39−- `nix-prefetch-git` is required on PATH if you have git dependencies in
85+- `nix-prefetch-scripts` is required on PATH if you have git dependencies in
40 `stack.yaml`
86 `stack.yaml`
41
87
42## Override result derivation
88## Override result derivation
@@ -45,9 +91,9 @@ Complex projects may require some extra customization.
45Snippet `override.nix` below shows a minimal example of how to apply additional
91Snippet `override.nix` below shows a minimal example of how to apply additional
46overrides on top of Haskell packages set produced by `stackage2nix`.
92overrides on top of Haskell packages set produced by `stackage2nix`.
47
93
48−```
94+``` nix
49with import <nixpkgs> {};
95with import <nixpkgs> {};
50−with pkgs.haskell.lib;
96+with haskell.lib;
51let haskellPackages = import ./. {};
97let haskellPackages = import ./. {};
52in haskellPackages.override {
98in haskellPackages.override {
53 overrides = self: super: {
99 overrides = self: super: {
@@ -62,8 +108,13 @@ nix-build -A stackage2nix override.nix
62
108
63For 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)
109For 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)
64
110
111+## Tests
65
112
66−## Examples
113+Integration tests that build stackage2nix form different yaml configs:
67
114
68−For other examples of `stackage2nix` usage, see [4e6/stackage2nix-examples](https://github.com/4e6/stackage2nix-examples) repository.
115+``` bash
69−It verifies `stackage2nix` by running it on different public projects.
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-stackage2nix+13−11
@@ -3,22 +3,24 @@
3set -e
3set -e
4
4
5STACKAGE2NIX_WORK_DIR=${STACKAGE2NIX_WORK_DIR:-$HOME}
5STACKAGE2NIX_WORK_DIR=${STACKAGE2NIX_WORK_DIR:-$HOME}
6−LTS_HASKELL_DIR=${LTS_HASKELL_DIR:-$STACKAGE2NIX_WORK_DIR/lts-haskell}
6+STACKAGE_REPO=${STACKAGE_REPO:-$STACKAGE2NIX_WORK_DIR/lts-haskell}
7−ALL_CABAL_HASHES_DIR=${ALL_CABAL_HASHES_DIR:-$STACKAGE2NIX_WORK_DIR/all-cabal-hashes}
7+ALL_CABAL_HASHES_REPO=${ALL_CABAL_HASHES_REPO:-$STACKAGE2NIX_WORK_DIR/all-cabal-hashes}
8+STACK_FILE=${STACK_YAML:-stack.yaml}
8
9
9−if [ ! -d "$LTS_HASKELL_DIR" ]; then
10+if [ ! -d "$STACKAGE_REPO" ]; then
10− git clone --depth 1 https://github.com/fpco/lts-haskell.git "$LTS_HASKELL_DIR"
11+ git clone --depth 1 https://github.com/commercialhaskell/lts-haskell.git "$STACKAGE_REPO"
11fi
12fi
12
13
13−if [ ! -d "$ALL_CABAL_HASHES_DIR" ]; then
14+if [ ! -d "$ALL_CABAL_HASHES_REPO" ]; then
14− git clone --depth 1 --branch hackage https://github.com/commercialhaskell/all-cabal-hashes.git "$ALL_CABAL_HASHES_DIR"
15+ git clone --branch hackage https://github.com/commercialhaskell/all-cabal-hashes.git "$ALL_CABAL_HASHES_REPO"
15fi
16fi
16
17
17set -x
18set -x
18−stack exec -- stackage2nix \
19+time stackage2nix \
19− --lts-haskell "$LTS_HASKELL_DIR" \
20+ --lts-haskell "$STACKAGE_REPO" \
20− --all-cabal-hashes "$ALL_CABAL_HASHES_DIR" \
21+ --all-cabal-hashes "$ALL_CABAL_HASHES_REPO" \
21 --hackage-db "$HOME/.cabal/packages/hackage.haskell.org/01-index.tar" \
22 --hackage-db "$HOME/.cabal/packages/hackage.haskell.org/01-index.tar" \
22− .
23+ --with-stackage-closure \
24+ "$STACK_FILE"
23
25
24−nix-build -A stackage2nix "$@"
26+nix-build -o "result-$(basename $STACK_FILE)" -A stackage2nix "$@"
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.hs+27−21
@@ -3,14 +3,14 @@ module AllCabalHashes where
3import Control.Lens hiding ((<.>))
3import Control.Lens hiding ((<.>))
4import Data.Aeson as A
4import Data.Aeson as A
5import Data.ByteString as BS
5import Data.ByteString as BS
6−import Data.ByteString.Lazy as BSL
6+import Data.ByteString.Char8 as B8
7import Data.Map as M
7import Data.Map as M
8+import Data.Tagged (Tagged(..))
8import Data.Text as T
9import Data.Text as T
9−import Data.Text.Encoding as T
10import Distribution.Nixpkgs.Hashes as NH
10import Distribution.Nixpkgs.Hashes as NH
11import Distribution.Package
11import Distribution.Package
12import Distribution.PackageDescription
12import Distribution.PackageDescription
13−import Distribution.PackageDescription.Parse
13+import Distribution.PackageDescription.Parsec
14import Distribution.Text ( display )
14import Distribution.Text ( display )
15import Git
15import Git
16import Git.Libgit2 as Libgit2
16import Git.Libgit2 as Libgit2
@@ -41,28 +41,34 @@ readPackageByHash repoDir sha1Hash = do
41 let repoOpts = defaultRepositoryOptions { repoPath = repoDir }
41 let repoOpts = defaultRepositoryOptions { repoPath = repoDir }
42 repo <- openLgRepository repoOpts
42 repo <- openLgRepository repoOpts
43 buf <- runLgRepository repo $ do
43 buf <- runLgRepository repo $ do
44− BlobObj (Blob _ contents) <- lookupObject =<< parseOid sha1Hash
44+ oid <- parseOid sha1Hash
45− case contents of
45+ catBlob (Tagged oid)
46− BlobString bs -> return bs
47− BlobStringLazy bsl -> return $ BSL.toStrict bsl
48− _ -> fail $ "Git SHA1 " ++ show sha1Hash ++ ": expected single Blob"
49− cabal <- case parseGenericPackageDescription (T.unpack $ T.decodeUtf8 buf) of
50− ParseOk _ a -> return a
51− ParseFailed err -> fail ("Git SHA1 " ++ show sha1Hash ++ ": " ++ show err)
46+ parseCabal ("Git SHA1 " ++ show sha1Hash) buf
52− let
53− hash = printSHA256 (digest (digestByName "sha256") buf)
54− pkg = setCabalFileHash hash cabal
55− return (pkg, hash)
56
47
57readPackageByName :: FilePath -> PackageIdentifier -> IO (GenericPackageDescription, SHA256Hash)
48readPackageByName :: FilePath -> PackageIdentifier -> IO (GenericPackageDescription, SHA256Hash)
58readPackageByName repoDir (PackageIdentifier name version) = do
49readPackageByName repoDir (PackageIdentifier name version) = do
59− let cabalFile = repoDir </> unPackageName name </> display version </> unPackageName name <.> "cabal"
50+ let cabalFile = unPackageName name </> display version </> unPackageName name <.> "cabal"
60− buf <- BS.readFile cabalFile
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
61− cabal <- case parseGenericPackageDescription (T.unpack $ T.decodeUtf8 buf) of
67+ cabal <- let (_, res) = runParseResult (parseGenericPackageDescription blob)
62− ParseOk _ a -> return a
68+ in case res of Right a -> return a
63− ParseFailed err -> fail (cabalFile ++ ": " ++ show err)
69+ Left (_, err) -> fail (what ++ ": " ++ show err)
64 let
70 let
65− hash = NH.printSHA256 (SSL.digest (SSL.digestByName "sha256") buf)
71+ hash = NH.printSHA256 (SSL.digest (SSL.digestByName "sha256") blob)
66 pkg = setCabalFileHash hash cabal
72 pkg = setCabalFileHash hash cabal
67 return (pkg, hash)
73 return (pkg, hash)
68
74
src/Distribution/Nixpkgs/Haskell/FromStack.hs+22−14
@@ -26,19 +26,22 @@ data PackageSetConfig = PackageSetConfig
26 , targetCompiler :: CompilerInfo }
26 , targetCompiler :: CompilerInfo }
27
27
28data PackageConfig = PackageConfig
28data PackageConfig = PackageConfig
29− { enableCheck :: Bool
29+ { enableCheck :: Bool
30− , enableHaddock :: Bool }
30+ , enableHaddock :: Bool }
31
31
32removeTests :: GenericPackageDescription -> GenericPackageDescription
32removeTests :: GenericPackageDescription -> GenericPackageDescription
33removeTests gd = gd { condTestSuites = [] }
33removeTests gd = gd { condTestSuites = [] }
34
34
35+removeBenches :: GenericPackageDescription -> GenericPackageDescription
36+removeBenches gd = gd { condBenchmarks = [] }
37+
35planDependencies :: PackagePlan -> [Dependency]
38planDependencies :: PackagePlan -> [Dependency]
36planDependencies = map makeDependency . Map.toList . sdPackages . ppDesc
39planDependencies = map makeDependency . Map.toList . sdPackages . ppDesc
37 where
40 where
38 makeDependency (name, depInfo) = Dependency name (diRange depInfo)
41 makeDependency (name, depInfo) = Dependency name (diRange depInfo)
39
42
40−buildNodeM :: PackageSetConfig -> PackageConfig -> PackageName -> PackagePlan -> IO Node
43+buildNode :: PackageSetConfig -> PackageConfig -> PackageName -> PackagePlan -> IO Node
41−buildNodeM conf pconf name plan = do
44+buildNode conf pconf name plan = do
42 let
45 let
43 cabalHashes = maybe mempty cfiHashes $ ppCabalFileInfo plan
46 cabalHashes = maybe mempty cfiHashes $ ppCabalFileInfo plan
44 mGitSha1 = Map.lookup "GitSHA1" cabalHashes
47 mGitSha1 = Map.lookup "GitSHA1" cabalHashes
@@ -50,28 +53,29 @@ fromPackage conf pconf plan pkg =
50 let
53 let
51 constraints = ppConstraints plan
54 constraints = ppConstraints plan
52 testsEnabled =
55 testsEnabled =
53− enableCheck pconf &&
54 pcTests constraints == ExpectSuccess
56 pcTests constraints == ExpectSuccess
55 haddocksEnabled =
57 haddocksEnabled =
56− enableHaddock pconf &&
57 pcHaddocks constraints == ExpectSuccess &&
58 pcHaddocks constraints == ExpectSuccess &&
58 not (Set.null (sdModules (ppDesc plan)))
59 not (Set.null (sdModules (ppDesc plan)))
59 configureTests
60 configureTests
60 | pcTests constraints == Don'tBuild = removeTests
61 | pcTests constraints == Don'tBuild = removeTests
61 | otherwise = id
62 | otherwise = id
63+ configureBenches
64+ | pcBenches constraints == Don'tBuild = removeBenches
65+ | otherwise = id
62 flags = Map.toList (pcFlagOverrides constraints)
66 flags = Map.toList (pcFlagOverrides constraints)
63 (descr, missingDeps) = finalizeGenericPackageDescription
67 (descr, missingDeps) = finalizeGenericPackageDescription
64 (haskellResolver conf)
68 (haskellResolver conf)
65 (targetPlatform conf)
69 (targetPlatform conf)
66 (targetCompiler conf)
70 (targetCompiler conf)
67− flags
71+ (mkFlagAssignment flags)
68 (planDependencies plan)
72 (planDependencies plan)
69− (configureTests (pkgCabal pkg))
73+ (configureBenches . configureTests $ pkgCabal pkg)
70 genericDrv = fromPackageDescription
74 genericDrv = fromPackageDescription
71 (haskellResolver conf)
75 (haskellResolver conf)
72 (nixpkgsResolver conf)
76 (nixpkgsResolver conf)
73 missingDeps
77 missingDeps
74− flags
78+ (mkFlagAssignment flags)
75 descr
79 descr
76 depName (Dependency name _) = name
80 depName (Dependency name _) = name
77 testDeps = setOf
81 testDeps = setOf
@@ -83,11 +87,15 @@ fromPackage conf pconf plan pkg =
83 testsEnabled &&
87 testsEnabled &&
84 not (null missingDeps) &&
88 not (null missingDeps) &&
85 setOf (folded . to depName) missingDeps `hasIntersection` testDeps descr
89 setOf (folded . to depName) missingDeps `hasIntersection` testDeps descr
86− in
90+ in finalizePackage pkg pconf
87− genericDrv
91+ $ genericDrv
88− & src .~ pkgSource pkg
89 & doCheck .~ testsEnabled
92 & doCheck .~ testsEnabled
90 & runHaddock .~ haddocksEnabled
93 & runHaddock .~ haddocksEnabled
91 & metaSection . Nix.broken .~ brokenEnabled
94 & metaSection . Nix.broken .~ brokenEnabled
92− -- TODO: remove after Nixos/Nixpkgs #27196 released
95+
93− & enableSeparateDataOutput .~ False
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.hs+32−12
@@ -1,10 +1,10 @@
1module Distribution.Nixpkgs.Haskell.FromStack.Package where
1module Distribution.Nixpkgs.Haskell.FromStack.Package where
2
2
3import Control.Lens
3import Control.Lens
4−import Data.Graph (Graph, Vertex)
5import Data.Foldable as F
4import Data.Foldable as F
5+import Data.Function (on)
6+import Data.Graph (Graph, Vertex)
6import Data.Maybe
7import Data.Maybe
7−import Data.Monoid
8import Data.Ord as O
8import Data.Ord as O
9import Distribution.Text (display, disp)
9import Distribution.Text (display, disp)
10import Distribution.Package (unPackageName, packageName)
10import Distribution.Package (unPackageName, packageName)
@@ -21,12 +21,21 @@ import qualified Data.Map as Map
21import qualified Data.Set as Set
21import qualified Data.Set as Set
22
22
23data Node = Node
23data Node = Node
24− { _nodeDerivation :: Derivation
24+ { _nodeDerivation :: Derivation
25− , _nodeTestDepends :: Set.Set String
25+ , _nodeTestDepends :: Set.Set String
26+ , _nodeBenchmarkDepends :: Set.Set String
27+ , _nodeExecutableDepends :: Set.Set String
28+ , _nodeSetupDepends :: Set.Set String
26− , _nodeOtherDepends :: Set.Set String }
29+ , _nodeOtherDepends :: Set.Set String }
27
30
28makeLenses ''Node
31makeLenses ''Node
29
32
33+instance Eq Node where
34+ (==) = (==) `on` nodeName
35+
36+instance Ord Node where
37+ compare = compare `on` nodeName
38+
30mkNode :: Derivation -> Node
39mkNode :: Derivation -> Node
31mkNode _nodeDerivation = Node{..}
40mkNode _nodeDerivation = Node{..}
32 where
41 where
@@ -34,17 +43,27 @@ mkNode _nodeDerivation = Node{..}
34 . Set.filter isFromHackage
43 . Set.filter isFromHackage
35 $ view (s . (haskell <> tool)) _nodeDerivation
44 $ view (s . (haskell <> tool)) _nodeDerivation
36 _nodeTestDepends = haskellDependencies testDepends
45 _nodeTestDepends = haskellDependencies testDepends
46+ _nodeBenchmarkDepends = haskellDependencies benchmarkDepends
47+ _nodeExecutableDepends = haskellDependencies executableDepends
48+ _nodeSetupDepends = haskellDependencies setupDepends
37 _nodeOtherDepends = haskellDependencies (executableDepends <> libraryDepends)
49 _nodeOtherDepends = haskellDependencies (executableDepends <> libraryDepends)
38
50
39nodeName :: Node -> String
51nodeName :: Node -> String
40nodeName = unPackageName . packageName . view (nodeDerivation . pkgid)
52nodeName = unPackageName . packageName . view (nodeDerivation . pkgid)
41
53
54+nodeCycleDepends :: Node -> Set.Set String
55+nodeCycleDepends = _nodeTestDepends <> _nodeOtherDepends
56+
42nodeDepends :: Node -> Set.Set String
57nodeDepends :: Node -> Set.Set String
43−nodeDepends = _nodeTestDepends <> _nodeOtherDepends
58+nodeDepends = _nodeTestDepends
59+ <> _nodeOtherDepends
60+ <> _nodeBenchmarkDepends
61+ <> _nodeExecutableDepends
62+ <> _nodeSetupDepends
44
63
45findCycles :: [Node] -> [[Node]]
64findCycles :: [Node] -> [[Node]]
46findCycles nodes = mapMaybe cyclic $
65findCycles nodes = mapMaybe cyclic $
47− Graph.stronglyConnComp [(node, nodeName node, Set.toList $ nodeDepends node) | node <- nodes]
66+ Graph.stronglyConnComp [(node, nodeName node, Set.toList $ nodeCycleDepends node) | node <- nodes]
48 where
67 where
49 cyclic (Graph.AcyclicSCC _) = Nothing
68 cyclic (Graph.AcyclicSCC _) = Nothing
50 cyclic (Graph.CyclicSCC c) = Just c
69 cyclic (Graph.CyclicSCC c) = Just c
@@ -68,12 +87,13 @@ buildNodeGraph :: [Node] -> (Graph, FromVertex, FromKey)
68buildNodeGraph nodes = Graph.graphFromEdges
87buildNodeGraph nodes = Graph.graphFromEdges
69 [(node, nodeName node, Set.toList $ nodeDepends node) | node <- nodes]
88 [(node, nodeName node, Set.toList $ nodeDepends node) | node <- nodes]
70
89
71−reachableDependencies :: [Node] -> [Node] -> [Node]
90+reachableDependencies :: [Node] -> [Node] -> Set.Set Node
72−reachableDependencies keyNodes nodes = view _1 . fromVertex <$> reachableVertices
91+reachableDependencies keyNodes nodes = Set.map (view _1 . fromVertex) reachableVerticesS
73 where
92 where
74 (graph, fromVertex, fromKey) = buildNodeGraph nodes
93 (graph, fromVertex, fromKey) = buildNodeGraph nodes
75 keys = mapMaybe (fromKey . nodeName) keyNodes
94 keys = mapMaybe (fromKey . nodeName) keyNodes
95+ reachableVerticesS = F.foldr1 Set.union
76− reachableVertices = concatMap F.toList $ Graph.dfs graph keys
96+ $ (Set.fromList . F.toList) <$> Graph.dfs graph keys
77
97
78-- pretty printing
98-- pretty printing
79
99
@@ -85,9 +105,9 @@ isFromHackage b = case view (reference . Nix.path) b of
85
105
86pPrintOutConfig :: SystemInfo -> [Node] -> Doc
106pPrintOutConfig :: SystemInfo -> [Node] -> Doc
87pPrintOutConfig systemInfo nodes = vcat
107pPrintOutConfig systemInfo nodes = vcat
88− [ "{ pkgs }:"
108+ [ "{ pkgs, haskellLib }:"
89 , ""
109 , ""
90− , "with pkgs.haskell.lib; self: super: {"
110+ , "with haskellLib; self: super: {"
91 , ""
111 , ""
92 , " # core packages"
112 , " # core packages"
93 , nest 2 $ vcat $
113 , nest 2 $ vcat $
src/Distribution/Nixpkgs/Haskell/Packages/PrettyPrinting.hs+2
@@ -2,6 +2,8 @@ module Distribution.Nixpkgs.Haskell.Packages.PrettyPrinting where
2
2
3import Language.Nix.PrettyPrinting
3import Language.Nix.PrettyPrinting
4
4
5+import Prelude hiding ((<>))
6+
5compilerConfig :: Doc -> Doc
7compilerConfig :: Doc -> Doc
6compilerConfig body =
8compilerConfig body =
7 funargsCurried ["self", "super"] <+> body
9 funargsCurried ["self", "super"] <+> body
src/Distribution/Nixpkgs/Haskell/Stack.hs+27−42
@@ -7,6 +7,8 @@ import Distribution.Compiler as Compiler
7import Distribution.Nixpkgs.Fetch
7import Distribution.Nixpkgs.Fetch
8import Distribution.Nixpkgs.Haskell.Derivation
8import Distribution.Nixpkgs.Haskell.Derivation
9import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
9import Distribution.Nixpkgs.Haskell.FromCabal as FromCabal
10+import Distribution.Nixpkgs.Haskell.FromStack as FromStack
11+import Distribution.Nixpkgs.Haskell.Hackage as DB
10import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
12import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
11import Distribution.PackageDescription as PackageDescription
13import Distribution.PackageDescription as PackageDescription
12import Distribution.System as System
14import Distribution.System as System
@@ -14,59 +16,48 @@ import Network.URI as URI
14import Stack.Config
16import Stack.Config
15
17
16
18
17−newtype HackageDb = HackageDb { fromHackageDB :: T.Text }
18− deriving (Eq, Ord, Show)
19−
20−makePrisms ''HackageDb
21−
22−unHackageDb :: HackageDb -> String
23−unHackageDb = T.unpack . fromHackageDB
24
19
25data StackPackagesConfig = StackPackagesConfig
20data StackPackagesConfig = StackPackagesConfig
26− { _spcHaskellResolver :: !HaskellResolver
21+ { _spcHaskellResolver :: HaskellResolver
27− , _spcNixpkgsResolver :: !NixpkgsResolver
22+ , _spcNixpkgsResolver :: NixpkgsResolver
28− , _spcTargetPlatform :: !Platform
23+ , _spcTargetPlatform :: Platform
29− , _spcTargetCompiler :: !CompilerInfo
24+ , _spcTargetCompiler :: CompilerInfo
30− , _spcFlagAssignment :: !FlagAssignment
25+ , _spcFlagAssignment :: FlagAssignment
31− , _spcDoCheckPackages :: !Bool
26+ , _spcDoCheckPackages :: Bool
32− , _spcDoHaddockPackages :: !Bool
27+ , _spcDoHaddockPackages :: Bool
33− , _spcDoCheckStackage :: !Bool
34− , _spcDoHaddockStackage :: !Bool
35 }
28 }
36
29
37makeLenses ''StackPackagesConfig
30makeLenses ''StackPackagesConfig
38
31
39−getStackPackageFromDb
32+getStackPackageFromDb :: DB.HackageDB -> StackPackage -> IO Package
40− :: Maybe HackageDb
41− -> StackPackage
42− -> IO Package
43−getStackPackageFromDb optHackageDb stackPackage =
33+getStackPackageFromDb hackageDb stackPackage = do
44− PackageSourceSpec.getPackage
34+ PackageSourceSpec.getPackage'
45− (unHackageDb <$> optHackageDb)
35+ False
36+ (pure hackageDb)
46 (stackLocationToSource (stackPackage ^. spLocation) (stackPackage ^. spDir))
37 (stackLocationToSource (stackPackage ^. spLocation) (stackPackage ^. spDir))
47
38
48stackLocationToSource
39stackLocationToSource
49 :: PackageLocation
40 :: PackageLocation
50− -- | Subdirectory in the package containing cabal file.
41+ -- ^ Subdirectory in the package containing cabal file.
51 -> Maybe FilePath
42 -> Maybe FilePath
52 -> Source
43 -> Source
53stackLocationToSource pl mCabalDir = case pl of
44stackLocationToSource pl mCabalDir = case pl of
54− HackagePackage p -> Source
45+ PlIndex p -> Source
55− { sourceUrl = "cabal://" ++ T.unpack p
46+ { sourceUrl = "cabal://" ++ T.unpack (p ^. piNameVersion)
56 , sourceRevision = mempty
47 , sourceRevision = mempty
57 , sourceHash = UnknownHash
48 , sourceHash = UnknownHash
58 , sourceCabalDir = cabalDir }
49 , sourceCabalDir = cabalDir }
59− StackFilePath p -> Source
50+ PlFilePath p -> Source
60 { sourceUrl = p
51 { sourceUrl = p
61 , sourceRevision = mempty
52 , sourceRevision = mempty
62 , sourceHash = UnknownHash
53 , sourceHash = UnknownHash
63 , sourceCabalDir = cabalDir }
54 , sourceCabalDir = cabalDir }
64− StackUri uri -> Source
55+ PlUri uri -> Source
65 { sourceUrl = URI.uriToString id uri mempty
56 { sourceUrl = URI.uriToString id uri mempty
66 , sourceRevision = mempty
57 , sourceRevision = mempty
67 , sourceHash = UnknownHash
58 , sourceHash = UnknownHash
68 , sourceCabalDir = cabalDir }
59 , sourceCabalDir = cabalDir }
69− StackRepo r -> Source
60+ PlRepo r -> Source
70 { sourceUrl = T.unpack $ r ^. rUri
61 { sourceUrl = T.unpack $ r ^. rUri
71 , sourceRevision = T.unpack $ r ^. rCommit
62 , sourceRevision = T.unpack $ r ^. rCommit
72 , sourceHash = UnknownHash
63 , sourceHash = UnknownHash
@@ -76,24 +67,18 @@ stackLocationToSource pl mCabalDir = case pl of
76
67
77packageDerivation
68packageDerivation
78 :: StackPackagesConfig
69 :: StackPackagesConfig
79− -> Maybe HackageDb
70+ -> DB.HackageDB
80 -> StackPackage
71 -> StackPackage
81 -> IO Derivation
72 -> IO Derivation
82−packageDerivation conf optHackageDb stackPackage = do
73+packageDerivation conf hackageDb stackPackage = do
83− pkg <- getStackPackageFromDb optHackageDb stackPackage
74+ pkg <- getStackPackageFromDb hackageDb stackPackage
84 let
75 let
85 drv = genericPackageDerivation conf pkg
76 drv = genericPackageDerivation conf pkg
86− & src .~ pkgSource pkg
87− -- TODO: remove after Nixos/Nixpkgs #27196 released
88− & enableSeparateDataOutput .~ False
89 & subpath %~ flip fromMaybe (stackPackage ^. spDir)
77 & subpath %~ flip fromMaybe (stackPackage ^. spDir)
90− return $ if stackPackage ^. spExtraDep
78+ pconf = PackageConfig
91− then drv
79+ { enableCheck = conf ^. spcDoCheckPackages
92− & doCheck &&~ conf ^. spcDoCheckStackage
80+ , enableHaddock = conf ^. spcDoHaddockPackages }
93− & runHaddock &&~ conf ^. spcDoHaddockStackage
81+ return $ finalizePackage pkg pconf drv
94− else drv
95− & doCheck &&~ conf ^. spcDoCheckPackages
96− & runHaddock &&~ conf ^. spcDoHaddockPackages
97
82
98genericPackageDerivation
83genericPackageDerivation
99 :: StackPackagesConfig
84 :: StackPackagesConfig
src/Distribution/Nixpkgs/Haskell/Stack/PrettyPrinting.hs+103−28
@@ -15,13 +15,16 @@ import Distribution.Text
15import Distribution.Version (Version)
15import Distribution.Version (Version)
16import qualified Language.Nix.FilePath as Nix
16import qualified Language.Nix.FilePath as Nix
17import Language.Nix.PrettyPrinting as PP
17import Language.Nix.PrettyPrinting as PP
18+import Stack.Config (StackResolver, unStackResolver)
19+
20+import Prelude hiding ((<>))
18
21
19
22
20data OverrideConfig = OverrideConfig
23data OverrideConfig = OverrideConfig
21− { _ocGhc :: !Version
24+ { _ocGhc :: Version
22− , _ocStackagePackages :: !FilePath
25+ , _ocStackagePackages :: FilePath
23− , _ocStackageConfig :: !FilePath
26+ , _ocStackageConfig :: FilePath
24− , _ocNixpkgs :: !FilePath
27+ , _ocNixpkgs :: FilePath
25 }
28 }
26
29
27makeLenses ''OverrideConfig
30makeLenses ''OverrideConfig
@@ -29,6 +32,11 @@ makeLenses ''OverrideConfig
29systemNixpkgs :: Doc
32systemNixpkgs :: Doc
30systemNixpkgs = "<nixpkgs>"
33systemNixpkgs = "<nixpkgs>"
31
34
35+renderNixpkgs :: FilePath -> Doc
36+renderNixpkgs nixpkgsPath
37+ | fromString nixpkgsPath == systemNixpkgs = systemNixpkgs
38+ | otherwise = disp $ (fromString nixpkgsPath :: Nix.FilePath)
39+
32hasField :: Lens' a (Maybe b) -> a -> Bool
40hasField :: Lens' a (Maybe b) -> a -> Bool
33hasField p = views p isJust
41hasField p = views p isJust
34
42
@@ -42,33 +50,25 @@ overridePackages = PP.packageSetConfig . PP.cat . F.toList . fmap callPackage
42
50
43importStackagePackages :: FilePath -> Doc
51importStackagePackages :: FilePath -> Doc
44importStackagePackages path = hsep
52importStackagePackages path = hsep
45− [ funarg "self", "import", disp (fromString path :: Nix.FilePath), "{"
53+ ["import", disp (fromString path :: Nix.FilePath)]
46− , "inherit pkgs stdenv;"
47− , "inherit (self) callPackage;"
48− , "}"
49− ]
50
54
51−callStackageConfig :: FilePath -> Doc
55+importStackageConfig :: FilePath -> Doc
52−callStackageConfig path = hsep
56+importStackageConfig path = hsep
53− [ "callPackage", disp (fromString path :: Nix.FilePath), "{}"]
57+ ["import ", disp (fromString path :: Nix.FilePath), "{ inherit pkgs haskellLib; }"]
54
58
55overrideHaskellPackages :: OverrideConfig -> NonEmpty Derivation -> Doc
59overrideHaskellPackages :: OverrideConfig -> NonEmpty Derivation -> Doc
56−overrideHaskellPackages oc packages =
60+overrideHaskellPackages oc packages = vcat
57− let
58− nixpkgs = if oc ^. ocNixpkgs . to fromString == systemNixpkgs
59− then systemNixpkgs
60− else (disp . (fromString :: FilePath -> Nix.FilePath)) (oc ^. ocNixpkgs)
61− in vcat
62 [ funargs
61 [ funargs
63− [ "nixpkgs ? import " <> nixpkgs <> " {}"
62+ [ "nixpkgs ? import " <> renderNixpkgs (oc ^. ocNixpkgs) <> " {}"
64 ]
63 ]
65 , ""
64 , ""
66 , "with nixpkgs;"
65 , "with nixpkgs;"
67 , "let"
66 , "let"
68 , nest 2 "inherit (stdenv.lib) extends;"
67 , nest 2 "inherit (stdenv.lib) extends;"
69 , nest 2 $ vcat
68 , nest 2 $ vcat
69+ [ attr "haskellLib" "callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules/lib.nix\") {}"
70− [ attr "stackagePackages" . importStackagePackages $ oc ^. ocStackagePackages
70+ , attr "stackagePackages" . importStackagePackages $ oc ^. ocStackagePackages
71− , attr "stackageConfig" . callStackageConfig $ oc ^. ocStackageConfig ]
71+ , attr "stackageConfig" . importStackageConfig $ oc ^. ocStackageConfig ]
72 , nest 2 $ vcat
72 , nest 2 $ vcat
73 [ "stackPackages ="
73 [ "stackPackages ="
74 , nest 2 $ overridePackages packages <> semi
74 , nest 2 $ overridePackages packages <> semi
@@ -77,17 +77,92 @@ overrideHaskellPackages oc packages =
77 , nest 2 "inherit pkgs stdenv;"
77 , nest 2 "inherit pkgs stdenv;"
78 , nest 2 "inherit (self) callPackage;"
78 , nest 2 "inherit (self) callPackage;"
79 , "};"
79 , "};"
80− , ""
81− ]
80+ ]
82 , "in callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules\") {"
81 , "in callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules\") {"
83 , nest 2 $ vcat
82 , nest 2 $ vcat
84− [ attr "ghc" ("pkgs.haskell.compiler." <> toNixGhcVersion (oc ^. ocGhc))
83+ [ attr "ghc" ("pkgs.haskell.compiler." <> nixGhc)
84+ , attr "buildHaskellPackages" ("buildPackages.haskell.packages." <> nixGhc)
85− , attr "compilerConfig" "self: extends pkgOverrides (extends stackageConfig (stackagePackages self))"
85+ , attr "compilerConfig" "self: extends pkgOverrides (stackageConfig self)"
86− , attr "haskellLib" "callPackage (nixpkgs.path + \"/pkgs/development/haskell-modules/lib.nix\") {}"
86+ , attr "initialPackages" "stackagePackages"
87+ , attr "configurationCommon" "args: self: super: {}"
88+ , "inherit haskellLib;"
89+ ]
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"
102+ , nest 2 $ vcat
103+ [ "stackPackages ="
104+ , nest 2 $ overridePackages packages <> semi
87 ]
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"
88 , "}"
109 , "}"
89 ]
110 ]
90
111
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+
91toNixGhcVersion :: Version -> Doc
161toNixGhcVersion :: Version -> Doc
92−toNixGhcVersion =
162+toNixGhcVersion = (<>) "ghc" . toNixVersion . show . disp
163+
164+toNixStackResolver :: StackResolver -> Doc
165+toNixStackResolver = toNixVersion . unStackResolver
166+
167+toNixVersion :: String -> Doc
93− (<>) "ghc" . text . L.filter (/= '.') . show . disp
168+toNixVersion = text . L.filter (/= '.')
src/Language/Nix/FilePath.hs+6−6
@@ -11,7 +11,7 @@ import Distribution.Compat.ReadP as ReadP
11import Distribution.Text
11import Distribution.Text
12import GHC.Generics (Generic)
12import GHC.Generics (Generic)
13import Prelude hiding (FilePath)
13import Prelude hiding (FilePath)
14−import qualified System.FilePath.Posix as Posix
14+import qualified System.FilePath as FP
15import Test.QuickCheck as QC
15import Test.QuickCheck as QC
16import Text.PrettyPrint as PP
16import Text.PrettyPrint as PP
17
17
@@ -25,7 +25,7 @@ instance NFData FilePath where
25 rnf = rnf . unFilePath
25 rnf = rnf . unFilePath
26
26
27instance Arbitrary FilePath where
27instance Arbitrary FilePath where
28− arbitrary = FilePath <$> QC.suchThat arbitrary Posix.isValid
28+ arbitrary = FilePath <$> QC.suchThat arbitrary FP.isValid
29 shrink = fmap FilePath . shrink . unFilePath
29 shrink = fmap FilePath . shrink . unFilePath
30
30
31instance Text FilePath where
31instance Text FilePath where
@@ -38,12 +38,12 @@ instance IsString FilePath where
38parseFilePath :: ReadP r FilePath
38parseFilePath :: ReadP r FilePath
39parseFilePath = do
39parseFilePath = do
40 path <- ReadP.munch (const True)
40 path <- ReadP.munch (const True)
41− if Posix.isValid path
41+ if FP.isValid path
42 then pure (FilePath path)
42 then pure (FilePath path)
43 else pfail
43 else pfail
44
44
45renderFilePath :: FilePath -> String
45renderFilePath :: FilePath -> String
46−renderFilePath = Posix.combine "."
46+renderFilePath = FP.combine "."
47− . Posix.normalise
47+ . FP.normalise
48− . Posix.dropTrailingPathSeparator
48+ . FP.dropTrailingPathSeparator
49 . unFilePath
49 . unFilePath
src/LtsHaskell.hs+13−11
@@ -23,6 +23,7 @@ import Stackage.BuildPlan
23import Stackage.Types (SystemInfo(..))
23import Stackage.Types (SystemInfo(..))
24import System.FilePath as Path
24import System.FilePath as Path
25
25
26+import qualified Distribution.Nixpkgs.Haskell.Hackage as DB
26import qualified Data.Yaml as Yaml
27import qualified Data.Yaml as Yaml
27import qualified Data.Map as Map
28import qualified Data.Map as Map
28import qualified Data.Set as Set
29import qualified Data.Set as Set
@@ -46,17 +47,17 @@ getPackageFromRepo allCabalHashesPath mSha1Hash pkgId = do
46 (error (display pkgId ++ ": meta data has no SHA256 hash for the tarball"))
47 (error (display pkgId ++ ": meta data has no SHA256 hash for the tarball"))
47 (view (mHashes . at "SHA256") meta)
48 (view (mHashes . at "SHA256") meta)
48 source = DerivationSource "url" ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") "" tarballSHA256
49 source = DerivationSource "url" ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") "" tarballSHA256
49− return $ Package source pkgDesc
50+ return $ Package source False pkgDesc
50
51
51−getPackageFromDb :: PackageIdentifier -> IO Package
52+getPackageFromDb :: DB.HackageDB -> PackageIdentifier -> IO Package
52−getPackageFromDb pkgId =
53+getPackageFromDb hackageDb pkgId =
53− getStackPackageFromDb Nothing
54+ getStackPackageFromDb hackageDb
54− $ StackPackage (HackagePackage (T.pack $ Text.display pkgId)) True Nothing
55+ $ StackPackage (PlIndex $ PackageIndex (T.pack $ Text.display pkgId) Nothing) True Nothing
55
56
56−loadPackage :: FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
57+loadPackage :: DB.HackageDB -> FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
57−loadPackage allCabalHashesPath mSha1Hash pkgId =
58+loadPackage hackageDb allCabalHashesPath mSha1Hash pkgId =
58 getPackageFromRepo allCabalHashesPath mSha1Hash pkgId
59 getPackageFromRepo allCabalHashesPath mSha1Hash pkgId
59− `catchIOError` const (getPackageFromDb pkgId)
60+ `catchIOError` const (getPackageFromDb hackageDb pkgId)
60
61
61ghcCompilerInfo :: Version -> CompilerInfo
62ghcCompilerInfo :: Version -> CompilerInfo
62ghcCompilerInfo v = CompilerInfo
63ghcCompilerInfo v = CompilerInfo
@@ -72,17 +73,18 @@ buildPlanContainsDependency packageVersions (Dependency depName versionRange) =
72 maybe False (`withinRange` versionRange) $ Map.lookup depName packageVersions
73 maybe False (`withinRange` versionRange) $ Map.lookup depName packageVersions
73
74
74buildPackageSetConfig
75buildPackageSetConfig
76+ :: DB.HackageDB
75− :: FilePath
77+ -> FilePath
76 -> FilePath
78 -> FilePath
77 -> BuildPlan
79 -> BuildPlan
78 -> IO PackageSetConfig
80 -> IO PackageSetConfig
79−buildPackageSetConfig optAllCabalHashes optNixpkgsRepository buildPlan = do
81+buildPackageSetConfig hackageDb optAllCabalHashes optNixpkgsRepository buildPlan = do
80 nixpkgs <- readNixpkgPackageMap optNixpkgsRepository Nothing
82 nixpkgs <- readNixpkgPackageMap optNixpkgsRepository Nothing
81 let
83 let
82 systemInfo = bpSystemInfo buildPlan
84 systemInfo = bpSystemInfo buildPlan
83 packageVersions = fmap ppVersion (bpPackages buildPlan) `Map.union` siCorePackages systemInfo
85 packageVersions = fmap ppVersion (bpPackages buildPlan) `Map.union` siCorePackages systemInfo
84 return PackageSetConfig
86 return PackageSetConfig
85− { packageLoader = loadPackage optAllCabalHashes
87+ { packageLoader = loadPackage hackageDb optAllCabalHashes
86 , targetPlatform = Platform (siArch systemInfo) (siOS systemInfo)
88 , targetPlatform = Platform (siArch systemInfo) (siOS systemInfo)
87 , targetCompiler = ghcCompilerInfo (siGhcVersion systemInfo)
89 , targetCompiler = ghcCompilerInfo (siGhcVersion systemInfo)
88 , nixpkgsResolver = resolve (Map.map (Set.map (over path ("pkgs":))) nixpkgs)
90 , nixpkgsResolver = resolve (Map.map (Set.map (over path ("pkgs":))) nixpkgs)
src/Runner.hs+134−64
@@ -3,13 +3,17 @@ module Runner ( run ) where
3import Control.Lens
3import Control.Lens
4import Data.Foldable as F
4import Data.Foldable as F
5import Data.List as L
5import Data.List as L
6+import Data.Maybe (fromMaybe)
7+import Data.Semigroup ((<>))
6import Distribution.Nixpkgs.Haskell.FromStack
8import Distribution.Nixpkgs.Haskell.FromStack
7import Distribution.Nixpkgs.Haskell.FromStack.Package
9import Distribution.Nixpkgs.Haskell.FromStack.Package
10+import Distribution.Nixpkgs.Haskell.Hackage as DB
11+import Distribution.Nixpkgs.Haskell.PackageSourceSpec (loadHackageDB)
8import Distribution.Nixpkgs.Haskell.Stack
12import Distribution.Nixpkgs.Haskell.Stack
9import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
13import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
10import Distribution.Version (Version)
14import Distribution.Version (Version)
11import Distribution.Compiler (AbiTag(..), unknownCompilerInfo)
15import Distribution.Compiler (AbiTag(..), unknownCompilerInfo)
12−import Distribution.Package (mkPackageName, pkgName)
16+import Distribution.Package (PackageName, mkPackageName, pkgName)
13import Distribution.Text as Text (display)
17import Distribution.Text as Text (display)
14import Language.Nix as Nix
18import Language.Nix as Nix
15import Options.Applicative
19import Options.Applicative
@@ -21,85 +25,153 @@ import Stackage.Types
21import System.IO (withFile, IOMode(..), hPutStrLn)
25import System.IO (withFile, IOMode(..), hPutStrLn)
22import Text.PrettyPrint.HughesPJClass (Doc, render)
26import Text.PrettyPrint.HughesPJClass (Doc, render)
23
27
24−import qualified Data.Set as Set
28+import qualified Data.List.NonEmpty as NE
25import qualified Data.Map as Map
29import qualified Data.Map as Map
30+import qualified Data.Set as Set
26import qualified LtsHaskell as LH
31import qualified LtsHaskell as LH
27
32
28−
29run :: IO ()
33run :: IO ()
30run = do
34run = do
31 opts <- execParser pinfo
35 opts <- execParser pinfo
36+ hackageDb <- loadHackageDB (opts ^. optHackageDb) Nothing
37+ let
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+
32 case opts ^. optConfigOrigin of
46 case opts ^. optConfigOrigin of
33− -- Generate build derivation from stack.yaml file
47+ -- Generate Stackage packages from stack.yaml resolver
34− OriginStackYaml stackYaml -> do
48+ OriginStackYaml stackYaml buildTarget -> do
35 stackConf <- either fail pure =<< readStackConfig stackYaml
49 stackConf <- either fail pure =<< readStackConfig stackYaml
36− let buildPlanFile = LH.buildPlanFilePath (opts ^. optLtsHaskellRepo) (stackConf ^. scResolver)
37− buildPlan <- LH.loadBuildPlan buildPlanFile
38− packageSetConfig <- LH.buildPackageSetConfig
39− (opts ^. optAllCabalHashesRepo)
40− (opts ^. optNixpkgsRepository)
41− buildPlan
42 let
50 let
43− overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
51+ stackResolver = stackConf ^. scResolver
44 stackPackagesConfig = mkStackPackagesConfig opts
52 stackPackagesConfig = mkStackPackagesConfig opts
53+ stackExtraDepsConfig = stackPackagesConfig
54+ & spcDoCheckPackages .~ False
55+ & spcDoHaddockPackages .~ False
45− stackConfPackages <- traverse (packageDerivation stackPackagesConfig (opts ^. optHackageDb))
56+ stackConfPackages <- traverse (fmap mkNode . packageDerivation stackPackagesConfig hackageDb)
46 $ stackConf ^. scPackages
57 $ stackConf ^. scPackages
58+ stackConfExtraDeps <- traverse (fmap mkNode . packageDerivation stackExtraDepsConfig hackageDb)
59+ $ stackConf ^. scExtraDeps
47 let
60 let
48− reachable = Set.map mkPackageName
61+ stackConfAllPackages = maybe stackConfPackages ((<>) stackConfPackages)
49− $ F.foldr1 Set.union
62+ $ NE.nonEmpty stackConfExtraDeps
50− $ nodeDepends . mkNode <$> stackConfPackages
51− s2nLoader mHash pkgId =
52− if pkgName pkgId `Set.member` reachable
53− then packageLoader packageSetConfig Nothing pkgId
54− else packageLoader packageSetConfig mHash pkgId
55− s2nPackageSetConfig = packageSetConfig { packageLoader = s2nLoader }
56− s2nPackageConfig = PackageConfig
57− { enableCheck = opts ^. optDoCheckStackage
58− , enableHaddock = opts ^. optDoHaddockStackage }
59− stackagePackages <- traverse (uncurry (buildNodeM s2nPackageSetConfig s2nPackageConfig))
60− $ Map.toList (bpPackages buildPlan)
61
63
64+ case buildTarget of
65+ TargetStackageClosure -> do
66+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
62− let
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
63− -- Find all reachable dependencies in stackage set to stick into
79+ -- Find all reachable dependencies in stackage set to stick into
64− -- stackage packages file. This is performed on the full stackage
80+ -- stackage packages file. This is performed on the full stackage
65− -- set rather than pruning stackage packages beforehand because
81+ -- set rather than pruning stackage packages beforehand because
66− -- stackage does not concern itself with build tools while cabal2nix
82+ -- stackage does not concern itself with build tools while cabal2nix
67− -- does: pruning only after generating full set of packages allows
83+ -- does: pruning only after generating full set of packages allows
68− -- us to make sure all those extra dependencies are explicitly
84+ -- us to make sure all those extra dependencies are explicitly
69− -- listed as well.
85+ -- listed as well.
70− reachableStackagePackages = case opts ^. optOutPackagesClosure of
86+ nodes = Set.toAscList
87+ $ withHscolour
71− True -> flip reachableDependencies stackagePackages
88+ $ flip reachableDependencies stackagePackages
72− -- Originally reachable nodes are root nodes
89+ -- Originally reachable nodes are root nodes
73− $ L.filter (\n -> mkPackageName (nodeName n) `Set.member` reachable) stackagePackages
90+ $ L.filter (\n -> mkPackageName (nodeName n) `Set.member` reachable) stackagePackages
74− False -> stackagePackages
91+ writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
75− -- Sort final packages to make the order consistent
92+ $ pPrintOutPackages (view nodeDerivation <$> nodes)
76− nodes = L.sortOn nodeName reachableStackagePackages
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
77− writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
111+ writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
78− $ pPrintOutPackages (view nodeDerivation <$> nodes)
112+ $ pPrintOutPackages (view nodeDerivation <$> nodes)
79− writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
113+ writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
80− $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
114+ $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
81− writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
115+ writeOutFile (stackYaml ^. syFilePath) (opts ^. optOutDerivation)
82− $ PP.overrideHaskellPackages overrideConfig stackConfPackages
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)
83
126
84 -- Generate Stackage packages from resolver
127 -- Generate Stackage packages from resolver
85 OriginResolver stackResolver -> do
128 OriginResolver stackResolver -> do
86− let
129+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
87− buildPlanFile = LH.buildPlanFilePath (opts ^. optLtsHaskellRepo) stackResolver
130+ nodes <- buildStackagePackages packageSetConfig buildPlan
88− packageConfig = PackageConfig
131+ let overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
89− { enableCheck = opts ^. optDoCheckStackage
90− , enableHaddock = opts ^. optDoHaddockStackage }
91− buildPlan <- LH.loadBuildPlan buildPlanFile
92− packageSetConfig <- LH.buildPackageSetConfig
93− (opts ^. optAllCabalHashesRepo)
94− (opts ^. optNixpkgsRepository)
95− buildPlan
96− nodes <- traverse (uncurry (buildNodeM packageSetConfig packageConfig))
97− $ Map.toList (bpPackages buildPlan)
98−
99 writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
132 writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
100 $ pPrintOutPackages (view nodeDerivation <$> nodes)
133 $ pPrintOutPackages (view nodeDerivation <$> nodes)
101 writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
134 writeOutFile buildPlanFile (opts ^. optOutStackageConfig)
102 $ pPrintOutConfig (bpSystemInfo buildPlan) nodes
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
152+ let
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 =
168+ let
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 }
103
175
104writeOutFile :: Show source => source -> FilePath -> Doc -> IO ()
176writeOutFile :: Show source => source -> FilePath -> Doc -> IO ()
105writeOutFile source filePath contents =
177writeOutFile source filePath contents =
@@ -120,8 +192,6 @@ mkStackPackagesConfig opts = StackPackagesConfig
120 , _spcNixpkgsResolver = \i -> Just (Nix.binding # (i, Nix.path # [i]))
192 , _spcNixpkgsResolver = \i -> Just (Nix.binding # (i, Nix.path # [i]))
121 , _spcTargetPlatform = opts ^. optPlatform
193 , _spcTargetPlatform = opts ^. optPlatform
122 , _spcTargetCompiler = unknownCompilerInfo (opts ^. optCompilerId) NoAbiTag
194 , _spcTargetCompiler = unknownCompilerInfo (opts ^. optCompilerId) NoAbiTag
123− , _spcFlagAssignment = []
195+ , _spcFlagAssignment = mempty
124 , _spcDoCheckPackages = opts ^. optDoCheckPackages
196 , _spcDoCheckPackages = opts ^. optDoCheckPackages
125− , _spcDoHaddockPackages = opts ^. optDoHaddockPackages
197+ , _spcDoHaddockPackages = opts ^. optDoHaddockPackages }
126− , _spcDoCheckStackage = opts ^. optDoCheckStackage
127− , _spcDoHaddockStackage = opts ^. optDoHaddockStackage }
src/Runner/Cli.hs+84−50
@@ -5,69 +5,86 @@ import Data.Monoid ( (<>) )
5import Data.Text as T
5import Data.Text as T
6import qualified Distribution.Compat.ReadP as P
6import qualified Distribution.Compat.ReadP as P
7import Distribution.Compiler as Compiler
7import Distribution.Compiler as Compiler
8−import Distribution.Nixpkgs.Haskell.Stack
9import Distribution.System as System
8import Distribution.System as System
10import qualified Distribution.Text as Text
9import qualified Distribution.Text as Text
11import Options.Applicative as Opts
10import Options.Applicative as Opts
12import Paths_stackage2nix ( version )
11import Paths_stackage2nix ( version )
13import Stack.Config
12import Stack.Config
14import Stack.Types
13import Stack.Types
15−import System.Environment
16import System.FilePath
14import System.FilePath
17
15
16+data Tweaks = Tweaks
17+ { _tExtraDepsRevisionLatest :: Bool
18+ } deriving (Show)
19+
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+
18-- | Source that would be used to produce target derivation
31-- | Source that would be used to produce target derivation
19data ConfigOrigin
32data ConfigOrigin
20 = OriginResolver StackResolver
33 = OriginResolver StackResolver
21 -- ^ Resolver to generate Stackage LTS
34 -- ^ Resolver to generate Stackage LTS
22− | OriginStackYaml StackYaml
35+ | OriginStackYaml StackYaml Target
23 -- ^ Stack config to generate build derivation
36 -- ^ Stack config to generate build derivation
24 deriving (Show)
37 deriving (Show)
25
38
26makePrisms ''ConfigOrigin
39makePrisms ''ConfigOrigin
27
40
41+data StackageOptions = StackageOptions
42+ { _soptAllCabalHashesRepo :: FilePath
43+ , _soptLtsHaskellRepo :: FilePath
44+ } deriving (Show)
45+
46+makeLenses ''StackageOptions
47+
28data Options = Options
48data Options = Options
29− { _optAllCabalHashesRepo :: !FilePath
49+ { _optAllCabalHashesRepo :: Maybe FilePath
30− , _optLtsHaskellRepo :: !FilePath
50+ , _optLtsHaskellRepo :: Maybe FilePath
31− , _optOutStackagePackages :: !FilePath
51+ , _optOutStackagePackages :: FilePath
32− , _optOutStackageConfig :: !FilePath
52+ , _optOutStackageConfig :: FilePath
33− , _optOutPackagesClosure :: !Bool
34− , _optOutDerivation :: !FilePath
53+ , _optOutDerivation :: FilePath
54+ , _optOutStackYamlPackages :: FilePath
35− , _optDoCheckPackages :: !Bool
55+ , _optDoCheckPackages :: Bool
36− , _optDoHaddockPackages :: !Bool
56+ , _optDoHaddockPackages :: Bool
37− , _optDoCheckStackage :: !Bool
57+ , _optTweaks :: Tweaks
38− , _optDoHaddockStackage :: !Bool
39− , _optHackageDb :: !(Maybe HackageDb)
58+ , _optHackageDb :: Maybe FilePath
40− , _optNixpkgsRepository :: !FilePath
59+ , _optNixpkgsRepository :: FilePath
41− , _optCompilerId :: !CompilerId
60+ , _optCompilerId :: CompilerId
42− , _optPlatform :: !Platform
61+ , _optPlatform :: Platform
43− , _optConfigOrigin :: !ConfigOrigin
62+ , _optConfigOrigin :: ConfigOrigin
44 } deriving (Show)
63 } deriving (Show)
45
64
46makeLenses ''Options
65makeLenses ''Options
47
66
48−envStackYaml :: IO (Maybe StackYaml)
49−envStackYaml = fmap mkStackYaml <$> lookupEnv "STACK_YAML"
50−
51mkStackYaml :: FilePath -> StackYaml
67mkStackYaml :: FilePath -> StackYaml
52mkStackYaml p = case splitFileName p of
68mkStackYaml p = case splitFileName p of
53 (dir, "") -> StackYaml dir "stack.yaml"
69 (dir, "") -> StackYaml dir "stack.yaml"
54 (dir, ".") -> StackYaml dir "stack.yaml"
70 (dir, ".") -> StackYaml dir "stack.yaml"
55 (_ , "..") -> StackYaml p "stack.yaml"
71 (_ , "..") -> StackYaml p "stack.yaml"
72+ (dir, file) -> case splitExtension file of
73+ (_, "") -> StackYaml p "stack.yaml"
56− (dir, file) -> StackYaml dir file
74+ _ -> StackYaml dir file
57
75
58options :: Parser Options
76options :: Parser Options
59options = Options
77options = Options
60− <$> allCabalHashesRepo
78+ <$> optional allCabalHashesRepo
61− <*> ltsHaskellRepo
79+ <*> optional ltsHaskellRepo
62 <*> outStackagePackages
80 <*> outStackagePackages
63 <*> outStackageConfig
81 <*> outStackageConfig
64− <*> outPackagesClosure
65 <*> outDerivation
82 <*> outDerivation
83+ <*> outStackYamlPackages
66 <*> doCheckPackages
84 <*> doCheckPackages
67 <*> doHaddockPackages
85 <*> doHaddockPackages
68− <*> doCheckStackage
86+ <*> tweaks
69− <*> doHaddockStackage
70− <*> optional hackageDb
87+ <*> optional optionHackageDb
71 <*> nixpkgsRepository
88 <*> nixpkgsRepository
72 <*> compilerId
89 <*> compilerId
73 <*> platform
90 <*> platform
@@ -117,11 +134,6 @@ outStackageConfig = option str
117 <> value "configuration-packages.nix"
134 <> value "configuration-packages.nix"
118 <> showDefaultWith id)
135 <> showDefaultWith id)
119
136
120−outPackagesClosure :: Parser Bool
121−outPackagesClosure = flag True False
122− ( long "no-packages-closure"
123− <> help "produce full set of stackage packages, not just dependencies" )
124−
125outDerivation :: Parser FilePath
137outDerivation :: Parser FilePath
126outDerivation = option str
138outDerivation = option str
127 ( long "out-derivation"
139 ( long "out-derivation"
@@ -130,6 +142,14 @@ outDerivation = option str
130 <> value "default.nix"
142 <> value "default.nix"
131 <> showDefaultWith id )
143 <> showDefaultWith id )
132
144
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+
133doCheckPackages :: Parser Bool
153doCheckPackages :: Parser Bool
134doCheckPackages = flag True False
154doCheckPackages = flag True False
135 ( long "no-check"
155 ( long "no-check"
@@ -140,15 +160,23 @@ doHaddockPackages = flag True False
140 ( long "no-haddock"
160 ( long "no-haddock"
141 <> help "disable haddock for project packages")
161 <> help "disable haddock for project packages")
142
162
143−doCheckStackage :: Parser Bool
163+withStackage :: Parser ()
144−doCheckStackage = switch
164+withStackage = flag' ()
145− ( long "do-check-stackage"
165+ ( long "with-stackage"
146− <> help "enable tests for Stackage packages" )
166+ <> help "generate full Stackage" )
147
167
148−doHaddockStackage :: Parser Bool
168+withStackageClosure :: Parser ()
149−doHaddockStackage = switch
169+withStackageClosure = flag' ()
150− ( long "do-haddock-stackage"
170+ ( long "with-stackage-closure"
151− <> help "enable haddock for Stackage packages" )
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
152
180
153resolver :: Parser StackResolver
181resolver :: Parser StackResolver
154resolver = StackResolver <$> option text
182resolver = StackResolver <$> option text
@@ -160,18 +188,24 @@ stackYamlArg = mkStackYaml <$> Opts.argument str
160 ( metavar "STACK_YAML"
188 ( metavar "STACK_YAML"
161 <> help "path to stack.yaml file or directory" )
189 <> help "path to stack.yaml file or directory" )
162
190
191+target :: Parser Target
192+target =
193+ withStackage *> pure TargetStackagePackages <|>
194+ withStackageClosure *> pure TargetStackageClosure <|>
195+ pure TargetStackageOverride
196+
163configOrigin :: Parser ConfigOrigin
197configOrigin :: Parser ConfigOrigin
198+configOrigin =
199+ OriginStackYaml <$> stackYamlArg <*> target <|>
164−configOrigin = OriginResolver <$> resolver
200+ OriginResolver <$> resolver
165− <|> OriginStackYaml <$> stackYamlArg
166
201
167−-- inherited from cabal2nix
202+-- required for cabal2nix
168
203
169−hackageDb :: Parser HackageDb
204+optionHackageDb :: Parser FilePath
170−hackageDb = HackageDb <$>
205+optionHackageDb = option str
171− option text
172− ( long "hackage-db"
206+ ( long "hackage-db"
173− <> metavar "HACKAGE_DB"
207+ <> metavar "HACKAGE_DB"
174− <> help "path to the local hackage db in tar format" )
208+ <> help "path to the local hackage db in tar format" )
175
209
176cabalFlag :: Parser CabalFlag
210cabalFlag :: Parser CabalFlag
177cabalFlag = CabalFlag <$>
211cabalFlag = CabalFlag <$>
src/Stack/Config.hs+118−49
@@ -3,19 +3,17 @@
3module Stack.Config where
3module Stack.Config where
4
4
5import Control.Lens
5import Control.Lens
6−import Data.Bifunctor
7import Data.ByteString as BS
6import Data.ByteString as BS
8import Data.Coerce
7import Data.Coerce
9−import Data.Foldable as F
8+import Data.List as L
10import Data.List.NonEmpty as NE
9import Data.List.NonEmpty as NE
11import Data.Maybe
10import Data.Maybe
12−import Data.Semigroup (sconcat)
13import Data.Text as T
11import Data.Text as T
14import Data.Yaml
12import Data.Yaml
15import Network.URI
13import Network.URI
16import Stack.Config.Yaml as Yaml
14import Stack.Config.Yaml as Yaml
17import Stack.Types
15import Stack.Types
18−import System.FilePath
16+import System.FilePath as FilePath
19
17
20
18
21newtype StackResolver = StackResolver { fromStackResolver :: Text }
19newtype StackResolver = StackResolver { fromStackResolver :: Text }
@@ -30,95 +28,166 @@ newtype Vcs = Vcs { fromVcs :: Text }
30 deriving (Eq, Ord, Show)
28 deriving (Eq, Ord, Show)
31
29
32data Repo = Repo
30data Repo = Repo
33− { _rVcs :: !Vcs
31+ { _rVcs :: Vcs
34− , _rUri :: !Text
32+ , _rUri :: Text
35− , _rCommit :: !Text
33+ , _rCommit :: Text
36 } deriving (Eq, Ord, Show)
34 } deriving (Eq, Ord, Show)
37
35
38makeLenses ''Repo
36makeLenses ''Repo
39
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
48+ } deriving (Eq, Ord, Show)
49+
50+makeLenses ''PackageIndex
51+
40data PackageLocation
52data PackageLocation
41− = HackagePackage Text
53+ = PlIndex PackageIndex
42− | StackFilePath FilePath
54+ | PlFilePath FilePath
43− | StackUri URI
55+ | PlUri URI
44− | StackRepo Repo
56+ | PlRepo Repo
45 deriving (Eq, Ord, Show)
57 deriving (Eq, Ord, Show)
46
58
47makePrisms ''PackageLocation
59makePrisms ''PackageLocation
48
60
49data StackPackage = StackPackage
61data StackPackage = StackPackage
50− { _spLocation :: !PackageLocation
62+ { _spLocation :: PackageLocation
51− , _spExtraDep :: !Bool
63+ , _spExtraDep :: Bool
52 -- | Subdirectory containing the cabal file if any specified.
64 -- | Subdirectory containing the cabal file if any specified.
53− , _spDir :: !(Maybe FilePath)
65+ , _spDir :: Maybe FilePath
54 } deriving (Eq, Ord, Show)
66 } deriving (Eq, Ord, Show)
55
67
56makeLenses ''StackPackage
68makeLenses ''StackPackage
57
69
58data StackConfig = StackConfig
70data StackConfig = StackConfig
59− { _scResolver :: !StackResolver
71+ { _scResolver :: StackResolver
60− , _scPackages :: !(NonEmpty StackPackage)
72+ , _scPackages :: NonEmpty StackPackage
73+ , _scExtraDeps :: [StackPackage]
61 } deriving (Eq, Ord, Show)
74 } deriving (Eq, Ord, Show)
62
75
63makeLenses ''StackConfig
76makeLenses ''StackConfig
64
77
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+
65fromYamlConfig :: Yaml.Config -> StackConfig
86fromYamlConfig :: Yaml.Config -> StackConfig
66fromYamlConfig c = StackConfig{..}
87fromYamlConfig c = StackConfig{..}
67 where
88 where
68 _scResolver = coerce $ c ^. cResolver
89 _scResolver = coerce $ c ^. cResolver
69− _scPackages = F.foldr (NE.<|) neYamlPackages yamlExtraDeps
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
70− neYamlPackages = fromMaybe (pure defaultPackage)
93+ nePackages = fromMaybe (pure defaultPackage)
71− . fmap sconcat $ NE.nonEmpty yamlPackages
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
72− yamlPackages = fromYamlPackage <$> (fromMaybe mempty (c ^. cPackages))
99+ <$> fromMaybe mempty (c ^. cPackages)
100+ yamlExtraDeps = L.concatMap NE.toList
101+ $ fromYamlPackage extraDepsSimplePath True
73− yamlExtraDeps = fromYamlExtraDep <$> fromMaybe mempty (c ^. cExtraDeps)
102+ <$> fromMaybe mempty (c ^. cExtraDeps)
74− defaultPackage = StackPackage (StackFilePath ".") False Nothing
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
116+ where
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
75
124
125+-- Determine wether package is file path
126+isFilePath :: Text -> Bool
127+isFilePath = T.any (== FilePath.pathSeparator)
76
128
129+-- | A single 'Yaml.Package' can result in multiple actual
130+-- packages if it has multiple subdirs specified.
77fromYamlPackage
131fromYamlPackage
78− :: Yaml.Package
132+ :: (Text -> StackPackage)
133+ -> Bool
79− -- | A single 'Yaml.Package' can result in multiple actual
134+ -> Yaml.Package
80− -- packages if it has multiple subdirs specified.
81 -> NonEmpty StackPackage
135 -> NonEmpty StackPackage
82−fromYamlPackage = \case
136+fromYamlPackage fromSimple isExtraDep = \case
83− Yaml.Simple p ->
137+ Yaml.PSimple p ->
84− unroll Nothing $ StackPackage (parseSimplePath p) False
138+ pure (fromSimple p)
85− Yaml.LocationSimple (Location p extraDep ms) ->
139+ Yaml.PLocationSimple (Location p extraDep ms) ->
86 unroll ms $ StackPackage (parseSimplePath p) (fromMaybe False extraDep)
140 unroll ms $ StackPackage (parseSimplePath p) (fromMaybe False extraDep)
87− Yaml.LocationGit (Location git extraDep ms) ->
141+ Yaml.PLocationGit loc ->
88− unroll ms $ StackPackage (StackRepo $ fromYamlGit git) (fromMaybe False extraDep)
142+ mkStackPackageRepo fromYamlGit loc
89− Yaml.LocationHg (Location hg extraDep ms) ->
143+ Yaml.PLocationHg loc ->
90− unroll ms $ StackPackage (StackRepo $ fromYamlHg hg) (fromMaybe False extraDep)
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
91 where
151 where
92− parseSimplePath (T.unpack -> p) = maybe (StackFilePath p) StackUri $ parseURI p
152+ mkStackPackageRepo f loc = unroll (loc ^. lSubdirs)
153+ $ StackPackage (PlRepo (loc ^. lLocation . to f)) (fromMaybe isExtraDep $ loc ^. lExtraDep)
93 -- Each package gets a single directory with cabal file in it. If
154 -- Each package gets a single directory with cabal file in it. If
94 -- it's not specified, path is empty.
155 -- it's not specified, path is empty.
95 unroll subs p = case subs of
156 unroll subs p = case subs of
96 Just (x : xs) -> NE.map (p . Just) (x :| xs)
157 Just (x : xs) -> NE.map (p . Just) (x :| xs)
97 _ -> p Nothing :| []
158 _ -> p Nothing :| []
98
159
99−fromYamlExtraDep :: Text -> StackPackage
100−fromYamlExtraDep t = StackPackage (HackagePackage t) True Nothing
101−
102fromYamlGit :: Yaml.Git -> Repo
160fromYamlGit :: Yaml.Git -> Repo
103−fromYamlGit yg = Repo{..}
161+fromYamlGit yg = Repo
104− where
105− _rVcs = Vcs "git"
162+ { _rVcs = Vcs "git"
106− _rUri = yg ^. gGit
163+ , _rUri = yg ^. gGit
107− _rCommit = yg ^. gCommit
164+ , _rCommit = yg ^. gCommit }
108
165
109fromYamlHg :: Yaml.Hg -> Repo
166fromYamlHg :: Yaml.Hg -> Repo
110−fromYamlHg yh = Repo{..}
167+fromYamlHg yh = Repo
111− where
112− _rVcs = Vcs "hg"
168+ { _rVcs = Vcs "hg"
113− _rUri = yh ^. hHg
169+ , _rUri = yh ^. hHg
114− _rCommit = yh ^. hCommit
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 }
115
183
116readStackConfig :: StackYaml -> IO (Either String StackConfig)
184readStackConfig :: StackYaml -> IO (Either String StackConfig)
117readStackConfig stackYaml = do
185readStackConfig stackYaml = do
118 let
186 let
119 relativeToStackYaml = \case
187 relativeToStackYaml = \case
120− StackFilePath p -> StackFilePath $ stackYaml ^. syDirName </> p
188+ PlFilePath p -> PlFilePath $ stackYaml ^. syDirName </> p
121 packageLocation -> packageLocation
189 packageLocation -> packageLocation
122 mkStackConfig = over (scPackages . traversed . spLocation) relativeToStackYaml
190 mkStackConfig = over (scPackages . traversed . spLocation) relativeToStackYaml
191+ . over (scExtraDeps . traversed . spLocation) relativeToStackYaml
123 . fromYamlConfig
192 . fromYamlConfig
124− second mkStackConfig . decodeEither <$> BS.readFile (stackYaml ^. syFilePath)
193+ bimap show mkStackConfig . decodeEither' <$> BS.readFile (stackYaml ^. syFilePath)
src/Stack/Config/Yaml.hs+63−26
@@ -8,60 +8,97 @@ import Data.Text as T
8import Stack.Config.TH
8import Stack.Config.TH
9
9
10data Location a = Location
10data Location a = Location
11− { _lLocation :: !a
11+ { _lLocation :: a
12− , _lExtraDep :: !(Maybe Bool)
12+ , _lExtraDep :: Maybe Bool
13− , _lSubdirs :: !(Maybe [FilePath])
13+ , _lSubdirs :: Maybe [FilePath]
14 } deriving (Eq, Show)
14 } deriving (Eq, Show)
15
15
16makeLenses ''Location
16makeLenses ''Location
17−
18deriveJSON jsonOpts ''Location
17deriveJSON jsonOpts ''Location
19
18
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+
20data Git = Git
28data Git = Git
21− { _gGit :: !Text
29+ { _gGit :: Text
22− , _gCommit :: !Text
30+ , _gCommit :: Text
23 } deriving (Eq, Show)
31 } deriving (Eq, Show)
24
32
25makeLenses ''Git
33makeLenses ''Git
26−
27deriveJSON jsonOpts ''Git
34deriveJSON jsonOpts ''Git
28
35
29data Hg = Hg
36data Hg = Hg
30− { _hHg :: !Text
37+ { _hHg :: Text
31− , _hCommit :: !Text
38+ , _hCommit :: Text
32 } deriving (Eq, Show)
39 } deriving (Eq, Show)
33
40
34makeLenses ''Hg
41makeLenses ''Hg
35−
36deriveJSON jsonOpts ''Hg
42deriveJSON jsonOpts ''Hg
37
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+
38data Package
64data Package
39− = Simple Text
65+ = PSimple Text
40− | LocationSimple (Location Text)
66+ | PLocationSimple (Location Text)
41− | LocationGit (Location Git)
67+ | PLocationGit (Location Git)
42− | LocationHg (Location Hg)
68+ | PLocationHg (Location Hg)
69+ | PArchive Archive
70+ | PNewGit NewGit
71+ | PNewHg NewHg
43 deriving (Eq, Show)
72 deriving (Eq, Show)
44
73
45makePrisms ''Package
74makePrisms ''Package
46
75
47instance FromJSON Package where
76instance FromJSON Package where
48 parseJSON v =
77 parseJSON v =
49− (Simple <$> parseJSON v) <|>
78+ (PSimple <$> parseJSON v) <|>
50− (LocationSimple <$> parseJSON v) <|>
79+ (PLocationSimple <$> parseJSON v) <|>
51− (LocationGit <$> parseJSON v) <|>
80+ (PLocationGit <$> parseJSON v) <|>
81+ (PLocationHg <$> parseJSON v) <|>
82+ (PArchive <$> parseJSON v) <|>
83+ (PNewGit <$> parseJSON v) <|>
52− (LocationHg <$> parseJSON v)
84+ (PNewHg <$> parseJSON v)
53
85
54instance ToJSON Package where
86instance ToJSON Package where
55 toJSON = \case
87 toJSON = \case
56− Simple t -> toJSON t
88+ PSimple t -> toJSON t
57− LocationSimple t -> toJSON t
89+ PLocationSimple t -> toJSON t
58− LocationGit t -> toJSON t
90+ PLocationGit t -> toJSON t
59− LocationHg t -> toJSON t
91+ PLocationHg t -> toJSON t
60−
92+ PArchive t -> toJSON t
93+ PNewGit t -> toJSON t
94+ PNewHg t -> toJSON t
95+
96+-- To support both old and new syntax, we allow all variants of package
97+-- definitions in "packages" and "extra-deps" sections
61data Config = Config
98data Config = Config
62− { _cResolver :: !Text
99+ { _cResolver :: Text
63− , _cPackages :: !(Maybe [Package])
100+ , _cPackages :: Maybe [Package]
64− , _cExtraDeps :: !(Maybe [Text])
101+ , _cExtraDeps :: Maybe [Package]
65 } deriving (Eq, Show)
102 } deriving (Eq, Show)
66
103
67makeLenses ''Config
104makeLenses ''Config
src/Stack/Types.hs+2−4
@@ -1,5 +1,3 @@
1−{-# LANGUAGE TemplateHaskell #-}
2−
3module Stack.Types where
1module Stack.Types where
4
2
5import Control.Lens
3import Control.Lens
@@ -8,8 +6,8 @@ import System.FilePath
8
6
9
7
10data StackYaml = StackYaml
8data StackYaml = StackYaml
11− { _syDirName :: !FilePath
9+ { _syDirName :: FilePath
12− , _syFileName :: !FilePath }
10+ , _syFileName :: FilePath }
13 deriving (Ord, Eq, Show)
11 deriving (Ord, Eq, Show)
14
12
15makeLenses ''StackYaml
13makeLenses ''StackYaml
stack.yaml+10−8
@@ -1,9 +1,11 @@
1−resolver: lts-9.1
1+resolver: lts-12.2
2−packages:
3−- '.'
4extra-deps:
2extra-deps:
5−- Cabal-2.0.0.2
3+ - yaml-0.8.31.1
6−- cabal2nix-2.5
7−- stackage-curator-0.15.0.0
4+ - git: https://github.com/fpco/stackage-curator.git
8−nix:
5+ commit: 73c5ed06602990c33d3fec1711e27875f283b6bf
9− packages: [icu openssl zlib]
6+ - git: https://github.com/jwiegley/gitlib.git
7+ commit: 70c99759b8b9377f67492fe29afb32f05882409d
8+ subdirs:
9+ - gitlib
10+ - gitlib-libgit2
11+
stackage2nix.cabal+10−7
@@ -1,7 +1,7 @@
1name: stackage2nix
1name: stackage2nix
2−version: 0.3.0
2+version: 0.7.2
3synopsis: Convert Stack files into Nix build instructions.
3synopsis: Convert Stack files into Nix build instructions.
4−homepage: https://github.com/4e6/stackage2nix#readme
4+homepage: https://github.com/typeable/stackage2nix#readme
5license: BSD3
5license: BSD3
6license-file: LICENSE
6license-file: LICENSE
7author: Dmitry Bushev
7author: Dmitry Bushev
@@ -31,11 +31,11 @@ library
31 , LtsHaskell
31 , LtsHaskell
32 , Paths_stackage2nix
32 , Paths_stackage2nix
33 build-depends: base > 4.7 && < 5
33 build-depends: base > 4.7 && < 5
34− , Cabal > 1.24
34+ , Cabal > 2.2
35 , QuickCheck
35 , QuickCheck
36 , aeson
36 , aeson
37 , bytestring
37 , bytestring
38− , cabal2nix >= 2.5
38+ , cabal2nix >= 2.7.2
39 , containers
39 , containers
40 , deepseq
40 , deepseq
41 , distribution-nixpkgs >= 1.1
41 , distribution-nixpkgs >= 1.1
@@ -44,13 +44,14 @@ library
44 , gitlib > 3
44 , gitlib > 3
45 , gitlib-libgit2 > 3
45 , gitlib-libgit2 > 3
46 , hopenssl > 2.2
46 , hopenssl > 2.2
47− , inflections
47+ , inflections >= 0.3
48 , language-nix
48 , language-nix
49 , lens
49 , lens
50 , network-uri
50 , network-uri
51 , optparse-applicative
51 , optparse-applicative
52 , pretty
52 , pretty
53 , stackage-curator >= 0.15
53 , stackage-curator >= 0.15
54+ , tagged
54 , text
55 , text
55 , unordered-containers
56 , unordered-containers
56 , yaml
57 , yaml
@@ -59,7 +60,7 @@ library
59 , RecordWildCards
60 , RecordWildCards
60 , TemplateHaskell
61 , TemplateHaskell
61 default-language: Haskell2010
62 default-language: Haskell2010
62− ghc-options: -Wall -funbox-strict-fields
63+ ghc-options: -Wall
63
64
64executable stackage2nix
65executable stackage2nix
65 hs-source-dirs: stackage2nix
66 hs-source-dirs: stackage2nix
@@ -77,6 +78,7 @@ test-suite spec
77 , Cabal
78 , Cabal
78 , bytestring
79 , bytestring
79 , hspec
80 , hspec
81+ , network-uri
80 , pretty
82 , pretty
81 , shakespeare
83 , shakespeare
82 , stackage2nix
84 , stackage2nix
@@ -86,9 +88,10 @@ test-suite spec
86 other-modules: Language.Nix.FilePathSpec
88 other-modules: Language.Nix.FilePathSpec
87 , PrettyPrintingSpec
89 , PrettyPrintingSpec
88 , Stack.Config.YamlSpec
90 , Stack.Config.YamlSpec
91+ , Stack.ConfigSpec
89 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
92 ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
90 default-language: Haskell2010
93 default-language: Haskell2010
91
94
92source-repository head
95source-repository head
93 type: git
96 type: git
94− location: https://github.com/4e6/stackage2nix
97+ location: https://github.com/typeable/stackage2nix
test/Stack/Config/YamlSpec.hs+97−13
@@ -1,7 +1,7 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE QuasiQuotes #-}
2{-# LANGUAGE QuasiQuotes #-}
3
3
4−module Stack.Config.YamlSpec where
4+module Stack.Config.YamlSpec (spec) where
5
5
6import Data.ByteString
6import Data.ByteString
7import Data.Text.Encoding as T
7import Data.Text.Encoding as T
@@ -39,10 +39,48 @@ extra-deps:
39- acme-missiles-0.3
39- acme-missiles-0.3
40|]
40|]
41
41
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+
42configMinimal :: Config
80configMinimal :: Config
43configMinimal = Config
81configMinimal = Config
44 { _cResolver = "lts-8.15"
82 { _cResolver = "lts-8.15"
45− , _cPackages = Just [ Simple "." ]
83+ , _cPackages = Just [ PSimple "." ]
46 , _cExtraDeps = Nothing
84 , _cExtraDeps = Nothing
47 }
85 }
48
86
@@ -50,27 +88,73 @@ config :: Config
50config = Config
88config = Config
51 { _cResolver = "lts-3.7"
89 { _cResolver = "lts-3.7"
52 , _cPackages = Just
90 , _cPackages = Just
53− [ Simple "."
91+ [ PSimple "."
54− , LocationSimple (Location "dir1/dir2" Nothing Nothing)
92+ , PLocationSimple (Location "dir1/dir2" Nothing Nothing)
55− , LocationSimple (Location "https://example.com/foo/bar/baz-0.0.2.tar.gz" (Just True) Nothing)
93+ , PLocationSimple (Location "https://example.com/foo/bar/baz-0.0.2.tar.gz" (Just True) Nothing)
56− , LocationGit $ Location
94+ , PLocationGit $ Location
57 (Git
95 (Git
58 "git@github.com:commercialhaskell/stack.git"
96 "git@github.com:commercialhaskell/stack.git"
59 "6a86ee32e5b869a877151f74064572225e1a0398")
97 "6a86ee32e5b869a877151f74064572225e1a0398")
60 Nothing Nothing
98 Nothing Nothing
61− , LocationGit (Location
99+ , PLocationGit (Location
62 (Git
100 (Git
63 "git@github.com:example/mega-repo"
101 "git@github.com:example/mega-repo"
64 "6a86ee32e5b869a877151f74064572225e1a0000")
102 "6a86ee32e5b869a877151f74064572225e1a0000")
65 Nothing (Just ["subdir1", "subdir2"]))
103 Nothing (Just ["subdir1", "subdir2"]))
66 ]
104 ]
67 , _cExtraDeps = Just
105 , _cExtraDeps = Just
68− ["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+ ]
69 }
148 }
70
149
71spec :: Spec
150spec :: Spec
72−spec = describe "Parse" $ do
151+spec = describe "Config" $ do
73− specify "config-minimal" $
152+ specify "minimal" $
74− (Y.decode configYamlMinimal :: Maybe Config) `shouldBe` Just configMinimal
153+ (decodeMaybe configYamlMinimal :: Maybe Config) `shouldBe` Just configMinimal
75− specify "config-full" $
154+ specify "full" $
76− (Y.decode configYaml :: Maybe Config) `shouldBe` Just config
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+ }