unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#39309] .[PATCH] WIP gnu: add stack.
@ 2020-01-27 14:56 John Soo
  2020-01-29 15:17 ` [bug#39309] [PATCH WIP] " John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-01-27 14:56 UTC (permalink / raw)
  To: 39309

[-- Attachment #1: Type: text/plain, Size: 628 bytes --]

Hi Guix,

I looked at the wishlist on libreplanet and saw stack was on the list.
Also after the recent thread on haskell and clojure development I
realized stack would help out there.

I tried to package it which seems straightforward. I got the
dependencies built and linted but stack itself is failing with the
following:

gcc: error trying to exec
'/gnu/store/...-gcc-7.4.0/libexec/gcc/x86_64-unknown-linux-gnu/7.4.0/collect2':
execv: Argument list too long

This looks a lot like the nix issue here:
https://github.com/NixOS/nixpkgs/issues/41340

I thought I would share my work and maybe someone could help.

Thanks,

John

[-- Attachment #2: 0004-gnu-Add-ghc-th-utilities.patch --]
[-- Type: text/x-patch, Size: 2822 bytes --]

From 471e1d216493d955d8ad392e3a98ff9851c1104a Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:51:19 -0800
Subject: [PATCH 04/34] gnu: Add ghc-th-utilities.

* gnu/packages/haskell-xyz.scm (ghc-th-utilities): New variable.
---
 gnu/packages/haskell-xyz.scm | 53 ++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 7e06eb00d6..105851fc2a 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11849,6 +11849,59 @@ and @code{Eq} instances.  These instances used to live in the haskell-src-meta
 package, and that's where the version number started.")
     (license license:bsd-3)))
 
+(define-public ghc-th-utilities
+  (package
+    (name "ghc-th-utilities")
+    (version "0.2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-utilities/th-utilities-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1sy3bgwc85zw999cya92xsp9jllclwbzw9fmjmhqi4r5kj2gyk96"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-hspec-discover" ,ghc-hspec-discover)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-th-orphans" ,ghc-th-orphans)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-vector" ,ghc-vector)))
+    (home-page
+      "https://github.com/fpco/th-utilities#readme")
+    (synopsis
+      "Collection of useful functions for use with Template Haskell")
+    (description
+     "The th-utilities package provides a number of useful utilities for
+Template Haskell.  In particular:
+
+@itemize
+
+@item @code{TH.Derive} provides a convenient system for using TH to derive
+typeclass instances.  It allows for open registration of TH derivers, and
+reuses instance syntax for invoking them.  TH.Derive.Storable defines
+derivation of Storable for ADTs.
+
+@item @code{TH.ReifyDataType} provides utilities for reifying simplified
+datatype info.  It omits details that you don't usually want to handle, making
+it much more straightforward to generate code based on datatype structure.
+
+@item @code{TH.RelativePaths} provides utilities for loading files based on
+paths relative to the cabal file.  This is particularly handy for loading code
+into ghci even when its current dir isn't the package dir.  Ideally, this
+module would be used by everyone who currently uses qAddDependentFile.
+
+@item @code{TH.Utilities} provides a miscellaneous set of utilities that are
+useful within this package and elsewhere.
+
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-these
   (package
     (name "ghc-these")
-- 
2.25.0


[-- Attachment #3: 0002-gnu-Add-ghc-singletons.patch --]
[-- Type: text/x-patch, Size: 2164 bytes --]

From e39b3e9fe3f4c990751a73bf379d58d215637951 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:49:21 -0800
Subject: [PATCH 02/34] gnu: Add ghc-singletons.

* gnu/packages/haskell-xyz.scm (ghc-singletons): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 0beaf40146..502ff1214f 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10532,6 +10532,43 @@ them.")
 are the bottleneck of web servers.")
     (license license:bsd-3)))
 
+(define-public ghc-singletons
+  (package
+    (name "ghc-singletons")
+    (version "2.5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/singletons/singletons-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0izi487dpn5dx5yzm0bqrrjj2fcy6y6jyk81848yq4i8fcx0mc10"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-th-desugar" ,ghc-th-desugar)
+        ("ghc-syb" ,ghc-syb)))
+    (native-inputs
+      `(("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-golden" ,ghc-tasty-golden)))
+    (home-page
+      "https://www.github.com/goldfirere/singletons")
+    (synopsis
+      "Framework for generating singleton types")
+    (description
+      "This library generates singleton types, promoted functions, and
+singleton functions using Template Haskell.  It is useful for programmers who
+wish to use dependently typed programming techniques.  The library was
+originally presented in /Dependently Typed Programming with Singletons/,
+published at the Haskell Symposium,
+2012.  (https://cs.brynmawr.edu/~rae/papers/2012/singletons/paper.pdf) Version
+1.0 and onwards works a lot harder to promote functions.  See the paper
+published at Haskell Symposium, 2014:
+https://cs.brynmawr.edu/~rae/papers/2014/promotion/promotion.pdf.")
+    (license license:bsd-3)))
+
 (define-public ghc-size-based
   (package
     (name "ghc-size-based")
-- 
2.25.0


[-- Attachment #4: 0005-gnu-Add-ghc-rio-orphans.patch --]
[-- Type: text/x-patch, Size: 2109 bytes --]

From f7532180d638087cbb8d09bc612c7c12c8e622fe Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:08 -0800
Subject: [PATCH 05/34] gnu: Add ghc-rio-orphans.

* gnu/packages/haskell-xyz.scm (ghc-rio-orphans): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 105851fc2a..d01eec8f06 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9834,6 +9834,46 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-orphans
+  (package
+    (name "ghc-rio-orphans")
+    (version "0.1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-orphans/rio-orphans-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0klbshdsv3gq3l7g1d6gq2wxdqjlqxbnwk1lbg5dpbz7yrnjr3by"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-fast-logger" ,ghc-fast-logger)
+        ("ghc-hspec-discover" ,ghc-hspec-discover)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-monad-logger" ,ghc-monad-logger)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-transformers-base" ,ghc-transformers-base)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/commercialhaskell/rio#readme")
+    (synopsis
+      "Orphan instances for the RIO type in the rio package")
+    (description
+     "Provides orphan instances for the RIO data type.  Currently supports:
+
+@itemize
+@item MonadCatch and MonadMask from exceptions
+@item MonadBase from transformers-base
+@item MonadBaseControl from monad-control
+@item MonadResource from resourcet
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.25.0


[-- Attachment #5: 0001-gnu-Add-ghc-th-desugar.patch --]
[-- Type: text/x-patch, Size: 2413 bytes --]

From 639e9ae9fd93ea527b4433b806f0eb376722dd04 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:48:54 -0800
Subject: [PATCH 01/34] gnu: Add ghc-th-desugar.

* gnu/packages/haskell-xyz.scm (ghc-th-desugar): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 67fec7c597..0beaf40146 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11648,6 +11648,46 @@ single, easier to use informational datatype while supporting many versions of
 Template Haskell.")
     (license license:isc)))
 
+(define-public ghc-th-desugar
+  (package
+    (name "ghc-th-desugar")
+    (version "1.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-desugar/th-desugar-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1vxg0jvc239ngmv53yx564b7wkgd0b10xvx5phxvnnpm9n2pljpi"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-syb" ,ghc-syb)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-expand-syns" ,ghc-th-expand-syns)))
+    (native-inputs
+      `(("ghc-hunit" ,ghc-hunit)
+        ("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/goldfirere/th-desugar")
+    (synopsis
+      "Functions to desugar Template Haskell")
+    (description
+      "This package provides the Language.Haskell.TH.Desugar module, which
+desugars Template Haskell's rich encoding of Haskell syntax into a simpler
+encoding.  This desugaring discards surface syntax information (such as the
+use of infix operators) but retains the original meaning of the TH code.  The
+intended use of this package is as a preprocessor for more advanced code
+manipulation tools.  Note that the input to any of the @code{ds...} functions
+should be produced from a TH quote, using the syntax @code{[| ... |]}.  If the
+input to these functions is a hand-coded TH syntax tree, the results may be
+unpredictable.  In particular, it is likely that promoted datatypes will not
+work as expected.")
+    (license license:bsd-3)))
+
 (define-public ghc-th-expand-syns
   (package
     (name "ghc-th-expand-syns")
-- 
2.25.0


[-- Attachment #6: 0003-gnu-Add-ghc-only.patch --]
[-- Type: text/x-patch, Size: 1659 bytes --]

From 3712c5d6b38ce37bcc0358dd3f057b381cdb1092 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:50:44 -0800
Subject: [PATCH 03/34] gnu: Add ghc-only.

* gnu/packages/haskell-xyz.scm (ghc-only): New variable.
---
 gnu/packages/haskell-xyz.scm | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 502ff1214f..7e06eb00d6 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8057,6 +8057,34 @@ old @code{time} library.  For new projects, the newer
 @uref{https://hackage.haskell.org/package/time, time library} is recommended.")
     (license license:bsd-3)))
 
+(define-public ghc-only
+  (package
+    (name "ghc-only")
+    (version "0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/Only/Only-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0rdj3a629fk2vp121jq8mf2smkblrz5w3cxhlsyx6my2x29s2ymb"))))
+    (build-system haskell-build-system)
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "1ahk7p34kmh041mz7lyc10nhcxgv2i4z8nvzxvqm2x34gslmsbzr")))
+    (home-page
+      "http://hackage.haskell.org/package/Only")
+    (synopsis
+      "The 1-tuple type or single-value \"collection\"")
+    (description
+      "This package provides a canonical anonymous 1-tuple type missing from
+Haskell for attaching typeclass instances.")
+    (license license:bsd-3)))
+
 (define-public ghc-opengl
   (package
     (name "ghc-opengl")
-- 
2.25.0


[-- Attachment #7: 0006-gnu-Add-ghc-xmlgen.patch --]
[-- Type: text/x-patch, Size: 1729 bytes --]

From c419e0e268df454ba0dfb218158644c634f1d86d Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:39 -0800
Subject: [PATCH 06/34] gnu: Add ghc-xmlgen.

* gnu/packages/haskell-xyz.scm (ghc-xmlgen): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index d01eec8f06..7728ba2e60 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13583,6 +13583,39 @@ the @code{conduit} package.")
 documents.")
     (license license:expat)))
 
+(define-public ghc-xmlgen
+  (package
+    (name "ghc-xmlgen")
+    (version "0.6.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/xmlgen/xmlgen-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1milbbr2iqwckqbq6i9sypinvs4hs7mzqn274x350psjfy6ajvwj"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-blaze-builder" ,ghc-blaze-builder)))
+    (native-inputs
+      `(("ghc-hxt" ,ghc-hxt)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:tests? #f ; FIXME failing tests
+       #:cabal-revision
+        ("1"
+         "0vwnqd0lsw81llsn0psga5r6pw7jh69vfbj3rnz7c2fpkc0gjh3j")))
+    (home-page
+      "http://hackage.haskell.org/package/xmlgen")
+    (synopsis "Fast XML generation library")
+    (description
+      "Library for high-performance XML generation.")
+    (license license:bsd-3)))
+
 (define-public ghc-yaml
   (package
     (name "ghc-yaml")
-- 
2.25.0


[-- Attachment #8: 0007-gnu-Add-ghc-cpphs.patch --]
[-- Type: text/x-patch, Size: 2038 bytes --]

From f2debebd5818ff65351b5bad4116d750691c1b2b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:53:38 -0800
Subject: [PATCH 07/34] gnu: Add ghc-cpphs.

* gnu/packages/haskell-xyz.scm (ghc-cpphs): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 7728ba2e60..fe82957e0c 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2499,6 +2499,39 @@ pure @code{Either} value.  This means that you need not remember which specific
 function performs the conversion you desire.")
     (license license:bsd-3)))
 
+(define-public ghc-cpphs
+  (package
+    (name "ghc-cpphs")
+    (version "1.20.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cpphs/cpphs-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-old-locale" ,ghc-old-locale)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-polyparse" ,ghc-polyparse)))
+    (home-page "https://archives.haskell.org/projects.haskell.org/cpphs/")
+    (synopsis
+      "Liberalised re-implementation of cpp, the C pre-processor")
+    (description
+      "Cpphs is a re-implementation of the C pre-processor that is both more
+compatible with Haskell, and itself written in Haskell so that it can be
+distributed with compilers.
+
+This version of the C pre-processor is pretty-much feature-complete and
+compatible with traditional (K&R) pre-processors.  Additional features
+include: a plain-text mode; an option to unlit literate code files; and an
+option to turn off macro-expansion.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #9: 0008-gnu-Add-ghc-htf.patch --]
[-- Type: text/x-patch, Size: 2827 bytes --]

From 16014ef73a9e72014beb9435d262a34bb18ecf6d Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:46:31 -0800
Subject: [PATCH 08/34] gnu: Add ghc-htf.

* gnu/packages/haskell-check.scm (ghc-htf): New variable.
---
 gnu/packages/haskell-xyz.scm | 52 ++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index fe82957e0c..0e97dc986e 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -5781,6 +5781,58 @@ for user-defined custom schemas).
 @end itemize")
     (license license:gpl2+)))
 
+(define-public ghc-htf
+  (package
+    (name "ghc-htf")
+    (version "0.13.2.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/HTF/HTF-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1kmf95y4vijdiih27xa35acl02dsxqnd9qa56z1waki5qqiz6nin"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-diff" ,ghc-diff)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-cpphs" ,ghc-cpphs)
+        ("ghc-haskell-src" ,ghc-haskell-src)
+        ("ghc-lifted-base" ,ghc-lifted-base)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-random" ,ghc-random)
+        ("ghc-regex-compat" ,ghc-regex-compat)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-xmlgen" ,ghc-xmlgen)))
+    (native-inputs
+      `(("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (arguments
+     `(#:tests? #f ; Tests use stack, causing cyclical dependencies
+       #:cabal-revision
+        ("1"
+         "0l18mp06jjwpjbnvj548naas1xhnc46c8l0pbgzi3bm6siq5hhv6")))
+    (home-page "https://github.com/skogsbaer/HTF/")
+    (synopsis "Haskell Test Framework")
+    (description
+      "The Haskell Test Framework (HTF for short) lets you define unit tests
+with hunit, QuickCheck properties , and black box tests in an easy and
+convenient way.  HTF uses a custom preprocessor that collects test definitions
+automatically.  Furthermore, the preprocessor allows HTF to report failing
+test cases with exact file name and line number information.  Additionally,
+HTF tries to produce highly readable output for failing tests: for example, it
+colors and pretty prints expected and actual results and provides a diff
+between the two values.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-http-api-data
   (package
     (name "ghc-http-api-data")
-- 
2.25.0


[-- Attachment #10: 0010-gnu-Add-ghc-cryptohash-cryptoapi.patch --]
[-- Type: text/x-patch, Size: 1742 bytes --]

From e2e615ad884876ce6170514a18a362bef23aa8b3 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:59 -0800
Subject: [PATCH 10/34] gnu: Add ghc-cryptohash-cryptoapi.

* gnu/packages/haskell-xyz.scm (ghc-cryptohash-cryptoapi): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 04ed30faf3..4fb0c89ec3 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2565,6 +2565,33 @@ include: a plain-text mode; an option to unlit literate code files; and an
 option to turn off macro-expansion.")
     (license license:lgpl2.1)))
 
+(define-public ghc-cryptohash-cryptoapi
+  (package
+    (name "ghc-cryptohash-cryptoapi")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptohash-cryptoapi"
+              "/cryptohash-cryptoapi-" version ".tar.gz"))
+        (sha256
+          (base32
+            "13h5f9pmcd0swa4asl7wzpf5lskpgjdqrmy1mqdc78gsxdj8cyki"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-memory" ,ghc-memory)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/vincenthz/hs-cryptohash-cryptoapi")
+    (synopsis "Crypto-api interfaces for cryptohash")
+    (description
+      "Crypto-api interfaces for cryptohash.")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #11: 0009-gnu-Add-ghc-cipher-aes128.patch --]
[-- Type: text/x-patch, Size: 2002 bytes --]

From 06dd28d8d0da785ae94c9cf7a0832f85e4e5ab82 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:31 -0800
Subject: [PATCH 09/34] gnu: Add ghc-cipher-aes128.

* gnu/packages/haskell-xyz.scm (ghc-cipher-aes128): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 0e97dc986e..04ed30faf3 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -1837,6 +1837,39 @@ representations for Haskell")
 classy-prelude.")
     (license license:expat)))
 
+(define-public ghc-cipher-aes128
+  (package
+    (name "ghc-cipher-aes128")
+    (version "0.7.0.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cipher-aes128/cipher-aes128-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bafr5aa9mjfzdgc6gwapvb9g04pyh4lwhv2x2m1v3ljjglg9d1w"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/TomMD/cipher-aes128")
+    (synopsis
+      "AES and common modes using AES-NI when available")
+    (description
+      "An implementation of AES and common modes of operation.  It borrows
+Hanquez's C AES code (see cipher-aes) but is unique due to including
+compile-time detection of NI compiler support, a slightly more functional
+interface for GCM operations, exposure of @code{Ptr} based operations via the
+@code{.Internal} module, and build-in crypto-api support.  Cipher-aes128 was
+originally developed as \"cipher-aes plus trampolines\", which has since been
+adopted into cipher-aes.")
+    (license license:bsd-3)))
+
 (define-public ghc-clock
   (package
     (name "ghc-clock")
-- 
2.25.0


[-- Attachment #12: 0011-gnu-Add-ghc-drbg.patch --]
[-- Type: text/x-patch, Size: 2168 bytes --]

From cc75205bc4e54661ded0dfe36d7324dc8e24e33d Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:15:31 -0800
Subject: [PATCH 11/34] gnu: Add ghc-drbg.

* gnu/packages/haskell-xyz.scm (ghc-drbg): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 4fb0c89ec3..1ff55b99ab 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -3322,6 +3322,47 @@ It is modeled after doctest for Python, see
 between double precision floating point and text.")
     (license license:bsd-3)))
 
+(define-public ghc-drbg
+  (package
+    (name "ghc-drbg")
+    (version "0.5.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/DRBG/DRBG-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1z9vqc1nw0mf2sqgddcipmlkz6mckq9wnrzqqdy3rj3c90135pr1"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-cereal" ,ghc-cereal)
+        ("ghc-prettyclass" ,ghc-prettyclass)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-cryptohash-cryptoapi" ,ghc-cryptohash-cryptoapi)
+        ("ghc-parallel" ,ghc-parallel)
+        ("ghc-cipher-aes128" ,ghc-cipher-aes128)
+        ("ghc-entropy" ,ghc-entropy)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+    (arguments
+     ;; FIXME Failing tests
+     `(#:tests? #f))
+    (home-page
+      "http://hackage.haskell.org/package/DRBG")
+    (synopsis "Cryptographically secure RNGs")
+    (description
+      "Deterministic random bit generator (aka RNG, PRNG) based HMACs, Hashes,
+and Ciphers.")
+    (license license:bsd-3)))
+
 (define-public ghc-dual-tree
   (package
     (name "ghc-dual-tree")
-- 
2.25.0


[-- Attachment #13: 0012-gnu-Add-ghc-rsa.patch --]
[-- Type: text/x-patch, Size: 2096 bytes --]

From 32f27a14692fd2c2c831c4c45d10009e4e923079 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:55:04 -0800
Subject: [PATCH 12/34] gnu: Add ghc-rsa.

* gnu/packages/haskell-xyz.scm (ghc-rsa): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 1ff55b99ab..f9478482a6 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10060,6 +10060,43 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rsa
+  (package
+    (name "ghc-rsa")
+    (version "2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/RSA/RSA-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "06k7nd7b1rdfb7891gw9bihrd9ripffbgqa14q1ryyj6vqa9r4jw"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-sha" ,ghc-sha)))
+    (native-inputs
+      `(("ghc-drbg" ,ghc-drbg)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+    (home-page
+      "http://hackage.haskell.org/package/RSA")
+    (synopsis
+      "Implementation of RSA")
+    (description
+      "This library implements the RSA encryption and signature algorithms for
+arbitrarily-sized ByteStrings.  While the implementations work, they are not
+necessarily the fastest ones on the planet.  Particularly key generation.  The
+algorithms included are based of RFC 3447, or the Public-Key Cryptography
+Standard for RSA, version 2.1 (a.k.a, PKCS#1 v2.1).")
+    (license license:bsd-3)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.25.0


[-- Attachment #14: 0015-gnu-Add-ghc-lens-aeson.patch --]
[-- Type: text/x-patch, Size: 2068 bytes --]

From 7afd36d54c8099fc5d71bccbf823c1ddc45b1ac5 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:05 -0800
Subject: [PATCH 15/34] gnu: Add ghc-lens-aeson.

* gnu/packages/haskell-xyz.scm (ghc-lens-aeson): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 83120d58e4..7402f77b16 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6668,6 +6668,43 @@ of getters, folds, isomorphisms, traversals, setters and lenses and their
 indexed variants.")
     (license license:bsd-3)))
 
+(define-public ghc-lens-aeson
+  (package
+    (name "ghc-lens-aeson")
+    (version "1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/lens-aeson/lens-aeson-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1k028ycmhz7mnjlrap88fqix4nmmpyy6b88m16kv77d3r8sz04a3"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-lens" ,ghc-lens)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-scientific" ,ghc-scientific)))
+    (native-inputs
+      `(("ghc-doctest" ,ghc-doctest)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-simple-reflect" ,ghc-simple-reflect)
+        ("ghc-cabal-doctest" ,ghc-cabal-doctest)))
+    (arguments
+      `(#:cabal-revision
+        ("6"
+         "1pg5v8fnlqw1krgi3d2a03a0zkjjdv5yp5f5z6q4mlb5jldz99a8")))
+    (home-page "https://github.com/lens/lens-aeson/")
+    (synopsis "Law-abiding lenses for aeson")
+    (description "Law-abiding lenses for aeson.")
+    (license license:expat)))
+
 (define-public ghc-libffi
   (package
     (name "ghc-libffi")
-- 
2.25.0


[-- Attachment #15: 0016-gnu-ghc-authenticate-oauth.patch --]
[-- Type: text/x-patch, Size: 1978 bytes --]

From a5f67113a58e18724a825196b1020bb3f8248cd7 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:36 -0800
Subject: [PATCH 16/34] gnu: ghc-authenticate-oauth.

* gnu/packages/haskell-xyz.scm (ghc-authenticate-oauth): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 7402f77b16..e8761193a8 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -643,6 +643,39 @@ complicated text/binary file formats.")
 from aeson.")
     (license license:bsd-3)))
 
+(define-public ghc-authenticate-oauth
+  (package
+    (name "ghc-authenticate-oauth")
+    (version "1.6.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/authenticate-oauth"
+               "/authenticate-oauth-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1hry1zbi7gbyfi94w9cyg6m7ii7xm68jnsph63zxdj2s4ns0ylp0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-http-client" ,ghc-http-client)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-rsa" ,ghc-rsa)
+        ("ghc-data-default" ,ghc-data-default)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-sha" ,ghc-sha)
+        ("ghc-random" ,ghc-random)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-blaze-builder" ,ghc-blaze-builder)
+        ("ghc-transformers-compat" ,ghc-transformers-compat)))
+    (home-page
+      "https://github.com/yesodweb/authenticate")
+    (synopsis
+      "Authenticate with OAuth for Haskell web applications")
+    (description
+     "A library to authenticate with OAuth for Haskell web applications.")
+    (license license:bsd-3)))
+
 (define-public ghc-auto-update
   (package
     (name "ghc-auto-update")
-- 
2.25.0


[-- Attachment #16: 0013-gnu-Add-ghc-crypto-pubkey-types.patch --]
[-- Type: text/x-patch, Size: 1633 bytes --]

From e2e7c88f5c16785072cb7553d46508509f456ac1 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:56:10 -0800
Subject: [PATCH 13/34] gnu: Add ghc-crypto-pubkey-types.

* gnu/packages/haskell-xyz.scm (ghc-crypto-pubkey-types): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index f9478482a6..83120d58e4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2592,6 +2592,31 @@ option to turn off macro-expansion.")
       "Crypto-api interfaces for cryptohash.")
     (license license:bsd-3)))
 
+(define-public ghc-crypto-pubkey-types
+  (package
+    (name "ghc-crypto-pubkey-types")
+    (version "0.4.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/crypto-pubkey-types/"
+               "crypto-pubkey-types-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0q0wlzjmpx536h1zcdzrpxjkvqw8abj8z0ci38138kpch4igbnby"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-asn1-types" ,ghc-asn1-types)
+        ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
+    (home-page
+      "https://github.com/vincenthz/hs-crypto-pubkey-types")
+    (synopsis
+      "Generic cryptography Public keys algorithm types")
+    (description
+      "Generic cryptography public keys algorithm types")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #17: 0014-gnu-Add-ghc-cabal-doctest.patch --]
[-- Type: text/x-patch, Size: 2026 bytes --]

From 234a2a8a780f368d7d39e8619221505232cb7103 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:45:30 -0800
Subject: [PATCH 14/34] gnu: Add ghc-cabal-doctest.

* gnu/packages/haskell-check.scm (ghc-cabal-doctest): New variable.
---
 gnu/packages/haskell-check.scm | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 7942f2019a..98b7617520 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -944,7 +944,7 @@ To get started quickly, see the examples:
     (description
      "To properly work, the @code{doctest} package needs plenty of
 configuration.  This library provides the common bits for writing custom
-@file{Setup.hs} files.")
+@code{Setup.hs} files.")
     (license license:bsd-3)))
 
 (define-public ghc-testing-type-modifiers
@@ -996,3 +996,29 @@ values (similar to @code{toEnum} but for any algebraic data type).  This
 can be used for SmallCheck-style systematic testing, QuickCheck-style
 random testing, and hybrids of the two.")
     (license license:bsd-3)))
+
+(define-public ghc-cabal-doctest
+  (package
+    (name "ghc-cabal-doctest")
+    (version "1.0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cabal-doctest/cabal-doctest-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/phadej/cabal-doctest")
+    (synopsis
+      "Setup.hs helper for doctests running")
+    (description
+      "Currently (beginning of 2017), there isn't cabal doctest command. Yet,
+to properly work doctest needs plenty of configuration.  This library provides
+the common bits for writing custom Setup.hs.")
+    (license license:bsd-3)))
+
-- 
2.25.0


[-- Attachment #18: 0017-gnu-Add-ghc-wreq.patch --]
[-- Type: text/x-patch, Size: 3842 bytes --]

From 5dd25a9b8651568901b6be6327a540d959773c03 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:02:18 -0800
Subject: [PATCH 17/34] gnu: Add ghc-wreq.

* gnu/packages/haskell-xyz.scm (ghc-wreq): New variable.
---
 gnu/packages/haskell-xyz.scm | 84 ++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index e8761193a8..266bba38e4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13758,6 +13758,90 @@ modernized interface.")
     (description "Word8 library to be used with @code{Data.ByteString}.")
     (license license:bsd-3)))
 
+(define-public ghc-wreq
+  (package
+    (name "ghc-wreq")
+    (version "0.5.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/wreq/wreq-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "16xls71aby6jqc1frhwnlfvz1iwj1ms0rw9xzif02sn84470gn36"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-psqueues" ,ghc-psqueues)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-authenticate-oauth" ,ghc-authenticate-oauth)
+        ("ghc-base16-bytestring" ,ghc-base16-bytestring)
+        ("ghc-case-insensitive" ,ghc-case-insensitive)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-lens-aeson" ,ghc-lens-aeson)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mime-types" ,ghc-mime-types)
+        ("ghc-time-locale-compat" ,ghc-time-locale-compat)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (native-inputs
+      `(("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-network-info" ,ghc-network-info)
+        ("ghc-snap-core" ,ghc-snap-core)
+        ("ghc-snap-server" ,ghc-snap-server)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-uuid" ,ghc-uuid)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-doctest" ,ghc-doctest)
+        ("ghc-cabal-doctest" ,ghc-cabal-doctest)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("1"
+         "0gz674sb266hv6si9l79c3bv7n2nbssl1262c24in79sk27887gb")))
+    (home-page "https://www.serpentine.com/wreq")
+    (synopsis "Easy-to-use HTTP client library")
+    (description
+      "A web client library that is designed for ease of use.
+
+Tutorial: http://www.serpentine.com/wreq/tutorial.html
+
+Features include:
+@itemize
+@item Simple but powerful `lens`-based API .
+
+@item A solid test suite, and built on reliable libraries like http-client and
+lens.
+
+@item Session handling includes connection keep-alive and pooling, and cookie
+persistence.
+
+@item Automatic response body decompression.
+@item Powerful multipart form and file upload handling.
+
+@item Support for JSON requests and responses, including navigation of
+schema-less responses.
+
+@item Basic and OAuth2 bearer authentication.
+@item Early TLS support via the tls package
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-x11
   (package
     (name "ghc-x11")
-- 
2.25.0


[-- Attachment #19: 0018-gnu-Add-ghc-hspec-discover.patch --]
[-- Type: text/x-patch, Size: 1543 bytes --]

From cb9a9d6ed4ea2dc2ae6c48d3c6298481d20cd3cf Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:45:58 -0800
Subject: [PATCH 18/34] gnu: Add ghc-hspec-discover.

* gnu/packages/haskell-check.scm (ghc-hspec-discover): New variable.
---
 gnu/packages/haskell-check.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 98b7617520..94bf76ec3f 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -1022,3 +1022,27 @@ to properly work doctest needs plenty of configuration.  This library provides
 the common bits for writing custom Setup.hs.")
     (license license:bsd-3)))
 
+(define-public ghc-hspec-discover
+  (package
+    (name "ghc-hspec-discover")
+    (version "2.7.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/hspec-discover/hspec-discover-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0r47fm94wa6qrhp8cc1zzkjrxc32rnagfn9m9ga4dm6p6ydw4c8b"))))
+    (build-system haskell-build-system)
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-hspec-meta" ,ghc-hspec-meta)))
+    (home-page "http://hspec.github.io/")
+    (synopsis
+      "Automatically discover and run Hspec tests")
+    (description
+      "Automatically discover and run Hspec tests.")
+    (license license:expat)))
-- 
2.25.0


[-- Attachment #20: 0020-gnu-Add-ghc-optparse-simple.patch --]
[-- Type: text/x-patch, Size: 1634 bytes --]

From 93eafbcda51ef8da96c700cdce2acaadb388c6c1 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:19 -0800
Subject: [PATCH 20/34] gnu: Add ghc-optparse-simple.

* gnu/packages/haskell-xyz.scm (ghc-optparse-simple): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 9b4a106990..320583fffc 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8577,6 +8577,33 @@ easily work with command-line options.")
 command line options in Haskell.")
     (license license:bsd-3)))
 
+(define-public ghc-optparse-simple
+  (package
+    (name "ghc-optparse-simple")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-simple/optparse-simple-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1r00hkri42vyx552l8hcd1779fxiyl9w4k0pql915zsprirn8w82"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-githash" ,ghc-githash)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-semigroups" ,ghc-semigroups)))
+    (home-page
+      "https://github.com/fpco/optparse-simple#readme")
+    (synopsis
+      "Simple interface to optparse-applicative")
+    (description
+     "Simple interface to optparse-applicative.")
+    (license license:bsd-3)))
+
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-- 
2.25.0


[-- Attachment #21: 0019-gnu-Add-ghc-optparse-generic.patch --]
[-- Type: text/x-patch, Size: 2087 bytes --]

From c8c2af7d3afdcc7d6ec396446f262204661ff08f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:05:32 -0800
Subject: [PATCH 19/34] gnu: Add ghc-optparse-generic.

* gnu/packages/haskell-xyz.scm (ghc-optparse-generic): New variable.
---
 gnu/packages/haskell-xyz.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 266bba38e4..9b4a106990 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8512,6 +8512,42 @@ easily work with command-line options.")
 easily work with command-line options.")
     (license license:expat)))
 
+(define-public ghc-optparse-generic
+  (package
+    (name "ghc-optparse-generic")
+    (version "1.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-generic/optparse-generic-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "13rr3hq26dpmbami8vb6d1ig9ywk6jia22sp5dkp6jkfc1c9k4l0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-system-filepath" ,ghc-system-filepath)
+        ("ghc-only" ,ghc-only)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-void" ,ghc-void)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-singletons" ,ghc-singletons)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-th-desugar" ,ghc-th-desugar)))
+    (arguments
+      `(#:cabal-revision
+        ("3"
+         "0vszcjmxywblx5z9yvrz8c6yc104jgr1nv0sbv58ansd3rkjlzfn")))
+    (home-page
+      "http://hackage.haskell.org/package/optparse-generic")
+    (synopsis
+      "Auto-generate a command-line parser for your datatype")
+    (description
+      "This library auto-generates an optparse-applicative-compatible
+@code{Parser} from any data type that derives the @code{Generic} interface.")
+    (license license:bsd-3)))
 
 (define-public ghc-optparse-applicative
   (package
-- 
2.25.0


[-- Attachment #22: 0021-gnu-Add-ghc-githash.patch --]
[-- Type: text/x-patch, Size: 2515 bytes --]

From 68296b488b5ea7cb2dab2a07701562d79269cfe7 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:57 -0800
Subject: [PATCH 21/34] gnu: Add ghc-githash.

* gnu/packages/haskell-xyz.scm (ghc-githash): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 320583fffc..be6f1f2bd2 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -62,6 +62,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -4652,6 +4653,52 @@ properties for functions operating on them.")
 interfaces with ease.")
     (license license:bsd-3)))
 
+(define-public ghc-githash
+  (package
+    (name "ghc-githash")
+    (version "0.1.3.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/githash/githash-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "19xhs2nzm1myyjx3nkc3invy15c19cfx790vbcrl050n9sb330jr"))))
+    (build-system haskell-build-system)
+    (native-inputs
+      `(("git" ,git)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-hspec-discover" ,ghc-hspec-discover)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unliftio" ,ghc-unliftio)))
+    (home-page
+      "https://github.com/snoyberg/githash#readme")
+    (synopsis
+      "Compile git revision info into Haskell projects")
+    (description
+     "Some handy Template Haskell splices for including the current git hash and
+branch in the code of your project.  Useful for including in panic messages,
+--version output, or diagnostic info for more informative bug reports.
+
+Most of the complication in the GitHash module is due to the various places
+the current git hash might be stored:
+
+@itemize
+
+@item Detached HEAD: the hash is in .git/HEAD
+
+@item On a branch or tag: the hash is in a file pointed to by .git/HEAD in a
+location like .git/refs/heads
+
+@item On a branch or tag but in a repository with packed refs: the hash is in
+.git/packed-refs
+
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-gitrev
   (package
     (name "ghc-gitrev")
-- 
2.25.0


[-- Attachment #23: 0022-gnu-Add-ghc-rio-prettyprint.patch --]
[-- Type: text/x-patch, Size: 1800 bytes --]

From 9784a98272a635ffc6fd80c938380d93cf274835 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:07:43 -0800
Subject: [PATCH 22/34] gnu: Add ghc-rio-prettyprint.

* gnu/packages/haskell-xyz.scm (ghc-rio-prettyprint): New variable.
---
 gnu/packages/haskell-xyz.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index be6f1f2bd2..dc9da01334 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10265,6 +10265,38 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-prettyprint
+  (package
+    (name "ghc-rio-prettyprint")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-prettyprint/rio-prettyprint-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0n8ldc73i0954c6s8jh0hibxrisp84yh5pcxv3x3q0wg4v2xvr0m"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-colour" ,ghc-colour)
+        ("ghc-path" ,ghc-path)
+        ("ghc-rio" ,ghc-rio)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1hvhjqy7kfk7fglx1rw8axscy0dfzqwd1564awnwdhvmf8silkkn")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Pretty-printing for RIO")
+    (description "Pretty-printing for RIO.")
+    (license license:bsd-3)))
+
 (define-public ghc-rsa
   (package
     (name "ghc-rsa")
-- 
2.25.0


[-- Attachment #24: 0023-gnu-Add-ghc-regex-applicative-text.patch --]
[-- Type: text/x-patch, Size: 1725 bytes --]

From f6c912ace640b781d511be2d53e2e0bdbdd893c0 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:08:10 -0800
Subject: [PATCH 23/34] gnu: Add ghc-regex-applicative-text.

* gnu/packages/haskell-xyz.scm (ghc-regex-applicative-text): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index dc9da01334..460569616c 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9847,6 +9847,33 @@ copious examples.")
 regular expressions.  Parsers can be built using Applicative interface.")
     (license license:expat)))
 
+(define-public ghc-regex-applicative-text
+  (package
+    (name "ghc-regex-applicative-text")
+    (version "0.1.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/regex-applicative-text"
+              "/regex-applicative-text-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1ng2qhk4mvpzl8fx91ig7ldv09v9aqdsvn6yl9yjapc6h0ghb4xh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-regex-applicative" ,ghc-regex-applicative)))
+    (arguments
+      `(#:cabal-revision
+        ("4"
+         "0ykzppl1v6k70idjl73m4w161f6lsax89v1gp100y4xgipf3yijj")))
+    (home-page
+      "https://github.com/phadej/regex-applicative-text#readme")
+    (synopsis "Regex-applicative on text")
+    (description
+      "Wrapped regex-applicative primitives to work with Text.")
+    (license license:bsd-3)))
+
 (define-public ghc-regex-base
   (package
     (name "ghc-regex-base")
-- 
2.25.0


[-- Attachment #25: 0025-gnu-Add-ghc-pantry.patch --]
[-- Type: text/x-patch, Size: 4885 bytes --]

From 840d8e14bca9cb3d3cfcaaad01ae65fad7ae8038 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:18 -0800
Subject: [PATCH 25/34] gnu: Add ghc-pantry.

* gnu/packages/haskell-xyz.scm (ghc-pantry): New variable.
---
 gnu/packages/haskell-xyz.scm | 107 +++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index ab20436077..31b0578af7 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8818,6 +8818,113 @@ pandoc to represent structured documents.  It also provides functions for
 building up, manipulating and serialising @code{Pandoc} structures.")
     (license license:bsd-3)))
 
+(define-public ghc-pantry
+  (package
+    (name "ghc-pantry")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/pantry/pantry-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1m1sps9kc7y8zpba486lv5z8an3z8493zxb1qhghql6pybsprsgi"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-base-orphans" ,ghc-base-orphans)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-contravariant" ,ghc-contravariant)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-digest" ,ghc-digest)
+        ("ghc-filelock" ,ghc-filelock)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-hackage-security" ,ghc-hackage-security)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-hpack" ,ghc-hpack)
+        ("ghc-hspec-discover" ,ghc-hspec-discover)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-download" ,ghc-http-download)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mono-traversable" ,ghc-mono-traversable)
+        ("ghc-network" ,ghc-network)
+        ("ghc-network-uri" ,ghc-network-uri)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-persistent" ,ghc-persistent)
+        ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+        ("ghc-persistent-template" ,ghc-persistent-template)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-orphans" ,ghc-rio-orphans)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+        ("ghc-safe" ,ghc-safe)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-tar-conduit" ,ghc-tar-conduit)
+        ("ghc-text-metrics" ,ghc-text-metrics)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-lift-instances" ,ghc-th-lift-instances)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-reify-many" ,ghc-th-reify-many)
+        ("ghc-th-utilities" ,ghc-th-utilities)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-unliftio" ,ghc-unliftio)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-zip-archive" ,ghc-zip-archive)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hedgehog" ,ghc-hedgehog)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)))
+    (arguments
+     `(; Tests do network IO
+       #:tests? #f))
+    (home-page
+      "https://github.com/commercialhaskell/pantry#readme")
+    (synopsis
+      "Content addressable Haskell package management")
+    (description
+     "Content addressable Haskell package management, providing for secure,
+reproducible acquisition of Haskell package contents and metadata.
+
+What is Pantry
+
+@itemize
+
+@item A Haskell library, command line executable, storage specification, and
+network protocol
+
+@item Intended for content-addressable storage of Haskell packages
+@item Allows non-centralized package storage
+@item Primarily for use by Stackage and Stack, hopefully other tools as well
+@end itemize
+
+Goals
+
+@itemize
+@item Efficient, distributed package storage for Haskell
+@item Superset of existing storage mechanisms
+@item Security via content addressable storage
+@item Allow more Stackage-style snapshots to exist
+@item Allow authors to bypass Hackage for uploads
+@item Allow Stackage to create forks of packages on Hackage
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-parallel
   (package
     (name "ghc-parallel")
-- 
2.25.0


[-- Attachment #26: 0024-gnu-Add-ghc-project-template.patch --]
[-- Type: text/x-patch, Size: 1961 bytes --]

From 55b1aa71fb4a18852dc7148ed84c90ed0d9cf5c1 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:08:48 -0800
Subject: [PATCH 24/34] gnu: Add ghc-project-template.

* gnu/packages/haskell-xyz.scm (ghc-project-template): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 460569616c..ab20436077 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9486,6 +9486,39 @@ API.")
     (description "This library provides profunctors for Haskell.")
     (license license:bsd-3)))
 
+(define-public ghc-project-template
+  (package
+    (name "ghc-project-template")
+    (version "0.2.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/project-template/project-template-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1p69ww4rhah2qxragl615wl4a6mk4x9w09am8knmz3s4lxpljlpb"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-hspec-discover" ,ghc-hspec-discover)
+        ("ghc-resourcet" ,ghc-resourcet)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "0lq3sqnq0nr0gbvgzp0lqdl3j3mqdmdlf8xsw0j3pjh581xj3k0a")))
+    (home-page "https://github.com/fpco/haskell-ide")
+    (synopsis "Specify Haskell project templates and generate files")
+    (description "Specify Haskell project templates and generate files.")
+    (license license:bsd-3)))
+
 (define-public ghc-protolude
   (package
     (name "ghc-protolude")
-- 
2.25.0


[-- Attachment #27: 0028-gnu-Add-ghc-mustache.patch --]
[-- Type: text/x-patch, Size: 2310 bytes --]

From ff5fec936fa0bd6c8cc2e28c8757e4f63952722b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:38 -0800
Subject: [PATCH 28/34] gnu: Add ghc-mustache.

* gnu/packages/haskell-xyz.scm (ghc-mustache): New variable.
---
 gnu/packages/haskell-xyz.scm | 46 ++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index b9bdc22d45..a86fb5d8cc 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8007,6 +8007,52 @@ implementation is pure Haskell, so it might be a bit slower than a C FFI
 binding.")
     (license license:bsd-3)))
 
+(define-public ghc-mustache
+  (package
+    (name "ghc-mustache")
+    (version "2.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mustache/mustache-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1q3vadcvv2pxg6rpp92jq5zy784jxphdfpf6xn9y6wg9g3jn7201"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-either" ,ghc-either)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-scientific" ,ghc-scientific)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-cmdargs" ,ghc-cmdargs)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-base-unicode-symbols" ,ghc-base-unicode-symbols)
+        ("ghc-wreq" ,ghc-wreq)
+        ("ghc-zlib" ,ghc-zlib)
+        ("ghc-tar" ,ghc-tar)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-temporary" ,ghc-temporary)))
+    (arguments
+     ;; Tests do network IO
+     `(#:tests? #f))
+    (home-page
+      "https://github.com/JustusAdam/mustache")
+    (synopsis "Mustache template parser library")
+    (description
+      "Allows parsing and rendering template files with mustache markup.  See
+the mustache language reference http://mustache.github.io/mustache.5.html.
+
+Implements the mustache spec version 1.1.3.")
+    (license license:bsd-3)))
+
 (define-public ghc-mwc-random
   (package
     (name "ghc-mwc-random")
-- 
2.25.0


[-- Attachment #28: 0027-gnu-Add-ghc-neat-interpolation.patch --]
[-- Type: text/x-patch, Size: 1867 bytes --]

From e15581c2f8a252e1bfe839dbde452c152e9e640c Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:09 -0800
Subject: [PATCH 27/34] gnu: Add ghc-neat-interpolation.

* gnu/packages/haskell-xyz.scm (ghc-neat-interpolation): New variable.
---
 gnu/packages/haskell-xyz.scm | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 8616b58ec8..b9bdc22d45 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8114,6 +8114,35 @@ with pseudo-graphical interfaces.  This package is a nice, modern binding to GNU
 ncurses.")
     (license license:gpl3)))
 
+(define-public ghc-neat-interpolation
+  (package
+    (name "ghc-neat-interpolation")
+    (version "0.3.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/neat-interpolation"
+              "/neat-interpolation-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0lhpjckwhzlvx4cdhrwprwb85vc7hc44ybvk5nswgn7z73cp0wyy"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-megaparsec" ,ghc-megaparsec)
+        ("ghc-base-prelude" ,ghc-base-prelude)))
+    (native-inputs `(("ghc-htf" ,ghc-htf)))
+    (home-page
+      "https://github.com/nikita-volkov/neat-interpolation")
+    (synopsis
+      "Quasiquoter for neat and simple multiline text interpolation")
+    (description
+      "A quasiquoter for producing Text values with support for a simple
+interpolation of input values.  It removes the excessive indentation from the
+input and accurately manages the indentation of all lines of the interpolated
+variables.")
+    (license license:expat)))
+
 (define-public ghc-network
   (package
     (name "ghc-network")
-- 
2.25.0


[-- Attachment #29: 0026-gnu-Add-ghc-open-browser.patch --]
[-- Type: text/x-patch, Size: 1501 bytes --]

From ea8ffb012ca3f35771fabe7dfd9f21a0a78d44b6 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:42 -0800
Subject: [PATCH 26/34] gnu: Add ghc-open-browser.

* gnu/packages/haskell-xyz.scm (ghc-open-browser): New variable.
---
 gnu/packages/haskell-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 31b0578af7..8616b58ec8 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8413,6 +8413,29 @@ old @code{time} library.  For new projects, the newer
 Haskell for attaching typeclass instances.")
     (license license:bsd-3)))
 
+(define-public ghc-open-browser
+  (package
+    (name "ghc-open-browser")
+    (version "0.2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/open-browser/open-browser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0rna8ir2cfp8gk0rd2q60an51jxc08lx4gl0liw8wwqgh1ijxv8b"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/rightfold/open-browser")
+    (synopsis "Open a web browser from Haskell")
+    (description
+      "Open a web browser from Haskell.  Currently BSD, Linux, OS X and Windows
+are supported.")
+    (license license:bsd-3)))
+
 (define-public ghc-opengl
   (package
     (name "ghc-opengl")
-- 
2.25.0


[-- Attachment #30: 0029-gnu-Add-ghc-mintty.patch --]
[-- Type: text/x-patch, Size: 2299 bytes --]

From 816a12bd25101f85d12b52acc4e24a751e64baed Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:02 -0800
Subject: [PATCH 29/34] gnu: Add ghc-mintty.

* gnu/packages/haskell-xyz.scm (ghc-mintty): New variable.
---
 gnu/packages/haskell-xyz.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a86fb5d8cc..2a22f4daaf 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -7589,6 +7589,41 @@ generated lenses are fully compatible with ones generated by lens (and can be
 used both from lens and microlens).")
     (license license:bsd-3)))
 
+(define-public ghc-mintty
+  (package
+    (name "ghc-mintty")
+    (version "0.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mintty/mintty-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1njhz7wjmsk5pbr7gfkl95k50npkmm0iyxp3j93bbsg4rmxzg2kw"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/RyanGlScott/mintty")
+    (synopsis
+      "Reliably detect the presence of a MinTTY console on Windows")
+    (description
+      "MinTTY is a Windows-specific terminal emulator for the widely used
+Cygwin and MSYS projects, which provide Unix-like environments for Windows.
+MinTTY consoles behave differently from native Windows consoles (such as
+cmd.exe or PowerShell) in many ways, and in some cases, these differences make
+it necessary to treat MinTTY consoles differently in code.
+
+The mintty library provides a simple way to detect if your code in running in
+a MinTTY console on Windows.  It exports @code{isMinTTY}, which does the right
+thing 90% of the time (by checking if standard error is attached to MinTTY),
+and it also exports @code{isMinTTYHandle} for the other 10% of the time (when
+you want to check is some arbitrary handle is attached to MinTTY).  As you
+might expect, both of these functions will simply return @code{False} on any
+non-Windows operating system.")
+    (license license:bsd-3)))
+
 (define-public ghc-missingh
   (package
     (name "ghc-missingh")
-- 
2.25.0


[-- Attachment #31: 0031-gnu-Add-ghc-hi-file-parser.patch --]
[-- Type: text/x-patch, Size: 2172 bytes --]

From da1ad6132b428d2e6ca4ac7b2291f6c25095046c Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:51 -0800
Subject: [PATCH 31/34] gnu: Add ghc-hi-file-parser.

* gnu/packages/haskell-xyz.scm (ghc-hi-file-parser): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 6dd0a6affe..499775281d 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -5605,6 +5605,47 @@ feature, allowing applications to subscribe to notifications when a file is
 accessed or modified.")
     (license license:bsd-3)))
 
+(define-public ghc-hi-file-parser
+  (package
+    (name "ghc-hi-file-parser")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/hi-file-parser/hi-file-parser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "09gs26z0jvkkhb1r43gj27pq0k5fc4i6fpr59g397vz4sm86gb2l"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-hspec-discover" ,ghc-hspec-discover)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-vector" ,ghc-vector)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1bm98h0v4wf9vmdng15c2r48yz06118jxlprsnk0z3jw0d95ij9z")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Parser for GHC's hi files")
+    (description
+     "Provide data types and functions for parsing the binary .hi files produced by
+GHC.  Intended to support multiple versions of GHC, so that tooling can:
+
+@itemize
+@item Support multiple versions of GHC
+@item Avoid linking against the ghc library
+@item Not need to use ghc's textual dump file format.
+@end itemize
+
+Note that this code was written for Stack's usage initially, though it is
+intended to be general purpose.")
+    (license license:bsd-3)))
+
 (define-public ghc-hmatrix
   (package
     (name "ghc-hmatrix")
-- 
2.25.0


[-- Attachment #32: 0033-gnu-Add-ghc-cryptonite-conduit.patch --]
[-- Type: text/x-patch, Size: 2250 bytes --]

From bac6335426d44538510661c371d9de9705a1f07a Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:44 -0800
Subject: [PATCH 33/34] gnu: Add ghc-cryptonite-conduit.

* gnu/packages/haskell-xyz.scm (ghc-cryptonite-conduit): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 0f8efee977..508a6933ba 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2651,6 +2651,47 @@ option to turn off macro-expansion.")
       "Generic cryptography public keys algorithm types")
     (license license:bsd-3)))
 
+(define-public ghc-cryptonite-conduit
+  (package
+    (name "ghc-cryptonite-conduit")
+    (version "0.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptonite-conduit/"
+              "cryptonite-conduit-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-resourcet" ,ghc-resourcet)))
+    (native-inputs
+      `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
+        ("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz")))
+    (home-page
+      "https://github.com/haskell-crypto/cryptonite-conduit")
+    (synopsis "Cryptonite conduit")
+    (description
+      "Conduit bridge for cryptonite.
+
+For now only provide a conduit version for hash and hmac, but with
+contribution, this could provide cipher conduits too, and probably other
+things.")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #33: 0034-gnu-Add-stack.patch --]
[-- Type: text/x-patch, Size: 5157 bytes --]

From 194f169cdb48f0776900d1f0d01eac0e7f53da2f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:19:47 -0800
Subject: [PATCH 34/34] gnu: Add stack.

* gnu/packages/haskell-xyz.scm (stack): New variable.
---
 gnu/packages/haskell-apps.scm | 109 ++++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 46cf754ddb..1318a16f50 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -691,6 +691,115 @@ advanced user's otherwise working script to fail under future circumstances.
 @end enumerate")
     (license license:gpl3+)))
 
+(define-public stack
+  (package
+    (name "stack")
+    (version "2.1.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/stack/stack-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1q2nagnc24fvyj3hwnpgyp3rqhxswhscyw4pw2dazqx34ad3d0zr"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-async" ,ghc-async)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-colour" ,ghc-colour)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-echo" ,ghc-echo)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-extra" ,ghc-extra)
+        ("ghc-file-embed" ,ghc-file-embed)
+        ("ghc-filelock" ,ghc-filelock)
+        ("ghc-fsnotify" ,ghc-fsnotify)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-hackage-security" ,ghc-hackage-security)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-hi-file-parser" ,ghc-hi-file-parser)
+        ("ghc-hpack" ,ghc-hpack)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-download" ,ghc-http-download)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-microlens" ,ghc-microlens)
+        ("ghc-mintty" ,ghc-mintty)
+        ("ghc-mono-traversable" ,ghc-mono-traversable)
+        ("ghc-mustache" ,ghc-mustache)
+        ("ghc-neat-interpolation" ,ghc-neat-interpolation)
+        ("ghc-network-uri" ,ghc-network-uri)
+        ("ghc-open-browser" ,ghc-open-browser)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-pantry" ,ghc-pantry)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-persistent" ,ghc-persistent)
+        ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+        ("ghc-persistent-template" ,ghc-persistent-template)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-project-template" ,ghc-project-template)
+        ("ghc-regex-applicative-text" ,ghc-regex-applicative-text)
+        ("ghc-resource-pool" ,ghc-resource-pool)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-retry" ,ghc-retry)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-split" ,ghc-split)
+        ("ghc-streaming-commons" ,ghc-streaming-commons)
+        ("ghc-tar" ,ghc-tar)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-terminal-size" ,ghc-terminal-size)
+        ("ghc-text-metrics" ,ghc-text-metrics)
+        ("ghc-th-reify-many" ,ghc-th-reify-many)
+        ("ghc-tls" ,ghc-tls)
+        ("ghc-typed-process" ,ghc-typed-process)
+        ("ghc-unicode-transforms" ,ghc-unicode-transforms)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-unliftio" ,ghc-unliftio)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-zip-archive" ,ghc-zip-archive)
+        ("ghc-zlib" ,ghc-zlib)
+        ("ghc-githash" ,ghc-githash)
+        ("ghc-optparse-simple" ,ghc-optparse-simple)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-optparse-generic" ,ghc-optparse-generic)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+        ("ghc-smallcheck" ,ghc-smallcheck)))
+    (home-page "http://haskellstack.org")
+    (synopsis "Haskell Tool Stack")
+    (description
+      "Stack is a cross-platform program for developing Haskell projects.  It
+is aimed at Haskellers both new and experienced.
+
+It features:
+
+@itemize
+@item Installing GHC automatically, in an isolated location.
+@item Installing packages needed for your project.
+@item Building your project.
+@item Testing your project.
+@item Benchmarking your project.
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
-- 
2.25.0


[-- Attachment #34: 0030-gnu-Add-ghc-http-download.patch --]
[-- Type: text/x-patch, Size: 2430 bytes --]

From 33d7987975c9412fd1fb20076cbdecf34313c027 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:22 -0800
Subject: [PATCH 30/34] gnu: Add ghc-http-download.

* gnu/packages/haskell-xyz.scm (ghc-http-download): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 2a22f4daaf..6dd0a6affe 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6077,6 +6077,53 @@ query parameters")
 Haskell data types to and from HTTP API data.")
     (license license:bsd-3)))
 
+(define-public ghc-http-download
+  (package
+    (name "ghc-http-download")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/http-download/http-download-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0wip7l6cls734ag306s5l0683qqh273b3lk5ibig66racmysjqyb"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-retry" ,ghc-retry)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-hspec-discover" ,ghc-hspec-discover)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("4"
+         "1s20zjh52whs6hfhr90zyyy7g78zv1pw9hry1nwlzdv4hg97cbdh")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Verified downloads with retries")
+    (description
+     "Higher level HTTP download APIs include verification of content and
+retries.")
+    (license license:bsd-3)))
+
 (define-public ghc-ieee754
   (package
     (name "ghc-ieee754")
-- 
2.25.0


[-- Attachment #35: 0032-gnu-Add-ghc-filelock.patch --]
[-- Type: text/x-patch, Size: 1578 bytes --]

From 98334694e3c5a310e4c4a1b0a421c6bfd36572c8 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:14 -0800
Subject: [PATCH 32/34] gnu: Add ghc-filelock.

* gnu/packages/haskell-xyz.scm (ghc-filelock): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 499775281d..0f8efee977 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -4200,6 +4200,31 @@ the files in a directory, and turn them into @code{(path, bytestring)} pairs
 embedded in your Haskell code.")
     (license license:bsd-3)))
 
+(define-public ghc-filelock
+  (package
+    (name "ghc-filelock")
+    (version "0.1.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/filelock/filelock-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "04qimhz78jjndk686dblkx06l9jscq2q9gyr014a4pbfj4iljgi5"))))
+    (build-system haskell-build-system)
+    (native-inputs `(("ghc-async" ,ghc-async)))
+    (home-page
+      "http://github.com/takano-akio/filelock")
+    (synopsis
+      "Portable interface to file locking (flock / LockFileEx)")
+    (description
+      "This package provides an interface to Windows and Unix file locking
+functionalities.")
+    (license license:public-domain)))
+
 (define-public ghc-filemanip
   (package
     (name "ghc-filemanip")
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-01-27 14:56 [bug#39309] .[PATCH] WIP gnu: add stack John Soo
@ 2020-01-29 15:17 ` John Soo
  2020-02-07 17:32   ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-01-29 15:17 UTC (permalink / raw)
  To: 39309

Fixing the subject line.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-01-29 15:17 ` [bug#39309] [PATCH WIP] " John Soo
@ 2020-02-07 17:32   ` John Soo
  2020-02-10  6:06     ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-02-07 17:32 UTC (permalink / raw)
  To: 39309, Timothy Sample

Hi Tim,

Just wanted to CC you because this issue is hard to find thanks to my
mistaken subject line.

- John

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-07 17:32   ` John Soo
@ 2020-02-10  6:06     ` Timothy Sample
  2020-02-13 13:52       ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-02-10  6:06 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

Hi John,

John Soo <jsoo1@asu.edu> writes:

> Just wanted to CC you because this issue is hard to find thanks to my
> mistaken subject line.

This seems to be due to <https://github.com/haskell/hsc2hs/issues/22>.

Briefly, the “hsc2hs” program bundled with GHC 8.6.5 accepts response
files, but then goes ahead and passes arguments directly to GCC.  Newer
versions of “hsc2hs” use response files for GCC, which solves the
“Argument list too long” problem.

My first suggestion would be to make a separate package for “hsc2hs”
using the version listed on Stackage (which is 0.68.6).  Then, add it as
a native input to the “stack” package and get it to shadow the version
shipped with GHC.

Failing that, we could consider patching our GHC package.  It would be
best to avoid that, though!  :)

(Also, there’s a duplicate “ghc-hspec-discover” in the patch set.  That
is, we already have an “hspec-discover” package.)


-- Tim

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-10  6:06     ` Timothy Sample
@ 2020-02-13 13:52       ` John Soo
  2020-02-13 13:59         ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-02-13 13:52 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

Hi Tim,


> This seems to be due to <https://github.com/haskell/hsc2hs/issues/22>.
>
> Briefly, the “hsc2hs” program bundled with GHC 8.6.5 accepts response
> files, but then goes ahead and passes arguments directly to GCC.  Newer
> versions of “hsc2hs” use response files for GCC, which solves the
> “Argument list too long” problem.
>
> My first suggestion would be to make a separate package for “hsc2hs”
> using the version listed on Stackage (which is 0.68.6).  Then, add it as
> a native input to the “stack” package and get it to shadow the version
> shipped with GHC.

I added hsc2hs@0.68.6 as a native input to stack but I'm not sure how
to make it shadow the ghc package.
Used as a native input hsc2hs does not fix the issue.
I suppose another option would be to use the #:haskell key to use a
locally-patched version.
I am not familiar with ghc internals aside from having built from
source a few times so I can look into that option.

> Failing that, we could consider patching our GHC package.  It would be
> best to avoid that, though!  :)

Agree! I think we should try shadowing hsc2hs first. I might even
suggest bumping lts/ghc versions before we patch our version.


> (Also, there’s a duplicate “ghc-hspec-discover” in the patch set.  That
> is, we already have an “hspec-discover” package.)

Oops! Sorry!
It's definitely the importer. I know I'm not the first to have the problem.
Maybe we should open an issue to fix that?

Thanks!

John

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-13 13:52       ` John Soo
@ 2020-02-13 13:59         ` John Soo
  2020-02-13 17:36           ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-02-13 13:59 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

[-- Attachment #1: Type: text/plain, Size: 110 bytes --]

Hi Tim,

Also here's an updated patch set with the native input for hsc2hs and
no ghc-hspec-discover.

- John

[-- Attachment #2: 0002-gnu-Add-ghc-singletons.patch --]
[-- Type: text/x-patch, Size: 2164 bytes --]

From 2731dcc3d8f1dc1421bfea41ae648622b4def67e Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:49:21 -0800
Subject: [PATCH 02/34] gnu: Add ghc-singletons.

* gnu/packages/haskell-xyz.scm (ghc-singletons): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 897d60ed76..04542afd81 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10641,6 +10641,43 @@ them.")
 are the bottleneck of web servers.")
     (license license:bsd-3)))
 
+(define-public ghc-singletons
+  (package
+    (name "ghc-singletons")
+    (version "2.5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/singletons/singletons-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0izi487dpn5dx5yzm0bqrrjj2fcy6y6jyk81848yq4i8fcx0mc10"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-th-desugar" ,ghc-th-desugar)
+        ("ghc-syb" ,ghc-syb)))
+    (native-inputs
+      `(("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-golden" ,ghc-tasty-golden)))
+    (home-page
+      "https://www.github.com/goldfirere/singletons")
+    (synopsis
+      "Framework for generating singleton types")
+    (description
+      "This library generates singleton types, promoted functions, and
+singleton functions using Template Haskell.  It is useful for programmers who
+wish to use dependently typed programming techniques.  The library was
+originally presented in /Dependently Typed Programming with Singletons/,
+published at the Haskell Symposium,
+2012.  (https://cs.brynmawr.edu/~rae/papers/2012/singletons/paper.pdf) Version
+1.0 and onwards works a lot harder to promote functions.  See the paper
+published at Haskell Symposium, 2014:
+https://cs.brynmawr.edu/~rae/papers/2014/promotion/promotion.pdf.")
+    (license license:bsd-3)))
+
 (define-public ghc-size-based
   (package
     (name "ghc-size-based")
-- 
2.25.0


[-- Attachment #3: 0001-gnu-Add-ghc-th-desugar.patch --]
[-- Type: text/x-patch, Size: 2413 bytes --]

From fd36828ec8dd480cbe4d69b9e2bb126c582b3698 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:48:54 -0800
Subject: [PATCH 01/34] gnu: Add ghc-th-desugar.

* gnu/packages/haskell-xyz.scm (ghc-th-desugar): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 375d672343..897d60ed76 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11757,6 +11757,46 @@ single, easier to use informational datatype while supporting many versions of
 Template Haskell.")
     (license license:isc)))
 
+(define-public ghc-th-desugar
+  (package
+    (name "ghc-th-desugar")
+    (version "1.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-desugar/th-desugar-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1vxg0jvc239ngmv53yx564b7wkgd0b10xvx5phxvnnpm9n2pljpi"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-syb" ,ghc-syb)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-expand-syns" ,ghc-th-expand-syns)))
+    (native-inputs
+      `(("ghc-hunit" ,ghc-hunit)
+        ("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/goldfirere/th-desugar")
+    (synopsis
+      "Functions to desugar Template Haskell")
+    (description
+      "This package provides the Language.Haskell.TH.Desugar module, which
+desugars Template Haskell's rich encoding of Haskell syntax into a simpler
+encoding.  This desugaring discards surface syntax information (such as the
+use of infix operators) but retains the original meaning of the TH code.  The
+intended use of this package is as a preprocessor for more advanced code
+manipulation tools.  Note that the input to any of the @code{ds...} functions
+should be produced from a TH quote, using the syntax @code{[| ... |]}.  If the
+input to these functions is a hand-coded TH syntax tree, the results may be
+unpredictable.  In particular, it is likely that promoted datatypes will not
+work as expected.")
+    (license license:bsd-3)))
+
 (define-public ghc-th-expand-syns
   (package
     (name "ghc-th-expand-syns")
-- 
2.25.0


[-- Attachment #4: 0004-gnu-Add-ghc-th-utilities.patch --]
[-- Type: text/x-patch, Size: 2814 bytes --]

From 9aee103d30a4094ed5f64b17112dd2bc19ab5eaf Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:51:19 -0800
Subject: [PATCH 04/34] gnu: Add ghc-th-utilities.

* gnu/packages/haskell-xyz.scm (ghc-th-utilities): New variable.
---
 gnu/packages/haskell-xyz.scm | 53 ++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 6585e85fe8..2ed5165f7d 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11958,6 +11958,59 @@ and @code{Eq} instances.  These instances used to live in the haskell-src-meta
 package, and that's where the version number started.")
     (license license:bsd-3)))
 
+(define-public ghc-th-utilities
+  (package
+    (name "ghc-th-utilities")
+    (version "0.2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-utilities/th-utilities-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1sy3bgwc85zw999cya92xsp9jllclwbzw9fmjmhqi4r5kj2gyk96"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("hspec-discover" ,hspec-discover)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-th-orphans" ,ghc-th-orphans)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-vector" ,ghc-vector)))
+    (home-page
+      "https://github.com/fpco/th-utilities#readme")
+    (synopsis
+      "Collection of useful functions for use with Template Haskell")
+    (description
+     "The th-utilities package provides a number of useful utilities for
+Template Haskell.  In particular:
+
+@itemize
+
+@item @code{TH.Derive} provides a convenient system for using TH to derive
+typeclass instances.  It allows for open registration of TH derivers, and
+reuses instance syntax for invoking them.  TH.Derive.Storable defines
+derivation of Storable for ADTs.
+
+@item @code{TH.ReifyDataType} provides utilities for reifying simplified
+datatype info.  It omits details that you don't usually want to handle, making
+it much more straightforward to generate code based on datatype structure.
+
+@item @code{TH.RelativePaths} provides utilities for loading files based on
+paths relative to the cabal file.  This is particularly handy for loading code
+into ghci even when its current dir isn't the package dir.  Ideally, this
+module would be used by everyone who currently uses qAddDependentFile.
+
+@item @code{TH.Utilities} provides a miscellaneous set of utilities that are
+useful within this package and elsewhere.
+
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-these
   (package
     (name "ghc-these")
-- 
2.25.0


[-- Attachment #5: 0005-gnu-Add-ghc-rio-orphans.patch --]
[-- Type: text/x-patch, Size: 2101 bytes --]

From fc4e9b05417a2d6257c8a6759266aa0c803de0d2 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:08 -0800
Subject: [PATCH 05/34] gnu: Add ghc-rio-orphans.

* gnu/packages/haskell-xyz.scm (ghc-rio-orphans): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 2ed5165f7d..c65214cfbd 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9943,6 +9943,46 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-orphans
+  (package
+    (name "ghc-rio-orphans")
+    (version "0.1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-orphans/rio-orphans-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0klbshdsv3gq3l7g1d6gq2wxdqjlqxbnwk1lbg5dpbz7yrnjr3by"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-fast-logger" ,ghc-fast-logger)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-monad-logger" ,ghc-monad-logger)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-transformers-base" ,ghc-transformers-base)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/commercialhaskell/rio#readme")
+    (synopsis
+      "Orphan instances for the RIO type in the rio package")
+    (description
+     "Provides orphan instances for the RIO data type.  Currently supports:
+
+@itemize
+@item MonadCatch and MonadMask from exceptions
+@item MonadBase from transformers-base
+@item MonadBaseControl from monad-control
+@item MonadResource from resourcet
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.25.0


[-- Attachment #6: 0003-gnu-Add-ghc-only.patch --]
[-- Type: text/x-patch, Size: 1659 bytes --]

From 9f3457df71769aa8d4eba94bc6d0f5bedc5f8922 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:50:44 -0800
Subject: [PATCH 03/34] gnu: Add ghc-only.

* gnu/packages/haskell-xyz.scm (ghc-only): New variable.
---
 gnu/packages/haskell-xyz.scm | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 04542afd81..6585e85fe8 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8058,6 +8058,34 @@ old @code{time} library.  For new projects, the newer
 @uref{https://hackage.haskell.org/package/time, time library} is recommended.")
     (license license:bsd-3)))
 
+(define-public ghc-only
+  (package
+    (name "ghc-only")
+    (version "0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/Only/Only-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0rdj3a629fk2vp121jq8mf2smkblrz5w3cxhlsyx6my2x29s2ymb"))))
+    (build-system haskell-build-system)
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "1ahk7p34kmh041mz7lyc10nhcxgv2i4z8nvzxvqm2x34gslmsbzr")))
+    (home-page
+      "http://hackage.haskell.org/package/Only")
+    (synopsis
+      "The 1-tuple type or single-value \"collection\"")
+    (description
+      "This package provides a canonical anonymous 1-tuple type missing from
+Haskell for attaching typeclass instances.")
+    (license license:bsd-3)))
+
 (define-public ghc-opengl
   (package
     (name "ghc-opengl")
-- 
2.25.0


[-- Attachment #7: 0006-gnu-Add-ghc-xmlgen.patch --]
[-- Type: text/x-patch, Size: 1729 bytes --]

From dff40eb5e0da8da9039520e1c0ab217f6c24c2a7 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:39 -0800
Subject: [PATCH 06/34] gnu: Add ghc-xmlgen.

* gnu/packages/haskell-xyz.scm (ghc-xmlgen): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index c65214cfbd..51a26a93b8 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13692,6 +13692,39 @@ the @code{conduit} package.")
 documents.")
     (license license:expat)))
 
+(define-public ghc-xmlgen
+  (package
+    (name "ghc-xmlgen")
+    (version "0.6.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/xmlgen/xmlgen-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1milbbr2iqwckqbq6i9sypinvs4hs7mzqn274x350psjfy6ajvwj"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-blaze-builder" ,ghc-blaze-builder)))
+    (native-inputs
+      `(("ghc-hxt" ,ghc-hxt)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:tests? #f ; FIXME failing tests
+       #:cabal-revision
+        ("1"
+         "0vwnqd0lsw81llsn0psga5r6pw7jh69vfbj3rnz7c2fpkc0gjh3j")))
+    (home-page
+      "http://hackage.haskell.org/package/xmlgen")
+    (synopsis "Fast XML generation library")
+    (description
+      "Library for high-performance XML generation.")
+    (license license:bsd-3)))
+
 (define-public ghc-yaml
   (package
     (name "ghc-yaml")
-- 
2.25.0


[-- Attachment #8: 0007-gnu-Add-ghc-cpphs.patch --]
[-- Type: text/x-patch, Size: 2038 bytes --]

From c6fe2f4e419d5133e7b40bd965605575b6e4ad7f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:53:38 -0800
Subject: [PATCH 07/34] gnu: Add ghc-cpphs.

* gnu/packages/haskell-xyz.scm (ghc-cpphs): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 51a26a93b8..da96da2d7e 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2500,6 +2500,39 @@ pure @code{Either} value.  This means that you need not remember which specific
 function performs the conversion you desire.")
     (license license:bsd-3)))
 
+(define-public ghc-cpphs
+  (package
+    (name "ghc-cpphs")
+    (version "1.20.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cpphs/cpphs-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-old-locale" ,ghc-old-locale)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-polyparse" ,ghc-polyparse)))
+    (home-page "https://archives.haskell.org/projects.haskell.org/cpphs/")
+    (synopsis
+      "Liberalised re-implementation of cpp, the C pre-processor")
+    (description
+      "Cpphs is a re-implementation of the C pre-processor that is both more
+compatible with Haskell, and itself written in Haskell so that it can be
+distributed with compilers.
+
+This version of the C pre-processor is pretty-much feature-complete and
+compatible with traditional (K&R) pre-processors.  Additional features
+include: a plain-text mode; an option to unlit literate code files; and an
+option to turn off macro-expansion.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #9: 0010-gnu-Add-ghc-cryptohash-cryptoapi.patch --]
[-- Type: text/x-patch, Size: 1742 bytes --]

From a054107ac0c5a905898fd54c4a5555ce190449fe Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:59 -0800
Subject: [PATCH 10/34] gnu: Add ghc-cryptohash-cryptoapi.

* gnu/packages/haskell-xyz.scm (ghc-cryptohash-cryptoapi): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 345a42330d..888c015567 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2566,6 +2566,33 @@ include: a plain-text mode; an option to unlit literate code files; and an
 option to turn off macro-expansion.")
     (license license:lgpl2.1)))
 
+(define-public ghc-cryptohash-cryptoapi
+  (package
+    (name "ghc-cryptohash-cryptoapi")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptohash-cryptoapi"
+              "/cryptohash-cryptoapi-" version ".tar.gz"))
+        (sha256
+          (base32
+            "13h5f9pmcd0swa4asl7wzpf5lskpgjdqrmy1mqdc78gsxdj8cyki"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-memory" ,ghc-memory)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/vincenthz/hs-cryptohash-cryptoapi")
+    (synopsis "Crypto-api interfaces for cryptohash")
+    (description
+      "Crypto-api interfaces for cryptohash.")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #10: 0009-gnu-Add-ghc-cipher-aes128.patch --]
[-- Type: text/x-patch, Size: 2002 bytes --]

From 355a1900b56e3c6128f4a8f753e8bd617882d743 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:31 -0800
Subject: [PATCH 09/34] gnu: Add ghc-cipher-aes128.

* gnu/packages/haskell-xyz.scm (ghc-cipher-aes128): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 62ac35c87e..345a42330d 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -1838,6 +1838,39 @@ representations for Haskell")
 classy-prelude.")
     (license license:expat)))
 
+(define-public ghc-cipher-aes128
+  (package
+    (name "ghc-cipher-aes128")
+    (version "0.7.0.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cipher-aes128/cipher-aes128-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bafr5aa9mjfzdgc6gwapvb9g04pyh4lwhv2x2m1v3ljjglg9d1w"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/TomMD/cipher-aes128")
+    (synopsis
+      "AES and common modes using AES-NI when available")
+    (description
+      "An implementation of AES and common modes of operation.  It borrows
+Hanquez's C AES code (see cipher-aes) but is unique due to including
+compile-time detection of NI compiler support, a slightly more functional
+interface for GCM operations, exposure of @code{Ptr} based operations via the
+@code{.Internal} module, and build-in crypto-api support.  Cipher-aes128 was
+originally developed as \"cipher-aes plus trampolines\", which has since been
+adopted into cipher-aes.")
+    (license license:bsd-3)))
+
 (define-public ghc-clock
   (package
     (name "ghc-clock")
-- 
2.25.0


[-- Attachment #11: 0008-gnu-Add-ghc-htf.patch --]
[-- Type: text/x-patch, Size: 2827 bytes --]

From 3d10f8ed3722af9a4af8ca1469c9be293fa7d6eb Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:46:31 -0800
Subject: [PATCH 08/34] gnu: Add ghc-htf.

* gnu/packages/haskell-check.scm (ghc-htf): New variable.
---
 gnu/packages/haskell-xyz.scm | 52 ++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index da96da2d7e..62ac35c87e 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -5782,6 +5782,58 @@ for user-defined custom schemas).
 @end itemize")
     (license license:gpl2+)))
 
+(define-public ghc-htf
+  (package
+    (name "ghc-htf")
+    (version "0.13.2.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/HTF/HTF-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1kmf95y4vijdiih27xa35acl02dsxqnd9qa56z1waki5qqiz6nin"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-diff" ,ghc-diff)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-cpphs" ,ghc-cpphs)
+        ("ghc-haskell-src" ,ghc-haskell-src)
+        ("ghc-lifted-base" ,ghc-lifted-base)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-random" ,ghc-random)
+        ("ghc-regex-compat" ,ghc-regex-compat)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-xmlgen" ,ghc-xmlgen)))
+    (native-inputs
+      `(("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (arguments
+     `(#:tests? #f ; Tests use stack, causing cyclical dependencies
+       #:cabal-revision
+        ("1"
+         "0l18mp06jjwpjbnvj548naas1xhnc46c8l0pbgzi3bm6siq5hhv6")))
+    (home-page "https://github.com/skogsbaer/HTF/")
+    (synopsis "Haskell Test Framework")
+    (description
+      "The Haskell Test Framework (HTF for short) lets you define unit tests
+with hunit, QuickCheck properties , and black box tests in an easy and
+convenient way.  HTF uses a custom preprocessor that collects test definitions
+automatically.  Furthermore, the preprocessor allows HTF to report failing
+test cases with exact file name and line number information.  Additionally,
+HTF tries to produce highly readable output for failing tests: for example, it
+colors and pretty prints expected and actual results and provides a diff
+between the two values.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-http-api-data
   (package
     (name "ghc-http-api-data")
-- 
2.25.0


[-- Attachment #12: 0011-gnu-Add-ghc-drbg.patch --]
[-- Type: text/x-patch, Size: 2168 bytes --]

From 21d5037eba1bd1ee4578390ea0017bb920252eef Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:15:31 -0800
Subject: [PATCH 11/34] gnu: Add ghc-drbg.

* gnu/packages/haskell-xyz.scm (ghc-drbg): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 888c015567..5c46d62fa7 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -3323,6 +3323,47 @@ It is modeled after doctest for Python, see
 between double precision floating point and text.")
     (license license:bsd-3)))
 
+(define-public ghc-drbg
+  (package
+    (name "ghc-drbg")
+    (version "0.5.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/DRBG/DRBG-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1z9vqc1nw0mf2sqgddcipmlkz6mckq9wnrzqqdy3rj3c90135pr1"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-cereal" ,ghc-cereal)
+        ("ghc-prettyclass" ,ghc-prettyclass)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-cryptohash-cryptoapi" ,ghc-cryptohash-cryptoapi)
+        ("ghc-parallel" ,ghc-parallel)
+        ("ghc-cipher-aes128" ,ghc-cipher-aes128)
+        ("ghc-entropy" ,ghc-entropy)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+    (arguments
+     ;; FIXME Failing tests
+     `(#:tests? #f))
+    (home-page
+      "http://hackage.haskell.org/package/DRBG")
+    (synopsis "Cryptographically secure RNGs")
+    (description
+      "Deterministic random bit generator (aka RNG, PRNG) based HMACs, Hashes,
+and Ciphers.")
+    (license license:bsd-3)))
+
 (define-public ghc-dual-tree
   (package
     (name "ghc-dual-tree")
-- 
2.25.0


[-- Attachment #13: 0012-gnu-Add-ghc-rsa.patch --]
[-- Type: text/x-patch, Size: 2096 bytes --]

From 8fa0bac119039346205b891e22db220dd2bf3970 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:55:04 -0800
Subject: [PATCH 12/34] gnu: Add ghc-rsa.

* gnu/packages/haskell-xyz.scm (ghc-rsa): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 5c46d62fa7..f792ab201b 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10169,6 +10169,43 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rsa
+  (package
+    (name "ghc-rsa")
+    (version "2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/RSA/RSA-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "06k7nd7b1rdfb7891gw9bihrd9ripffbgqa14q1ryyj6vqa9r4jw"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-sha" ,ghc-sha)))
+    (native-inputs
+      `(("ghc-drbg" ,ghc-drbg)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+    (home-page
+      "http://hackage.haskell.org/package/RSA")
+    (synopsis
+      "Implementation of RSA")
+    (description
+      "This library implements the RSA encryption and signature algorithms for
+arbitrarily-sized ByteStrings.  While the implementations work, they are not
+necessarily the fastest ones on the planet.  Particularly key generation.  The
+algorithms included are based of RFC 3447, or the Public-Key Cryptography
+Standard for RSA, version 2.1 (a.k.a, PKCS#1 v2.1).")
+    (license license:bsd-3)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.25.0


[-- Attachment #14: 0014-gnu-Add-ghc-cabal-doctest.patch --]
[-- Type: text/x-patch, Size: 2026 bytes --]

From b1e90b241d1e43201166bf08d1111b258b817ece Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:45:30 -0800
Subject: [PATCH 14/34] gnu: Add ghc-cabal-doctest.

* gnu/packages/haskell-check.scm (ghc-cabal-doctest): New variable.
---
 gnu/packages/haskell-check.scm | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 7942f2019a..98b7617520 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -944,7 +944,7 @@ To get started quickly, see the examples:
     (description
      "To properly work, the @code{doctest} package needs plenty of
 configuration.  This library provides the common bits for writing custom
-@file{Setup.hs} files.")
+@code{Setup.hs} files.")
     (license license:bsd-3)))
 
 (define-public ghc-testing-type-modifiers
@@ -996,3 +996,29 @@ values (similar to @code{toEnum} but for any algebraic data type).  This
 can be used for SmallCheck-style systematic testing, QuickCheck-style
 random testing, and hybrids of the two.")
     (license license:bsd-3)))
+
+(define-public ghc-cabal-doctest
+  (package
+    (name "ghc-cabal-doctest")
+    (version "1.0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cabal-doctest/cabal-doctest-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "03if74imlhhk7m56nci5f1wclniwqdmwl4hl177040j1gnlac9i0"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/phadej/cabal-doctest")
+    (synopsis
+      "Setup.hs helper for doctests running")
+    (description
+      "Currently (beginning of 2017), there isn't cabal doctest command. Yet,
+to properly work doctest needs plenty of configuration.  This library provides
+the common bits for writing custom Setup.hs.")
+    (license license:bsd-3)))
+
-- 
2.25.0


[-- Attachment #15: 0015-gnu-Add-ghc-lens-aeson.patch --]
[-- Type: text/x-patch, Size: 2068 bytes --]

From 64a8861065e0a59f3ed48d5e57922f451b621b2e Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:05 -0800
Subject: [PATCH 15/34] gnu: Add ghc-lens-aeson.

* gnu/packages/haskell-xyz.scm (ghc-lens-aeson): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 2ff6df66ae..54efa8b4dd 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6669,6 +6669,43 @@ of getters, folds, isomorphisms, traversals, setters and lenses and their
 indexed variants.")
     (license license:bsd-3)))
 
+(define-public ghc-lens-aeson
+  (package
+    (name "ghc-lens-aeson")
+    (version "1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/lens-aeson/lens-aeson-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1k028ycmhz7mnjlrap88fqix4nmmpyy6b88m16kv77d3r8sz04a3"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-lens" ,ghc-lens)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-scientific" ,ghc-scientific)))
+    (native-inputs
+      `(("ghc-doctest" ,ghc-doctest)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-simple-reflect" ,ghc-simple-reflect)
+        ("ghc-cabal-doctest" ,ghc-cabal-doctest)))
+    (arguments
+      `(#:cabal-revision
+        ("6"
+         "1pg5v8fnlqw1krgi3d2a03a0zkjjdv5yp5f5z6q4mlb5jldz99a8")))
+    (home-page "https://github.com/lens/lens-aeson/")
+    (synopsis "Law-abiding lenses for aeson")
+    (description "Law-abiding lenses for aeson.")
+    (license license:expat)))
+
 (define-public ghc-libffi
   (package
     (name "ghc-libffi")
-- 
2.25.0


[-- Attachment #16: 0013-gnu-Add-ghc-crypto-pubkey-types.patch --]
[-- Type: text/x-patch, Size: 1633 bytes --]

From 3d6f9f3fb1cb71e4f23061d01d5caeb20a583c97 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:56:10 -0800
Subject: [PATCH 13/34] gnu: Add ghc-crypto-pubkey-types.

* gnu/packages/haskell-xyz.scm (ghc-crypto-pubkey-types): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index f792ab201b..2ff6df66ae 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2593,6 +2593,31 @@ option to turn off macro-expansion.")
       "Crypto-api interfaces for cryptohash.")
     (license license:bsd-3)))
 
+(define-public ghc-crypto-pubkey-types
+  (package
+    (name "ghc-crypto-pubkey-types")
+    (version "0.4.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/crypto-pubkey-types/"
+               "crypto-pubkey-types-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0q0wlzjmpx536h1zcdzrpxjkvqw8abj8z0ci38138kpch4igbnby"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-asn1-types" ,ghc-asn1-types)
+        ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
+    (home-page
+      "https://github.com/vincenthz/hs-crypto-pubkey-types")
+    (synopsis
+      "Generic cryptography Public keys algorithm types")
+    (description
+      "Generic cryptography public keys algorithm types")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #17: 0016-gnu-ghc-authenticate-oauth.patch --]
[-- Type: text/x-patch, Size: 1978 bytes --]

From 3446b60ab8b238ce1bde8859a5c2dbdc86e8cc30 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:36 -0800
Subject: [PATCH 16/34] gnu: ghc-authenticate-oauth.

* gnu/packages/haskell-xyz.scm (ghc-authenticate-oauth): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 54efa8b4dd..041bd8d0d4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -644,6 +644,39 @@ complicated text/binary file formats.")
 from aeson.")
     (license license:bsd-3)))
 
+(define-public ghc-authenticate-oauth
+  (package
+    (name "ghc-authenticate-oauth")
+    (version "1.6.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/authenticate-oauth"
+               "/authenticate-oauth-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1hry1zbi7gbyfi94w9cyg6m7ii7xm68jnsph63zxdj2s4ns0ylp0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-http-client" ,ghc-http-client)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-rsa" ,ghc-rsa)
+        ("ghc-data-default" ,ghc-data-default)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-sha" ,ghc-sha)
+        ("ghc-random" ,ghc-random)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-blaze-builder" ,ghc-blaze-builder)
+        ("ghc-transformers-compat" ,ghc-transformers-compat)))
+    (home-page
+      "https://github.com/yesodweb/authenticate")
+    (synopsis
+      "Authenticate with OAuth for Haskell web applications")
+    (description
+     "A library to authenticate with OAuth for Haskell web applications.")
+    (license license:bsd-3)))
+
 (define-public ghc-auto-update
   (package
     (name "ghc-auto-update")
-- 
2.25.0


[-- Attachment #18: 0017-gnu-Add-ghc-wreq.patch --]
[-- Type: text/x-patch, Size: 3842 bytes --]

From 313edf764e66d0608bbfc72319a71bd9e73b5f43 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:02:18 -0800
Subject: [PATCH 17/34] gnu: Add ghc-wreq.

* gnu/packages/haskell-xyz.scm (ghc-wreq): New variable.
---
 gnu/packages/haskell-xyz.scm | 84 ++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 041bd8d0d4..84427e7661 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13867,6 +13867,90 @@ modernized interface.")
     (description "Word8 library to be used with @code{Data.ByteString}.")
     (license license:bsd-3)))
 
+(define-public ghc-wreq
+  (package
+    (name "ghc-wreq")
+    (version "0.5.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/wreq/wreq-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "16xls71aby6jqc1frhwnlfvz1iwj1ms0rw9xzif02sn84470gn36"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-psqueues" ,ghc-psqueues)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-authenticate-oauth" ,ghc-authenticate-oauth)
+        ("ghc-base16-bytestring" ,ghc-base16-bytestring)
+        ("ghc-case-insensitive" ,ghc-case-insensitive)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-lens-aeson" ,ghc-lens-aeson)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mime-types" ,ghc-mime-types)
+        ("ghc-time-locale-compat" ,ghc-time-locale-compat)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (native-inputs
+      `(("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-network-info" ,ghc-network-info)
+        ("ghc-snap-core" ,ghc-snap-core)
+        ("ghc-snap-server" ,ghc-snap-server)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-uuid" ,ghc-uuid)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-doctest" ,ghc-doctest)
+        ("ghc-cabal-doctest" ,ghc-cabal-doctest)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("1"
+         "0gz674sb266hv6si9l79c3bv7n2nbssl1262c24in79sk27887gb")))
+    (home-page "https://www.serpentine.com/wreq")
+    (synopsis "Easy-to-use HTTP client library")
+    (description
+      "A web client library that is designed for ease of use.
+
+Tutorial: http://www.serpentine.com/wreq/tutorial.html
+
+Features include:
+@itemize
+@item Simple but powerful `lens`-based API .
+
+@item A solid test suite, and built on reliable libraries like http-client and
+lens.
+
+@item Session handling includes connection keep-alive and pooling, and cookie
+persistence.
+
+@item Automatic response body decompression.
+@item Powerful multipart form and file upload handling.
+
+@item Support for JSON requests and responses, including navigation of
+schema-less responses.
+
+@item Basic and OAuth2 bearer authentication.
+@item Early TLS support via the tls package
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-x11
   (package
     (name "ghc-x11")
-- 
2.25.0


[-- Attachment #19: 0018-gnu-Add-ghc-optparse-generic.patch --]
[-- Type: text/x-patch, Size: 2087 bytes --]

From 6a24f98bf99962ad6bb2964845a8b93d486df527 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:05:32 -0800
Subject: [PATCH 18/34] gnu: Add ghc-optparse-generic.

* gnu/packages/haskell-xyz.scm (ghc-optparse-generic): New variable.
---
 gnu/packages/haskell-xyz.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 84427e7661..703875836b 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8513,6 +8513,42 @@ easily work with command-line options.")
 easily work with command-line options.")
     (license license:expat)))
 
+(define-public ghc-optparse-generic
+  (package
+    (name "ghc-optparse-generic")
+    (version "1.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-generic/optparse-generic-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "13rr3hq26dpmbami8vb6d1ig9ywk6jia22sp5dkp6jkfc1c9k4l0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-system-filepath" ,ghc-system-filepath)
+        ("ghc-only" ,ghc-only)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-void" ,ghc-void)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-singletons" ,ghc-singletons)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-th-desugar" ,ghc-th-desugar)))
+    (arguments
+      `(#:cabal-revision
+        ("3"
+         "0vszcjmxywblx5z9yvrz8c6yc104jgr1nv0sbv58ansd3rkjlzfn")))
+    (home-page
+      "http://hackage.haskell.org/package/optparse-generic")
+    (synopsis
+      "Auto-generate a command-line parser for your datatype")
+    (description
+      "This library auto-generates an optparse-applicative-compatible
+@code{Parser} from any data type that derives the @code{Generic} interface.")
+    (license license:bsd-3)))
 
 (define-public ghc-optparse-applicative
   (package
-- 
2.25.0


[-- Attachment #20: 0019-gnu-Add-ghc-optparse-simple.patch --]
[-- Type: text/x-patch, Size: 1685 bytes --]

From 48def99a5600b05195116593e9596773921c8c79 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:19 -0800
Subject: [PATCH 19/34] gnu: Add ghc-optparse-simple.

* gnu/packages/haskell-xyz.scm (ghc-optparse-simple): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 703875836b..f9f78084b3 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8686,6 +8686,33 @@ with several features not present in pretty-printing libraries designed for
 code.  It was designed for use in @code{Pandoc}.")
     (license license:bsd-3)))
 
+(define-public ghc-optparse-simple
+  (package
+    (name "ghc-optparse-simple")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-simple/optparse-simple-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1r00hkri42vyx552l8hcd1779fxiyl9w4k0pql915zsprirn8w82"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-githash" ,ghc-githash)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-semigroups" ,ghc-semigroups)))
+    (home-page
+      "https://github.com/fpco/optparse-simple#readme")
+    (synopsis
+      "Simple interface to optparse-applicative")
+    (description
+     "Simple interface to optparse-applicative.")
+    (license license:bsd-3)))
+
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-- 
2.25.0


[-- Attachment #21: 0020-gnu-Add-ghc-githash.patch --]
[-- Type: text/x-patch, Size: 2507 bytes --]

From 1f9a11e1a0ab2f571494e61ebd853fe24c031d69 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:57 -0800
Subject: [PATCH 20/34] gnu: Add ghc-githash.

* gnu/packages/haskell-xyz.scm (ghc-githash): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index f9f78084b3..81ea2e47a6 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -63,6 +63,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -4653,6 +4654,52 @@ properties for functions operating on them.")
 interfaces with ease.")
     (license license:bsd-3)))
 
+(define-public ghc-githash
+  (package
+    (name "ghc-githash")
+    (version "0.1.3.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/githash/githash-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "19xhs2nzm1myyjx3nkc3invy15c19cfx790vbcrl050n9sb330jr"))))
+    (build-system haskell-build-system)
+    (native-inputs
+      `(("git" ,git)
+        ("ghc-hspec" ,ghc-hspec)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unliftio" ,ghc-unliftio)))
+    (home-page
+      "https://github.com/snoyberg/githash#readme")
+    (synopsis
+      "Compile git revision info into Haskell projects")
+    (description
+     "Some handy Template Haskell splices for including the current git hash and
+branch in the code of your project.  Useful for including in panic messages,
+--version output, or diagnostic info for more informative bug reports.
+
+Most of the complication in the GitHash module is due to the various places
+the current git hash might be stored:
+
+@itemize
+
+@item Detached HEAD: the hash is in .git/HEAD
+
+@item On a branch or tag: the hash is in a file pointed to by .git/HEAD in a
+location like .git/refs/heads
+
+@item On a branch or tag but in a repository with packed refs: the hash is in
+.git/packed-refs
+
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-gitrev
   (package
     (name "ghc-gitrev")
-- 
2.25.0


[-- Attachment #22: 0021-gnu-Add-ghc-rio-prettyprint.patch --]
[-- Type: text/x-patch, Size: 1800 bytes --]

From decd280b6acb602d3131c1c56064a6a1a143e041 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:07:43 -0800
Subject: [PATCH 21/34] gnu: Add ghc-rio-prettyprint.

* gnu/packages/haskell-xyz.scm (ghc-rio-prettyprint): New variable.
---
 gnu/packages/haskell-xyz.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 81ea2e47a6..bf820bddbf 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10374,6 +10374,38 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-prettyprint
+  (package
+    (name "ghc-rio-prettyprint")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-prettyprint/rio-prettyprint-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0n8ldc73i0954c6s8jh0hibxrisp84yh5pcxv3x3q0wg4v2xvr0m"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-colour" ,ghc-colour)
+        ("ghc-path" ,ghc-path)
+        ("ghc-rio" ,ghc-rio)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1hvhjqy7kfk7fglx1rw8axscy0dfzqwd1564awnwdhvmf8silkkn")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Pretty-printing for RIO")
+    (description "Pretty-printing for RIO.")
+    (license license:bsd-3)))
+
 (define-public ghc-rsa
   (package
     (name "ghc-rsa")
-- 
2.25.0


[-- Attachment #23: 0022-gnu-Add-ghc-regex-applicative-text.patch --]
[-- Type: text/x-patch, Size: 1725 bytes --]

From 26b1993886f552a6c5e56496c79f8e2bb908a1a3 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:08:10 -0800
Subject: [PATCH 22/34] gnu: Add ghc-regex-applicative-text.

* gnu/packages/haskell-xyz.scm (ghc-regex-applicative-text): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index bf820bddbf..e0f3275df5 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9956,6 +9956,33 @@ copious examples.")
 regular expressions.  Parsers can be built using Applicative interface.")
     (license license:expat)))
 
+(define-public ghc-regex-applicative-text
+  (package
+    (name "ghc-regex-applicative-text")
+    (version "0.1.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/regex-applicative-text"
+              "/regex-applicative-text-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1ng2qhk4mvpzl8fx91ig7ldv09v9aqdsvn6yl9yjapc6h0ghb4xh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-regex-applicative" ,ghc-regex-applicative)))
+    (arguments
+      `(#:cabal-revision
+        ("4"
+         "0ykzppl1v6k70idjl73m4w161f6lsax89v1gp100y4xgipf3yijj")))
+    (home-page
+      "https://github.com/phadej/regex-applicative-text#readme")
+    (synopsis "Regex-applicative on text")
+    (description
+      "Wrapped regex-applicative primitives to work with Text.")
+    (license license:bsd-3)))
+
 (define-public ghc-regex-base
   (package
     (name "ghc-regex-base")
-- 
2.25.0


[-- Attachment #24: 0023-gnu-Add-ghc-project-template.patch --]
[-- Type: text/x-patch, Size: 1953 bytes --]

From 266b7ffc7cab53b9666b5c86cd3d937bd4590b78 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:08:48 -0800
Subject: [PATCH 23/34] gnu: Add ghc-project-template.

* gnu/packages/haskell-xyz.scm (ghc-project-template): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index e0f3275df5..15f850f77c 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9595,6 +9595,39 @@ API.")
     (description "This library provides profunctors for Haskell.")
     (license license:bsd-3)))
 
+(define-public ghc-project-template
+  (package
+    (name "ghc-project-template")
+    (version "0.2.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/project-template/project-template-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1p69ww4rhah2qxragl615wl4a6mk4x9w09am8knmz3s4lxpljlpb"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-resourcet" ,ghc-resourcet)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "0lq3sqnq0nr0gbvgzp0lqdl3j3mqdmdlf8xsw0j3pjh581xj3k0a")))
+    (home-page "https://github.com/fpco/haskell-ide")
+    (synopsis "Specify Haskell project templates and generate files")
+    (description "Specify Haskell project templates and generate files.")
+    (license license:bsd-3)))
+
 (define-public ghc-protolude
   (package
     (name "ghc-protolude")
-- 
2.25.0


[-- Attachment #25: 0024-gnu-Add-ghc-pantry.patch --]
[-- Type: text/x-patch, Size: 4877 bytes --]

From 54cda3b433c61530f666e04d966b714ced1f43fa Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:18 -0800
Subject: [PATCH 24/34] gnu: Add ghc-pantry.

* gnu/packages/haskell-xyz.scm (ghc-pantry): New variable.
---
 gnu/packages/haskell-xyz.scm | 107 +++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 15f850f77c..fcf2adf03b 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8927,6 +8927,113 @@ pandoc to represent structured documents.  It also provides functions for
 building up, manipulating and serialising @code{Pandoc} structures.")
     (license license:bsd-3)))
 
+(define-public ghc-pantry
+  (package
+    (name "ghc-pantry")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/pantry/pantry-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1m1sps9kc7y8zpba486lv5z8an3z8493zxb1qhghql6pybsprsgi"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-base-orphans" ,ghc-base-orphans)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-contravariant" ,ghc-contravariant)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-digest" ,ghc-digest)
+        ("ghc-filelock" ,ghc-filelock)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-hackage-security" ,ghc-hackage-security)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-hpack" ,ghc-hpack)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-download" ,ghc-http-download)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mono-traversable" ,ghc-mono-traversable)
+        ("ghc-network" ,ghc-network)
+        ("ghc-network-uri" ,ghc-network-uri)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-persistent" ,ghc-persistent)
+        ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+        ("ghc-persistent-template" ,ghc-persistent-template)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-orphans" ,ghc-rio-orphans)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+        ("ghc-safe" ,ghc-safe)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-tar-conduit" ,ghc-tar-conduit)
+        ("ghc-text-metrics" ,ghc-text-metrics)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-lift-instances" ,ghc-th-lift-instances)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-reify-many" ,ghc-th-reify-many)
+        ("ghc-th-utilities" ,ghc-th-utilities)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-unliftio" ,ghc-unliftio)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-zip-archive" ,ghc-zip-archive)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hedgehog" ,ghc-hedgehog)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)))
+    (arguments
+     `(; Tests do network IO
+       #:tests? #f))
+    (home-page
+      "https://github.com/commercialhaskell/pantry#readme")
+    (synopsis
+      "Content addressable Haskell package management")
+    (description
+     "Content addressable Haskell package management, providing for secure,
+reproducible acquisition of Haskell package contents and metadata.
+
+What is Pantry
+
+@itemize
+
+@item A Haskell library, command line executable, storage specification, and
+network protocol
+
+@item Intended for content-addressable storage of Haskell packages
+@item Allows non-centralized package storage
+@item Primarily for use by Stackage and Stack, hopefully other tools as well
+@end itemize
+
+Goals
+
+@itemize
+@item Efficient, distributed package storage for Haskell
+@item Superset of existing storage mechanisms
+@item Security via content addressable storage
+@item Allow more Stackage-style snapshots to exist
+@item Allow authors to bypass Hackage for uploads
+@item Allow Stackage to create forks of packages on Hackage
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-parallel
   (package
     (name "ghc-parallel")
-- 
2.25.0


[-- Attachment #26: 0025-gnu-Add-ghc-open-browser.patch --]
[-- Type: text/x-patch, Size: 1501 bytes --]

From a77833f2360e3c6895584f003a185ae05039b3cc Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:42 -0800
Subject: [PATCH 25/34] gnu: Add ghc-open-browser.

* gnu/packages/haskell-xyz.scm (ghc-open-browser): New variable.
---
 gnu/packages/haskell-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index fcf2adf03b..8d8cafccd3 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8414,6 +8414,29 @@ old @code{time} library.  For new projects, the newer
 Haskell for attaching typeclass instances.")
     (license license:bsd-3)))
 
+(define-public ghc-open-browser
+  (package
+    (name "ghc-open-browser")
+    (version "0.2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/open-browser/open-browser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0rna8ir2cfp8gk0rd2q60an51jxc08lx4gl0liw8wwqgh1ijxv8b"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/rightfold/open-browser")
+    (synopsis "Open a web browser from Haskell")
+    (description
+      "Open a web browser from Haskell.  Currently BSD, Linux, OS X and Windows
+are supported.")
+    (license license:bsd-3)))
+
 (define-public ghc-opengl
   (package
     (name "ghc-opengl")
-- 
2.25.0


[-- Attachment #27: 0026-gnu-Add-ghc-neat-interpolation.patch --]
[-- Type: text/x-patch, Size: 1867 bytes --]

From 54bc158701f0705a851a5d096a03949017a35f83 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:09 -0800
Subject: [PATCH 26/34] gnu: Add ghc-neat-interpolation.

* gnu/packages/haskell-xyz.scm (ghc-neat-interpolation): New variable.
---
 gnu/packages/haskell-xyz.scm | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 8d8cafccd3..c38d1ff60e 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8115,6 +8115,35 @@ with pseudo-graphical interfaces.  This package is a nice, modern binding to GNU
 ncurses.")
     (license license:gpl3)))
 
+(define-public ghc-neat-interpolation
+  (package
+    (name "ghc-neat-interpolation")
+    (version "0.3.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/neat-interpolation"
+              "/neat-interpolation-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0lhpjckwhzlvx4cdhrwprwb85vc7hc44ybvk5nswgn7z73cp0wyy"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-megaparsec" ,ghc-megaparsec)
+        ("ghc-base-prelude" ,ghc-base-prelude)))
+    (native-inputs `(("ghc-htf" ,ghc-htf)))
+    (home-page
+      "https://github.com/nikita-volkov/neat-interpolation")
+    (synopsis
+      "Quasiquoter for neat and simple multiline text interpolation")
+    (description
+      "A quasiquoter for producing Text values with support for a simple
+interpolation of input values.  It removes the excessive indentation from the
+input and accurately manages the indentation of all lines of the interpolated
+variables.")
+    (license license:expat)))
+
 (define-public ghc-network
   (package
     (name "ghc-network")
-- 
2.25.0


[-- Attachment #28: 0027-gnu-Add-ghc-mustache.patch --]
[-- Type: text/x-patch, Size: 2310 bytes --]

From 4063ea3551379290c13c391ffa3a526bee64dea2 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:38 -0800
Subject: [PATCH 27/34] gnu: Add ghc-mustache.

* gnu/packages/haskell-xyz.scm (ghc-mustache): New variable.
---
 gnu/packages/haskell-xyz.scm | 46 ++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index c38d1ff60e..ce45a91779 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8008,6 +8008,52 @@ implementation is pure Haskell, so it might be a bit slower than a C FFI
 binding.")
     (license license:bsd-3)))
 
+(define-public ghc-mustache
+  (package
+    (name "ghc-mustache")
+    (version "2.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mustache/mustache-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1q3vadcvv2pxg6rpp92jq5zy784jxphdfpf6xn9y6wg9g3jn7201"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-either" ,ghc-either)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-scientific" ,ghc-scientific)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-cmdargs" ,ghc-cmdargs)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-base-unicode-symbols" ,ghc-base-unicode-symbols)
+        ("ghc-wreq" ,ghc-wreq)
+        ("ghc-zlib" ,ghc-zlib)
+        ("ghc-tar" ,ghc-tar)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-temporary" ,ghc-temporary)))
+    (arguments
+     ;; Tests do network IO
+     `(#:tests? #f))
+    (home-page
+      "https://github.com/JustusAdam/mustache")
+    (synopsis "Mustache template parser library")
+    (description
+      "Allows parsing and rendering template files with mustache markup.  See
+the mustache language reference http://mustache.github.io/mustache.5.html.
+
+Implements the mustache spec version 1.1.3.")
+    (license license:bsd-3)))
+
 (define-public ghc-mwc-random
   (package
     (name "ghc-mwc-random")
-- 
2.25.0


[-- Attachment #29: 0028-gnu-Add-ghc-mintty.patch --]
[-- Type: text/x-patch, Size: 2299 bytes --]

From 3b0e6a04e99c44adbe67b4a6903abd700c371f0c Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:02 -0800
Subject: [PATCH 28/34] gnu: Add ghc-mintty.

* gnu/packages/haskell-xyz.scm (ghc-mintty): New variable.
---
 gnu/packages/haskell-xyz.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index ce45a91779..3341be3485 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -7590,6 +7590,41 @@ generated lenses are fully compatible with ones generated by lens (and can be
 used both from lens and microlens).")
     (license license:bsd-3)))
 
+(define-public ghc-mintty
+  (package
+    (name "ghc-mintty")
+    (version "0.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mintty/mintty-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1njhz7wjmsk5pbr7gfkl95k50npkmm0iyxp3j93bbsg4rmxzg2kw"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/RyanGlScott/mintty")
+    (synopsis
+      "Reliably detect the presence of a MinTTY console on Windows")
+    (description
+      "MinTTY is a Windows-specific terminal emulator for the widely used
+Cygwin and MSYS projects, which provide Unix-like environments for Windows.
+MinTTY consoles behave differently from native Windows consoles (such as
+cmd.exe or PowerShell) in many ways, and in some cases, these differences make
+it necessary to treat MinTTY consoles differently in code.
+
+The mintty library provides a simple way to detect if your code in running in
+a MinTTY console on Windows.  It exports @code{isMinTTY}, which does the right
+thing 90% of the time (by checking if standard error is attached to MinTTY),
+and it also exports @code{isMinTTYHandle} for the other 10% of the time (when
+you want to check is some arbitrary handle is attached to MinTTY).  As you
+might expect, both of these functions will simply return @code{False} on any
+non-Windows operating system.")
+    (license license:bsd-3)))
+
 (define-public ghc-missingh
   (package
     (name "ghc-missingh")
-- 
2.25.0


[-- Attachment #30: 0029-gnu-Add-ghc-http-download.patch --]
[-- Type: text/x-patch, Size: 2422 bytes --]

From c94ae2d3524e226c82843bdf1cbee6cfb0302814 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:22 -0800
Subject: [PATCH 29/34] gnu: Add ghc-http-download.

* gnu/packages/haskell-xyz.scm (ghc-http-download): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 3341be3485..5ddecb0df6 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6078,6 +6078,53 @@ query parameters")
 Haskell data types to and from HTTP API data.")
     (license license:bsd-3)))
 
+(define-public ghc-http-download
+  (package
+    (name "ghc-http-download")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/http-download/http-download-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0wip7l6cls734ag306s5l0683qqh273b3lk5ibig66racmysjqyb"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-retry" ,ghc-retry)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("hspec-discover" ,hspec-discover)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("4"
+         "1s20zjh52whs6hfhr90zyyy7g78zv1pw9hry1nwlzdv4hg97cbdh")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Verified downloads with retries")
+    (description
+     "Higher level HTTP download APIs include verification of content and
+retries.")
+    (license license:bsd-3)))
+
 (define-public ghc-ieee754
   (package
     (name "ghc-ieee754")
-- 
2.25.0


[-- Attachment #31: 0030-gnu-Add-ghc-hi-file-parser.patch --]
[-- Type: text/x-patch, Size: 2164 bytes --]

From b80cb4ad22da156cb1c2d901f9ae4fd41213c8ff Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:51 -0800
Subject: [PATCH 30/34] gnu: Add ghc-hi-file-parser.

* gnu/packages/haskell-xyz.scm (ghc-hi-file-parser): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 5ddecb0df6..83bfd93ac4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -5606,6 +5606,47 @@ feature, allowing applications to subscribe to notifications when a file is
 accessed or modified.")
     (license license:bsd-3)))
 
+(define-public ghc-hi-file-parser
+  (package
+    (name "ghc-hi-file-parser")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/hi-file-parser/hi-file-parser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "09gs26z0jvkkhb1r43gj27pq0k5fc4i6fpr59g397vz4sm86gb2l"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("hspec-discover" ,hspec-discover)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-vector" ,ghc-vector)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1bm98h0v4wf9vmdng15c2r48yz06118jxlprsnk0z3jw0d95ij9z")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Parser for GHC's hi files")
+    (description
+     "Provide data types and functions for parsing the binary .hi files produced by
+GHC.  Intended to support multiple versions of GHC, so that tooling can:
+
+@itemize
+@item Support multiple versions of GHC
+@item Avoid linking against the ghc library
+@item Not need to use ghc's textual dump file format.
+@end itemize
+
+Note that this code was written for Stack's usage initially, though it is
+intended to be general purpose.")
+    (license license:bsd-3)))
+
 (define-public ghc-hmatrix
   (package
     (name "ghc-hmatrix")
-- 
2.25.0


[-- Attachment #32: 0031-gnu-Add-ghc-filelock.patch --]
[-- Type: text/x-patch, Size: 1578 bytes --]

From 321b48d938376b180b82b6c2be0ba4dc58f2818b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:14 -0800
Subject: [PATCH 31/34] gnu: Add ghc-filelock.

* gnu/packages/haskell-xyz.scm (ghc-filelock): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 83bfd93ac4..ad87c7dd43 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -4201,6 +4201,31 @@ the files in a directory, and turn them into @code{(path, bytestring)} pairs
 embedded in your Haskell code.")
     (license license:bsd-3)))
 
+(define-public ghc-filelock
+  (package
+    (name "ghc-filelock")
+    (version "0.1.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/filelock/filelock-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "04qimhz78jjndk686dblkx06l9jscq2q9gyr014a4pbfj4iljgi5"))))
+    (build-system haskell-build-system)
+    (native-inputs `(("ghc-async" ,ghc-async)))
+    (home-page
+      "http://github.com/takano-akio/filelock")
+    (synopsis
+      "Portable interface to file locking (flock / LockFileEx)")
+    (description
+      "This package provides an interface to Windows and Unix file locking
+functionalities.")
+    (license license:public-domain)))
+
 (define-public ghc-filemanip
   (package
     (name "ghc-filemanip")
-- 
2.25.0


[-- Attachment #33: 0032-gnu-Add-ghc-cryptonite-conduit.patch --]
[-- Type: text/x-patch, Size: 2250 bytes --]

From f971215408284fb25c9ef884fdf5f859c88cb028 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:44 -0800
Subject: [PATCH 32/34] gnu: Add ghc-cryptonite-conduit.

* gnu/packages/haskell-xyz.scm (ghc-cryptonite-conduit): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index ad87c7dd43..bada021a36 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2652,6 +2652,47 @@ option to turn off macro-expansion.")
       "Generic cryptography public keys algorithm types")
     (license license:bsd-3)))
 
+(define-public ghc-cryptonite-conduit
+  (package
+    (name "ghc-cryptonite-conduit")
+    (version "0.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptonite-conduit/"
+              "cryptonite-conduit-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-resourcet" ,ghc-resourcet)))
+    (native-inputs
+      `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
+        ("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz")))
+    (home-page
+      "https://github.com/haskell-crypto/cryptonite-conduit")
+    (synopsis "Cryptonite conduit")
+    (description
+      "Conduit bridge for cryptonite.
+
+For now only provide a conduit version for hash and hmac, but with
+contribution, this could provide cipher conduits too, and probably other
+things.")
+    (license license:bsd-3)))
+
 (define-public ghc-data-accessor
   (package
     (name "ghc-data-accessor")
-- 
2.25.0


[-- Attachment #34: 0033-gnu-Add-ghc-hsc2hs.patch --]
[-- Type: text/x-patch, Size: 1962 bytes --]

From c74dd8def30b5dcd7dea7cb85bdec545946e231a Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Wed, 12 Feb 2020 08:58:55 -0800
Subject: [PATCH 33/34] gnu: Add ghc-hsc2hs.

* gnu/packages/haskell-xyz.scm (ghc-hsc2hs): New variable.
---
 gnu/packages/haskell-xyz.scm | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index bada021a36..8d69df1da9 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -5935,6 +5935,37 @@ that interconverts between various bibliography formats using a common
 MODS-format XML intermediate.")
     (license license:gpl2+)))
 
+(define-public ghc-hsc2hs
+  (package
+    (name "ghc-hsc2hs")
+    (version "0.68.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/hsc2hs/hsc2hs-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1clj6bgs9vmiv3mjzp82lvyyik5zr5411nxab7hydbrgq94pbk70"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     `(("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-hspec" ,ghc-tasty-hspec)))
+    (home-page
+     "http://hackage.haskell.org/package/hsc2hs")
+    (synopsis
+     "Preprocessor that helps with writing Haskell bindings to C code.")
+    (description
+     "The hsc2hs program can be used to automate some parts of the process of
+writing Haskell bindings to C code.  It reads an almost-Haskell source file
+with embedded special constructs, and outputs a real Haskell file with these
+constructs processed, based on information taken from some C headers.  The
+extra constructs provide Haskell counterparts of C types, values of C
+constants, including sizes of C types, and access to fields of C structs.")
+    (license license:bsd-3)))
+
 (define-public ghc-hslogger
   (package
     (name "ghc-hslogger")
-- 
2.25.0


[-- Attachment #35: 0034-gnu-Add-stack.patch --]
[-- Type: text/x-patch, Size: 5101 bytes --]

From c2a41472136a6f184399122b3d7032b3e9b959a8 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:19:47 -0800
Subject: [PATCH 34/34] gnu: Add stack.

* gnu/packages/haskell-xyz.scm (stack): New variable.
---
 gnu/packages/haskell-apps.scm | 110 ++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 0a4a4f62cd..2188cf5849 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -691,6 +691,116 @@ advanced user's otherwise working script to fail under future circumstances.
 @end enumerate")
     (license license:gpl3+)))
 
+(define-public stack
+  (package
+    (name "stack")
+    (version "2.1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/stack/stack-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1q2nagnc24fvyj3hwnpgyp3rqhxswhscyw4pw2dazqx34ad3d0zr"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-aeson" ,ghc-aeson)
+       ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+       ("ghc-async" ,ghc-async)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+       ("ghc-colour" ,ghc-colour)
+       ("ghc-conduit" ,ghc-conduit)
+       ("ghc-conduit-extra" ,ghc-conduit-extra)
+       ("ghc-cryptonite" ,ghc-cryptonite)
+       ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+       ("ghc-echo" ,ghc-echo)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-extra" ,ghc-extra)
+       ("ghc-file-embed" ,ghc-file-embed)
+       ("ghc-filelock" ,ghc-filelock)
+       ("ghc-fsnotify" ,ghc-fsnotify)
+       ("ghc-generic-deriving" ,ghc-generic-deriving)
+       ("ghc-hackage-security" ,ghc-hackage-security)
+       ("ghc-hashable" ,ghc-hashable)
+       ("ghc-hi-file-parser" ,ghc-hi-file-parser)
+       ("ghc-hpack" ,ghc-hpack)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-http-conduit" ,ghc-http-conduit)
+       ("ghc-http-download" ,ghc-http-download)
+       ("ghc-http-types" ,ghc-http-types)
+       ("ghc-memory" ,ghc-memory)
+       ("ghc-microlens" ,ghc-microlens)
+       ("ghc-mintty" ,ghc-mintty)
+       ("ghc-mono-traversable" ,ghc-mono-traversable)
+       ("ghc-mustache" ,ghc-mustache)
+       ("ghc-neat-interpolation" ,ghc-neat-interpolation)
+       ("ghc-network-uri" ,ghc-network-uri)
+       ("ghc-open-browser" ,ghc-open-browser)
+       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+       ("ghc-pantry" ,ghc-pantry)
+       ("ghc-path" ,ghc-path)
+       ("ghc-path-io" ,ghc-path-io)
+       ("ghc-persistent" ,ghc-persistent)
+       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+       ("ghc-persistent-template" ,ghc-persistent-template)
+       ("ghc-primitive" ,ghc-primitive)
+       ("ghc-project-template" ,ghc-project-template)
+       ("ghc-regex-applicative-text" ,ghc-regex-applicative-text)
+       ("ghc-resource-pool" ,ghc-resource-pool)
+       ("ghc-resourcet" ,ghc-resourcet)
+       ("ghc-retry" ,ghc-retry)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+       ("ghc-semigroups" ,ghc-semigroups)
+       ("ghc-split" ,ghc-split)
+       ("ghc-streaming-commons" ,ghc-streaming-commons)
+       ("ghc-tar" ,ghc-tar)
+       ("ghc-temporary" ,ghc-temporary)
+       ("ghc-terminal-size" ,ghc-terminal-size)
+       ("ghc-text-metrics" ,ghc-text-metrics)
+       ("ghc-th-reify-many" ,ghc-th-reify-many)
+       ("ghc-tls" ,ghc-tls)
+       ("ghc-typed-process" ,ghc-typed-process)
+       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
+       ("ghc-unix-compat" ,ghc-unix-compat)
+       ("ghc-unliftio" ,ghc-unliftio)
+       ("ghc-unordered-containers" ,ghc-unordered-containers)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-yaml" ,ghc-yaml)
+       ("ghc-zip-archive" ,ghc-zip-archive)
+       ("ghc-zlib" ,ghc-zlib)
+       ("ghc-githash" ,ghc-githash)
+       ("ghc-optparse-simple" ,ghc-optparse-simple)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-optparse-generic" ,ghc-optparse-generic)))
+    (native-inputs
+     `(("ghc-hsc2hs" ,ghc-hsc2hs)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+       ("ghc-smallcheck" ,ghc-smallcheck)))
+    (home-page "http://haskellstack.org")
+    (synopsis "Haskell Tool Stack")
+    (description
+     "Stack is a cross-platform program for developing Haskell projects.  It
+is aimed at Haskellers both new and experienced.
+
+It features:
+
+@itemize
+@item Installing GHC automatically, in an isolated location.
+@item Installing packages needed for your project.
+@item Building your project.
+@item Testing your project.
+@item Benchmarking your project.
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-13 13:59         ` John Soo
@ 2020-02-13 17:36           ` John Soo
  2020-02-13 22:59             ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-02-13 17:36 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

[-- Attachment #1: Type: text/plain, Size: 75 bytes --]

I tried using this patch and it still fails. Could I be missing something?

[-- Attachment #2: 0034-gnu-Add-stack.patch --]
[-- Type: text/x-patch, Size: 6192 bytes --]

From 200b3387c5466bc2cd96772400f5244fe9b78907 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:19:47 -0800
Subject: [PATCH] gnu: Add stack.

* gnu/packages/haskell-xyz.scm (stack): New variable.
---
 gnu/packages/haskell-apps.scm | 129 ++++++++++++++++++++++++++++++++++
 1 file changed, 129 insertions(+)

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 0a4a4f62cd..cbe7de3b0f 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -35,6 +35,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system haskell)
+  #:use-module (guix utils)
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages gl)
@@ -691,6 +692,134 @@ advanced user's otherwise working script to fail under future circumstances.
 @end enumerate")
     (license license:gpl3+)))
 
+(define-public stack
+  (package
+    (name "stack")
+    (version "2.1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/stack/stack-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1q2nagnc24fvyj3hwnpgyp3rqhxswhscyw4pw2dazqx34ad3d0zr"))))
+    (build-system haskell-build-system)
+    (arguments
+     ;; Substitute ghc's bundled version of hsc2hs to a version that uses
+     ;; response files.
+     ;; See https://github.com/haskell/hsc2hs/issues/22
+     `(#:haskell
+       ,(package
+          (inherit ghc-8.6)
+          (native-inputs
+           (cons `("ghc-hsc2hs" ,(package-source ghc-hsc2hs))
+                 (package-native-inputs ghc-8.6)))
+           (arguments
+            (substitute-keyword-arguments (package-arguments ghc-8.6)
+              ((#:phases ghc-8.6-phases)
+               `(modify-phases ,ghc-8.6-phases
+                  (add-after 'unpack 'de-vendor-hsc2hs
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (invoke
+                       "tar" "-xvf" (assoc-ref inputs "ghc-hsc2hs")
+                       "-C" "utils/hsc2hs" "--overwrite"))))))))))
+    (inputs
+     `(("ghc-aeson" ,ghc-aeson)
+       ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+       ("ghc-async" ,ghc-async)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+       ("ghc-colour" ,ghc-colour)
+       ("ghc-conduit" ,ghc-conduit)
+       ("ghc-conduit-extra" ,ghc-conduit-extra)
+       ("ghc-cryptonite" ,ghc-cryptonite)
+       ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+       ("ghc-echo" ,ghc-echo)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-extra" ,ghc-extra)
+       ("ghc-file-embed" ,ghc-file-embed)
+       ("ghc-filelock" ,ghc-filelock)
+       ("ghc-fsnotify" ,ghc-fsnotify)
+       ("ghc-generic-deriving" ,ghc-generic-deriving)
+       ("ghc-hackage-security" ,ghc-hackage-security)
+       ("ghc-hashable" ,ghc-hashable)
+       ("ghc-hi-file-parser" ,ghc-hi-file-parser)
+       ("ghc-hpack" ,ghc-hpack)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-http-conduit" ,ghc-http-conduit)
+       ("ghc-http-download" ,ghc-http-download)
+       ("ghc-http-types" ,ghc-http-types)
+       ("ghc-memory" ,ghc-memory)
+       ("ghc-microlens" ,ghc-microlens)
+       ("ghc-mintty" ,ghc-mintty)
+       ("ghc-mono-traversable" ,ghc-mono-traversable)
+       ("ghc-mustache" ,ghc-mustache)
+       ("ghc-neat-interpolation" ,ghc-neat-interpolation)
+       ("ghc-network-uri" ,ghc-network-uri)
+       ("ghc-open-browser" ,ghc-open-browser)
+       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+       ("ghc-pantry" ,ghc-pantry)
+       ("ghc-path" ,ghc-path)
+       ("ghc-path-io" ,ghc-path-io)
+       ("ghc-persistent" ,ghc-persistent)
+       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+       ("ghc-persistent-template" ,ghc-persistent-template)
+       ("ghc-primitive" ,ghc-primitive)
+       ("ghc-project-template" ,ghc-project-template)
+       ("ghc-regex-applicative-text" ,ghc-regex-applicative-text)
+       ("ghc-resource-pool" ,ghc-resource-pool)
+       ("ghc-resourcet" ,ghc-resourcet)
+       ("ghc-retry" ,ghc-retry)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+       ("ghc-semigroups" ,ghc-semigroups)
+       ("ghc-split" ,ghc-split)
+       ("ghc-streaming-commons" ,ghc-streaming-commons)
+       ("ghc-tar" ,ghc-tar)
+       ("ghc-temporary" ,ghc-temporary)
+       ("ghc-terminal-size" ,ghc-terminal-size)
+       ("ghc-text-metrics" ,ghc-text-metrics)
+       ("ghc-th-reify-many" ,ghc-th-reify-many)
+       ("ghc-tls" ,ghc-tls)
+       ("ghc-typed-process" ,ghc-typed-process)
+       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
+       ("ghc-unix-compat" ,ghc-unix-compat)
+       ("ghc-unliftio" ,ghc-unliftio)
+       ("ghc-unordered-containers" ,ghc-unordered-containers)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-yaml" ,ghc-yaml)
+       ("ghc-zip-archive" ,ghc-zip-archive)
+       ("ghc-zlib" ,ghc-zlib)
+       ("ghc-githash" ,ghc-githash)
+       ("ghc-optparse-simple" ,ghc-optparse-simple)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-optparse-generic" ,ghc-optparse-generic)))
+    (native-inputs
+     `(("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+       ("ghc-smallcheck" ,ghc-smallcheck)))
+    (home-page "http://haskellstack.org")
+    (synopsis "Haskell Tool Stack")
+    (description
+     "Stack is a cross-platform program for developing Haskell projects.  It
+is aimed at Haskellers both new and experienced.
+
+It features:
+
+@itemize
+@item Installing GHC automatically, in an isolated location.
+@item Installing packages needed for your project.
+@item Building your project.
+@item Testing your project.
+@item Benchmarking your project.
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-13 17:36           ` John Soo
@ 2020-02-13 22:59             ` Timothy Sample
  2020-02-16  1:56               ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-02-13 22:59 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

Hi John,

John Soo <jsoo1@asu.edu> writes:

> I tried using this patch and it still fails. Could I be missing
> something?

I’m not sure, but I got the shadowing to work.  In fact, you don’t need
shadowing at all.  You can just pass “--with-hsc2hs=/gnu/store/...” as a
configure flag:

    (arguments
     `(#:configure-flags
       (let ((hsc2hs (assoc-ref %build-inputs "ghc-hsc2hs")))
         (list (string-append "--with-hsc2hs=" hsc2hs "/bin/hsc2hs")))))

Unfortunately, it doesn’t help.  Looking at the source code, “hsc2hs”
*is* calling GCC with a response file.  AIUI, GCC is supposed to
continue to use response files for all of its subprograms.  Hence,
everything should work.  I’m stumped.  :/

I’ll take another look with a fresh mind sometime, and see if I can make
any progress.


-- Tim

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-13 22:59             ` Timothy Sample
@ 2020-02-16  1:56               ` Timothy Sample
  2020-02-19 14:56                 ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-02-16  1:56 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

Hello again,

Timothy Sample <samplet@ngyro.com> writes:

> [...]
>
> I’ll take another look with a fresh mind sometime, and see if I can make
> any progress.

I don’t have a solution, but I have a bit more info.  Cabal generates
extremely long argument lists for GCC.  For whatever reason, it repeats
the same flags many times (maybe once for each Haskell dependency).
When building Stack, it passes Gawk as an include path 164 times.  In
fact, there are only a handful of distinct include paths, each passed
164 times.  The linker flags are similar but much worse.

This should be fine since everything is using a response file, right?
Nope.  Like the bug you linked discusses, GCC writes all of its
arguments into an environment variable, the length of which is limited
by “MAX_ARG_STRLEN” (which is 128K).  It would be nice to fix GCC here,
and it’s almost a very small fix, but there is minor complication.  The
normal response file handling in GCC expects “argc” and “argv”
parameters, but the environment variable doesn’t come with an “argc”.
Rather, it has to be parsed (in the same way the shell would do it).
It’s still doable, but a it would be a larger change.  Not to mention
that patching GCC is even less fun than patching GHC.

There was some work to deduplicate the flags that Cabal generates:
<https://github.com/haskell/cabal/pull/5356/>.  This would actually fix
the build, but the call to “hsc2hs” doesn’t do the same deduplication
(see “ppHsc2hs” in “Cabal/Distribution/Simple/PreProcess.hs”).

At this point, it might be worth joining the Nix folks on that issue,
and suggesting a patch to Cabal to call “hsc2hs” with deduplicated
flags.  It will help that the other deduplication code was written by
the same person who filed the bug you linked to earlier.  Once the patch
lands, we can apply it to our Cabal and then Stack will build.  Yay!


-- Tim

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-16  1:56               ` Timothy Sample
@ 2020-02-19 14:56                 ` John Soo
  2020-02-20  4:55                   ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-02-19 14:56 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

Hi Tim,

> At this point, it might be worth joining the Nix folks on that issue,
> and suggesting a patch to Cabal to call “hsc2hs” with deduplicated
> flags.  It will help that the other deduplication code was written by
> the same person who filed the bug you linked to earlier.  Once the patch
> lands, we can apply it to our Cabal and then Stack will build.  Yay!

Sorry I'm a bit confused by all this. I guess if we can rely on a
patch into cabal that would be the least effort, right?
Is there already a patch to deduplicate flags passed to hsc2hs?  Do we
need to comment anywhere or express support?

- John

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-19 14:56                 ` John Soo
@ 2020-02-20  4:55                   ` Timothy Sample
  2020-02-22 15:34                     ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-02-20  4:55 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

Hi John,

John Soo <jsoo1@asu.edu> writes:

>> At this point, it might be worth joining the Nix folks on that issue,
>> and suggesting a patch to Cabal to call “hsc2hs” with deduplicated
>> flags.  It will help that the other deduplication code was written by
>> the same person who filed the bug you linked to earlier.  Once the patch
>> lands, we can apply it to our Cabal and then Stack will build.  Yay!
>
> Sorry I'm a bit confused by all this. I guess if we can rely on a
> patch into cabal that would be the least effort, right?

Exactly.  Also, sorry if I’m being a little unclear.  I’ve been kind of
thinking out loud with these messages, as you’ll see below.  ;)

> Is there already a patch to deduplicate flags passed to hsc2hs?  Do we
> need to comment anywhere or express support?

I couldn’t find a patch.  Expressing support was definitely what I was
suggesting.  I managed to find a note saying what I just said:

    https://github.com/NixOS/nixpkgs/issues/49206#issuecomment-470324743

I don’t think anything has become of it since then, though.

There is one other thing we could do, but I’m still thinking it through.
The reason we hit the limit is because of the way we use the
“extra-lib-dirs” and “extra-include-dirs” flags when configuring.  Every
time we pass Cabal a list of directories via these flags, Cabal notes
the directories in the package DB, and uses them when calling GCC.  It
doesn’t just use the directories specified when configuring a given
package.  It uses all the directories specified for all of that
package’s dependencies, too.

Right now, we pass in every “lib” and “include” directory from every
input, including the “standard-packages” from the GNU build system.
This means that Gawk’s “lib” directory (for example) is included every
time we configure any package.  In turn, when GHC calls GCC as part of
compiling a Haskell package, Gawk gets included on the command line once
for every node on that package’s dependency tree.  Packages with a large
dependency tree hit the 128K limit imposed by the kernel Linux.

What’s funny is that not a single Haskell package even uses shared
libraries from Gawk!

The other thing that’s funny is that most Haskell packages build just
fine without “extra-lib-dirs” and “extra-include-dirs”.  Even those that
call out to C code work, because Guix sets “LIBRARY_PATH” for us.
Unfortunately, packages that depend on packages that call out to C code
fail.  This is because Guix doesn’t set “LIBRARY_PATH” for the
transitive input, but GHC still wants to make use of the shared library.
This can be solved by adding back the “extra-lib-dirs” and
“extra-include-dirs” flags as-needed.

With this approach, I was able to compile Stack (the tests failed,
though).

The part that I’m still thinking through is how to make this whole
system work.  I would really like something that works automatically,
but I don’t see a way to do it.  This means we would have to add the
flags manually to the handful of packages that need them.  The part that
I really don’t like is that we don’t know a package needs the flags
until a package that depends on it fails to build.  Having everything
one step removed like that is not ideal.  On the other hand, there are
probably less than a dozen Haskell packages that need flags – it’s not
that common to mix Haskell and C code.  I will make a patch that does
this and see what the damages are.

This feels like a step in the right direction, because we end up with a
cleaner package graph as a result.  The added work and delayed feedback
will be tricky, but it should only come up infrequently.  What do you
think?


-- Tim

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-20  4:55                   ` Timothy Sample
@ 2020-02-22 15:34                     ` Timothy Sample
  2020-03-11  9:17                       ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-02-22 15:34 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

[-- Attachment #1: Type: text/plain, Size: 858 bytes --]

Hello again,

Timothy Sample <samplet@ngyro.com> writes:

> On the other hand, there are probably less than a dozen Haskell
> packages that need flags [...].

Turns out there are thirteen!

> I will make a patch that does this and see what the damages are.

I’ve attached the patch.  The name of the keyword is not great, so
suggestions there are welcome.  I managed to build all of our Haskell
packages (except for some usual suspects that fail for other reasons).
It’s not so bad, but it’s a bit of a hack.

I’m now wondering why Guix’s treatment of “LIBRARY_PATH” is not just
solving this outright without the need for those flags.  Before I
consider pushing the patch, I’m going to answer that question.  Ideally,
Guix could do more of what it’s good at: understanding the complete
package graph.  :)


-- Tim


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-build-system-haskell-Add-extra-directories-keyword.patch --]
[-- Type: text/x-patch, Size: 9115 bytes --]

From 01ff315ee02d033fd5335f4f53405db89fd81c14 Mon Sep 17 00:00:00 2001
From: Timothy Sample <samplet@ngyro.com>
Date: Sat, 22 Feb 2020 09:56:36 -0500
Subject: [PATCH] build-system/haskell: Add 'extra-directories?' keyword.

See <https://bugs.gnu.org/39309>.

* guix/build-system/haskell.scm (haskell-build): Add
'extra-directories?'  keyword and pass it through to the builder.
* guix/build/haskell-build-system.scm (configure): Use it to toggle
passing 'extra-include-dirs' and 'extra-lib-dirs' to Cabal.
* gnu/packages/haskell-xyz.scm (ghc-alsa-core, ghc-hmatrix,
ghc-hmatrix-gsl, ghc-hslua, ghc-iwlib, ghc-libyaml, ghc-ncurses,
ghc-openglraw, ghc-x11, ghc-x11-xft, ghc-zlib): Enable
'extra-directories?'.
gnu/packages/haskell-crypto.scm (ghc-digest, ghc-hsopenssl): Likewise.
---
 gnu/packages/haskell-crypto.scm     |  4 ++++
 gnu/packages/haskell-xyz.scm        | 26 ++++++++++++++++++++++----
 guix/build-system/haskell.scm       |  2 ++
 guix/build/haskell-build-system.scm | 17 +++++++++--------
 4 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 4170ec82f0..637a5d421e 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -343,6 +343,8 @@ generators, and more.")
         (base32
          "04gy2zp8yzvv7j9bdfvmfzcz3sqyqa6rwslqcn4vyair2vmif5v4"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("zlib" ,zlib)))
     (home-page
@@ -790,6 +792,8 @@ extensions.")
         (base32
          "0qivl9clmybfglwxqp2sq308rv4ia4rhwshcsc8b029bvpp0mpsi"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-network" ,ghc-network)
        ("openssl" ,openssl)))
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index e368082c03..9992744245 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -327,6 +327,8 @@ tool lex or flex for C/C++.")
         (base32
          "1avh4a419h9d2zsslg6j8hm87ppgsgqafz8ll037rk2yy1g4jl7b"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
        ("alsa-lib" ,alsa-lib)))
@@ -5352,6 +5354,8 @@ accessed or modified.")
        (sha256
         (base32 "1sqy1aci5zfagkb34mz3xdil7cl96z4b4cx28cha54vc5sx1lhpg"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-random" ,ghc-random)
        ("ghc-split" ,ghc-split)
@@ -5383,6 +5387,8 @@ numerical computations based on BLAS and LAPACK.")
        (sha256
         (base32 "0v6dla426x4ywaq59jm89ql1i42n39iw6z0j378xwb676v9kfxhm"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-hmatrix" ,ghc-hmatrix)
        ("ghc-vector" ,ghc-vector)
@@ -5600,7 +5606,8 @@ handler built in.")
                 "183bgl5jcx5y2r94lviqfw0a5w9089nxjd1z40k8vx9y2h60pm6j"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:configure-flags '("-fsystem-lua")))
+     `(#:configure-flags '("-fsystem-lua")
+       #:extra-directories? #t))
     (inputs
      `(("lua" ,lua)
        ("ghc-exceptions" ,ghc-exceptions)
@@ -6210,6 +6217,8 @@ instances for conversion to and from JSON .ipynb files.")
        (sha256
         (base32 "0khmfwql4vwj55idsxmhjhrbqzfir3g9wm5lmpvnf77mm95cfpdz"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("wireless-tools" ,wireless-tools)))
     (home-page "https://github.com/jaor/iwlib")
@@ -6556,7 +6565,8 @@ compiler versions.")
            #t))))
     (build-system haskell-build-system)
     (arguments
-     `(#:configure-flags `("--flags=system-libyaml")))
+     `(#:configure-flags `("--flags=system-libyaml")
+       #:extra-directories? #t))
     (inputs
      `(("ghc-conduit" ,ghc-conduit)
        ("ghc-resourcet" ,ghc-resourcet)
@@ -7698,7 +7708,8 @@ between 2 and 3 times faster than the Mersenne Twister.")
           "0gsyyaqyh5r9zc0rhwpj5spyd6i4w2vj61h4nihgmmh0yyqvf3z5"))))
     (build-system haskell-build-system)
     (arguments
-     '(#:phases
+     '(#:extra-directories? #t
+       #:phases
        (modify-phases %standard-phases
          (add-before 'build 'fix-includes
            (lambda _
@@ -8036,6 +8047,8 @@ version 1.3).")
         (base32
          "0zgllb4bcash2i2cispa3j565aw3dpxs41ghmhpvyvi4a6xmyldx"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-half" ,ghc-half)
        ("ghc-fixed" ,ghc-fixed)
@@ -13150,6 +13163,8 @@ modernized interface.")
        (sha256
         (base32 "0gg6852mrlgl8zng1j84fismz7k81jr5fk92glgkscf8q6ryg0bm"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("libx11" ,libx11)
        ("libxrandr" ,libxrandr)
@@ -13174,6 +13189,8 @@ bindings are a direct translation of the C bindings.")
                            "X11-xft-" version ".tar.gz"))
        (sha256
         (base32 "1lgqb0s2qfwwgbvwxhjbi23rbwamzdi0l0slfr20c3jpcbp3zfjf"))))
+    (arguments
+     `(#:extra-directories? #t))
     (inputs
      `(("ghc-x11" ,ghc-x11)
        ("ghc-utf8-string" ,ghc-utf8-string)
@@ -13374,7 +13391,8 @@ modifying, and extracting files from zip archives in Haskell.")
          "1l11jraslcrp9d4wnhwfyhwk4fsiq1aq8i6vj81vcq1m2zzi1y7h"))))
     (build-system haskell-build-system)
     (arguments
-     `(#:phases
+     `(#:extra-directories? #t
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'strip-test-framework-constraints
            (lambda _
diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm
index 1ec11c71d8..25f4797d16 100644
--- a/guix/build-system/haskell.scm
+++ b/guix/build-system/haskell.scm
@@ -106,6 +106,7 @@ version REVISION."
                         (tests? #t)
                         (test-target "test")
                         (configure-flags ''())
+                        extra-directories?
                         (phases '(@ (guix build haskell-build-system)
                                     %standard-phases))
                         (outputs '("out"))
@@ -134,6 +135,7 @@ provides a 'Setup.hs' file as its build system."
                                            (derivation->output-path revision))
                                           (revision revision))
                       #:configure-flags ,configure-flags
+                      #:extra-directories? ,extra-directories?
                       #:haddock-flags ,haddock-flags
                       #:system ,system
                       #:test-target ,test-target
diff --git a/guix/build/haskell-build-system.scm b/guix/build/haskell-build-system.scm
index 91f62138d0..f69e16582a 100644
--- a/guix/build/haskell-build-system.scm
+++ b/guix/build/haskell-build-system.scm
@@ -72,8 +72,8 @@ and parameters ~s~%"
           (apply invoke "runhaskell" setup-file command params))
         (error "no Setup.hs nor Setup.lhs found"))))
 
-(define* (configure #:key outputs inputs tests? (configure-flags '())
-                    #:allow-other-keys)
+(define* (configure #:key outputs inputs tests? extra-directories?
+                    (configure-flags '()) #:allow-other-keys)
   "Configure a given Haskell package."
   (let* ((out (assoc-ref outputs "out"))
          (doc (assoc-ref outputs "doc"))
@@ -84,6 +84,10 @@ and parameters ~s~%"
                        (((_ . dir) ...)
                         dir)
                        (_ '())))
+         (include-dirs (map (cut string-append "--extra-include-dirs=" <>)
+                            (search-path-as-list '("include") input-dirs)))
+         (lib-dirs (map (cut string-append "--extra-lib-dirs=" <>)
+                        (search-path-as-list '("lib") input-dirs)))
          (ghc-path (getenv "GHC_PACKAGE_PATH"))
          (params (append `(,(string-append "--prefix=" out))
                          `(,(string-append "--libdir=" (or lib out) "/lib"))
@@ -94,12 +98,9 @@ and parameters ~s~%"
                          '("--libsubdir=$compiler/$pkg-$version")
                          `(,(string-append "--package-db=" %tmp-db-dir))
                          '("--global")
-                         `(,@(map
-                              (cut string-append "--extra-include-dirs=" <>)
-                              (search-path-as-list '("include") input-dirs)))
-                         `(,@(map
-                              (cut string-append "--extra-lib-dirs=" <>)
-                              (search-path-as-list '("lib") input-dirs)))
+                         (if extra-directories?
+                             (append include-dirs lib-dirs)
+                             '())
                          (if tests?
                              '("--enable-tests")
                              '())
-- 
2.25.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-02-22 15:34                     ` Timothy Sample
@ 2020-03-11  9:17                       ` John Soo
  2020-03-11 14:18                         ` Timothy Sample
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-03-11  9:17 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

Hi Tim,

Sorry for my delay.  I think I’m finally starting to understand your patch.


> I’m now wondering why Guix’s treatment of “LIBRARY_PATH” is not just
> solving this outright without the need for those flags.  Before I consider pushing the patch, I’m going to answer that question. 
> Ideally, Guix could do more of what it’s good at: understanding the complete
> package graph.  :)

Yeah it would be nice if it were automatically tracked or if the env vars were respected.

I like the idea of offering more cabal file semantics to package authors. In that regards I have no issues with your patches.  My only thought is we should make the flags lists instead of booleans. Not only would lists match the cabal file specification, but I think having the extra detail would be a nice way to verify against existing cabal files. I can’t imagine just yet how but I could see wanting to be able to specify which paths were being used and their order.

I am not opposed to the names of the fields either, I like that they match the cabal fields.

Thanks again!

John

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-03-11  9:17                       ` John Soo
@ 2020-03-11 14:18                         ` Timothy Sample
  2020-03-13 15:05                           ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: Timothy Sample @ 2020-03-11 14:18 UTC (permalink / raw)
  To: John Soo; +Cc: 39309

Hi John,

John Soo <jsoo1@asu.edu> writes:

> I like the idea of offering more cabal file semantics to package
> authors. In that regards I have no issues with your patches.  My only
> thought is we should make the flags lists instead of booleans. Not
> only would lists match the cabal file specification, but I think
> having the extra detail would be a nice way to verify against existing
> cabal files. I can’t imagine just yet how but I could see wanting to
> be able to specify which paths were being used and their order.

My first attempt did exactly that, but I ran into some problems with it.
IIRC, I had to worry about paths for transitive dependencies, which made
it really hard to get working (and would make it really hard to
maintain).  This patch was take two.  :)  It’s a little less specific
but much easier to work with.

> I am not opposed to the names of the fields either, I like that they
> match the cabal fields.

Good to hear.  Maybe they’re not so bad.

> Thanks again!

I still need to take another look at this, but I’m not sure when I’ll
get the chance.  I’ll try to carve out some time soon.  Thanks again to
you for the patches.  :)


-- Tim

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] [PATCH WIP] gnu: add stack.
  2020-03-11 14:18                         ` Timothy Sample
@ 2020-03-13 15:05                           ` John Soo
  2021-01-01 18:04                             ` [bug#39309] .[PATCH] WIP " John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2020-03-13 15:05 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

Hi Tim,

> Good to hear.  Maybe they’re not so bad.

Seem totally reasonable to me.

Then for the gio package problems with gi-gtk and custom Setup.hs? :D

> I still need to take another look at this, but I’m not sure when I’ll
> get the chance.  I’ll try to carve out some time soon.  Thanks again to
> you for the patches.  :)

Ok no rush. My pleasure :)

- John

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [bug#39309] .[PATCH] WIP gnu: add stack.
  2020-03-13 15:05                           ` John Soo
@ 2021-01-01 18:04                             ` John Soo
  2021-01-01 18:18                               ` John Soo
  0 siblings, 1 reply; 17+ messages in thread
From: John Soo @ 2021-01-01 18:04 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

[-- Attachment #1: Type: text/plain, Size: 99 bytes --]

Hi Tim and Guix!

Stack now builds but some tests fail!

Here are the updated patches :)

- John



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-ghc-th-desugar.patch --]
[-- Type: text/x-patch, Size: 2413 bytes --]

From 9cf8a2c645ba01db01304570146372700dfa563d Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:48:54 -0800
Subject: [PATCH 01/31] gnu: Add ghc-th-desugar.

* gnu/packages/haskell-xyz.scm (ghc-th-desugar): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index d6c50ade71..d9f0cd8351 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13424,6 +13424,46 @@ single, easier to use informational datatype while supporting many versions of
 Template Haskell.")
     (license license:isc)))
 
+(define-public ghc-th-desugar
+  (package
+    (name "ghc-th-desugar")
+    (version "1.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-desugar/th-desugar-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1vxg0jvc239ngmv53yx564b7wkgd0b10xvx5phxvnnpm9n2pljpi"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-syb" ,ghc-syb)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-expand-syns" ,ghc-th-expand-syns)))
+    (native-inputs
+      `(("ghc-hunit" ,ghc-hunit)
+        ("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/goldfirere/th-desugar")
+    (synopsis
+      "Functions to desugar Template Haskell")
+    (description
+      "This package provides the Language.Haskell.TH.Desugar module, which
+desugars Template Haskell's rich encoding of Haskell syntax into a simpler
+encoding.  This desugaring discards surface syntax information (such as the
+use of infix operators) but retains the original meaning of the TH code.  The
+intended use of this package is as a preprocessor for more advanced code
+manipulation tools.  Note that the input to any of the @code{ds...} functions
+should be produced from a TH quote, using the syntax @code{[| ... |]}.  If the
+input to these functions is a hand-coded TH syntax tree, the results may be
+unpredictable.  In particular, it is likely that promoted datatypes will not
+work as expected.")
+    (license license:bsd-3)))
+
 (define-public ghc-th-expand-syns
   (package
     (name "ghc-th-expand-syns")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-Add-ghc-singletons.patch --]
[-- Type: text/x-patch, Size: 2164 bytes --]

From bd405bde2d8d734d9d53804726bb5a6f4fd96a43 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:49:21 -0800
Subject: [PATCH 02/31] gnu: Add ghc-singletons.

* gnu/packages/haskell-xyz.scm (ghc-singletons): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index d9f0cd8351..1bab723d85 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -12170,6 +12170,43 @@ them.")
 are the bottleneck of web servers.")
     (license license:bsd-3)))
 
+(define-public ghc-singletons
+  (package
+    (name "ghc-singletons")
+    (version "2.5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/singletons/singletons-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0izi487dpn5dx5yzm0bqrrjj2fcy6y6jyk81848yq4i8fcx0mc10"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-th-desugar" ,ghc-th-desugar)
+        ("ghc-syb" ,ghc-syb)))
+    (native-inputs
+      `(("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-golden" ,ghc-tasty-golden)))
+    (home-page
+      "https://www.github.com/goldfirere/singletons")
+    (synopsis
+      "Framework for generating singleton types")
+    (description
+      "This library generates singleton types, promoted functions, and
+singleton functions using Template Haskell.  It is useful for programmers who
+wish to use dependently typed programming techniques.  The library was
+originally presented in /Dependently Typed Programming with Singletons/,
+published at the Haskell Symposium,
+2012.  (https://cs.brynmawr.edu/~rae/papers/2012/singletons/paper.pdf) Version
+1.0 and onwards works a lot harder to promote functions.  See the paper
+published at Haskell Symposium, 2014:
+https://cs.brynmawr.edu/~rae/papers/2014/promotion/promotion.pdf.")
+    (license license:bsd-3)))
+
 (define-public ghc-size-based
   (package
     (name "ghc-size-based")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-Add-ghc-th-utilities.patch --]
[-- Type: text/x-patch, Size: 2814 bytes --]

From b312dc9c92fd683d4d7f128fa6abdef75350d66b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:51:19 -0800
Subject: [PATCH 03/31] gnu: Add ghc-th-utilities.

* gnu/packages/haskell-xyz.scm (ghc-th-utilities): New variable.
---
 gnu/packages/haskell-xyz.scm | 53 ++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 1bab723d85..dc8016a443 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -13597,6 +13597,59 @@ and @code{Eq} instances.  These instances used to live in the haskell-src-meta
 package, and that's where the version number started.")
     (license license:bsd-3)))
 
+(define-public ghc-th-utilities
+  (package
+    (name "ghc-th-utilities")
+    (version "0.2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/th-utilities/th-utilities-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1sy3bgwc85zw999cya92xsp9jllclwbzw9fmjmhqi4r5kj2gyk96"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("hspec-discover" ,hspec-discover)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-th-orphans" ,ghc-th-orphans)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-vector" ,ghc-vector)))
+    (home-page
+      "https://github.com/fpco/th-utilities#readme")
+    (synopsis
+      "Collection of useful functions for use with Template Haskell")
+    (description
+     "The th-utilities package provides a number of useful utilities for
+Template Haskell.  In particular:
+
+@itemize
+
+@item @code{TH.Derive} provides a convenient system for using TH to derive
+typeclass instances.  It allows for open registration of TH derivers, and
+reuses instance syntax for invoking them.  TH.Derive.Storable defines
+derivation of Storable for ADTs.
+
+@item @code{TH.ReifyDataType} provides utilities for reifying simplified
+datatype info.  It omits details that you don't usually want to handle, making
+it much more straightforward to generate code based on datatype structure.
+
+@item @code{TH.RelativePaths} provides utilities for loading files based on
+paths relative to the cabal file.  This is particularly handy for loading code
+into ghci even when its current dir isn't the package dir.  Ideally, this
+module would be used by everyone who currently uses qAddDependentFile.
+
+@item @code{TH.Utilities} provides a miscellaneous set of utilities that are
+useful within this package and elsewhere.
+
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-these
   (package
     (name "ghc-these")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-gnu-Add-ghc-rio-orphans.patch --]
[-- Type: text/x-patch, Size: 2103 bytes --]

From 40f18a956e4cf67dc8c45ec0eb078f355e47fe1f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:08 -0800
Subject: [PATCH 04/31] gnu: Add ghc-rio-orphans.

* gnu/packages/haskell-xyz.scm (ghc-rio-orphans): New variable.
---
 gnu/packages/haskell-xyz.scm | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index dc8016a443..b518e39b5b 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11393,6 +11393,46 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-orphans
+  (package
+    (name "ghc-rio-orphans")
+    (version "0.1.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-orphans/rio-orphans-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0klbshdsv3gq3l7g1d6gq2wxdqjlqxbnwk1lbg5dpbz7yrnjr3by"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-fast-logger" ,ghc-fast-logger)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-monad-logger" ,ghc-monad-logger)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-transformers-base" ,ghc-transformers-base)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (home-page
+      "https://github.com/commercialhaskell/rio#readme")
+    (synopsis
+      "Orphan instances for the RIO type in the rio package")
+    (description
+     "Provides orphan instances for the RIO data type.  Currently supports:
+
+@itemize
+@item MonadCatch and MonadMask from exceptions
+@item MonadBase from transformers-base
+@item MonadBaseControl from monad-control
+@item MonadResource from resourcet
+@end itemize")
+    (license license:expat)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: 0005-gnu-Add-ghc-xmlgen.patch --]
[-- Type: text/x-patch, Size: 1741 bytes --]

From 05f77db4b73fa387d8347ef054218e1848152a1b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:52:39 -0800
Subject: [PATCH 05/31] gnu: Add ghc-xmlgen.

* gnu/packages/haskell-xyz.scm (ghc-xmlgen): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index b518e39b5b..a7639cea07 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -15486,6 +15486,39 @@ the @code{conduit} package.")
 documents.")
     (license license:expat)))
 
+(define-public ghc-xmlgen
+  (package
+    (name "ghc-xmlgen")
+    (version "0.6.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/xmlgen/xmlgen-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1milbbr2iqwckqbq6i9sypinvs4hs7mzqn274x350psjfy6ajvwj"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-blaze-builder" ,ghc-blaze-builder)))
+    (native-inputs
+      `(("ghc-hxt" ,ghc-hxt)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:tests? #f ; FIXME failing tests
+       #:cabal-revision
+        ("1"
+         "0vwnqd0lsw81llsn0psga5r6pw7jh69vfbj3rnz7c2fpkc0gjh3j")))
+    (home-page
+      "http://hackage.haskell.org/package/xmlgen")
+    (synopsis "Fast XML generation library")
+    (description
+      "Library for high-performance XML generation.")
+    (license license:bsd-3)))
+
 (define-public ghc-xml-hamlet
   (package
     (name "ghc-xml-hamlet")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-gnu-Add-ghc-cpphs.patch --]
[-- Type: text/x-patch, Size: 2018 bytes --]

From 6570bb97ffd7bd115df9f49285ede990bc3d7421 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:53:38 -0800
Subject: [PATCH 06/31] gnu: Add ghc-cpphs.

* gnu/packages/haskell-xyz.scm (ghc-cpphs): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a7639cea07..f0317323d4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2804,6 +2804,39 @@ pure @code{Either} value.  This means that you need not remember which specific
 function performs the conversion you desire.")
     (license license:bsd-3)))
 
+(define-public ghc-cpphs
+  (package
+    (name "ghc-cpphs")
+    (version "1.20.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cpphs/cpphs-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-old-locale" ,ghc-old-locale)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-polyparse" ,ghc-polyparse)))
+    (home-page "https://archives.haskell.org/projects.haskell.org/cpphs/")
+    (synopsis
+      "Liberalised re-implementation of cpp, the C pre-processor")
+    (description
+      "Cpphs is a re-implementation of the C pre-processor that is both more
+compatible with Haskell, and itself written in Haskell so that it can be
+distributed with compilers.
+
+This version of the C pre-processor is pretty-much feature-complete and
+compatible with traditional (K&R) pre-processors.  Additional features
+include: a plain-text mode; an option to unlit literate code files; and an
+option to turn off macro-expansion.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-csv
   (package
     (name "ghc-csv")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-gnu-Add-ghc-htf.patch --]
[-- Type: text/x-patch, Size: 2827 bytes --]

From c8be7b9cc1cb2f7adaf3c6da247c775b0acce703 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:46:31 -0800
Subject: [PATCH 07/31] gnu: Add ghc-htf.

* gnu/packages/haskell-check.scm (ghc-htf): New variable.
---
 gnu/packages/haskell-xyz.scm | 52 ++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index f0317323d4..a6a5524ff2 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6367,6 +6367,58 @@ for user-defined custom schemas).
 @end itemize")
     (license license:gpl2+)))
 
+(define-public ghc-htf
+  (package
+    (name "ghc-htf")
+    (version "0.13.2.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/HTF/HTF-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1kmf95y4vijdiih27xa35acl02dsxqnd9qa56z1waki5qqiz6nin"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-diff" ,ghc-diff)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-cpphs" ,ghc-cpphs)
+        ("ghc-haskell-src" ,ghc-haskell-src)
+        ("ghc-lifted-base" ,ghc-lifted-base)
+        ("ghc-monad-control" ,ghc-monad-control)
+        ("ghc-old-time" ,ghc-old-time)
+        ("ghc-random" ,ghc-random)
+        ("ghc-regex-compat" ,ghc-regex-compat)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-xmlgen" ,ghc-xmlgen)))
+    (native-inputs
+      `(("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (arguments
+     `(#:tests? #f ; Tests use stack, causing cyclical dependencies
+       #:cabal-revision
+        ("1"
+         "0l18mp06jjwpjbnvj548naas1xhnc46c8l0pbgzi3bm6siq5hhv6")))
+    (home-page "https://github.com/skogsbaer/HTF/")
+    (synopsis "Haskell Test Framework")
+    (description
+      "The Haskell Test Framework (HTF for short) lets you define unit tests
+with hunit, QuickCheck properties , and black box tests in an easy and
+convenient way.  HTF uses a custom preprocessor that collects test definitions
+automatically.  Furthermore, the preprocessor allows HTF to report failing
+test cases with exact file name and line number information.  Additionally,
+HTF tries to produce highly readable output for failing tests: for example, it
+colors and pretty prints expected and actual results and provides a diff
+between the two values.")
+    (license license:lgpl2.1)))
+
 (define-public ghc-http-api-data
   (package
     (name "ghc-http-api-data")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-gnu-Add-ghc-cipher-aes128.patch --]
[-- Type: text/x-patch, Size: 2002 bytes --]

From 3460852fbca524af2ccabec0ebdfc3a0047e6699 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:31 -0800
Subject: [PATCH 08/31] gnu: Add ghc-cipher-aes128.

* gnu/packages/haskell-xyz.scm (ghc-cipher-aes128): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a6a5524ff2..991fba0684 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2110,6 +2110,39 @@ representations for Haskell")
 classy-prelude.")
     (license license:expat)))
 
+(define-public ghc-cipher-aes128
+  (package
+    (name "ghc-cipher-aes128")
+    (version "0.7.0.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/cipher-aes128/cipher-aes128-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1bafr5aa9mjfzdgc6gwapvb9g04pyh4lwhv2x2m1v3ljjglg9d1w"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/TomMD/cipher-aes128")
+    (synopsis
+      "AES and common modes using AES-NI when available")
+    (description
+      "An implementation of AES and common modes of operation.  It borrows
+Hanquez's C AES code (see cipher-aes) but is unique due to including
+compile-time detection of NI compiler support, a slightly more functional
+interface for GCM operations, exposure of @code{Ptr} based operations via the
+@code{.Internal} module, and build-in crypto-api support.  Cipher-aes128 was
+originally developed as \"cipher-aes plus trampolines\", which has since been
+adopted into cipher-aes.")
+    (license license:bsd-3)))
+
 (define-public ghc-clock
   (package
     (name "ghc-clock")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-gnu-Add-ghc-cryptohash-cryptoapi.patch --]
[-- Type: text/x-patch, Size: 1722 bytes --]

From cbaadadb21389f07dad58062223c9967a7fc5f51 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:14:59 -0800
Subject: [PATCH 09/31] gnu: Add ghc-cryptohash-cryptoapi.

* gnu/packages/haskell-xyz.scm (ghc-cryptohash-cryptoapi): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 991fba0684..9df70fa613 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2870,6 +2870,33 @@ include: a plain-text mode; an option to unlit literate code files; and an
 option to turn off macro-expansion.")
     (license license:lgpl2.1)))
 
+(define-public ghc-cryptohash-cryptoapi
+  (package
+    (name "ghc-cryptohash-cryptoapi")
+    (version "0.1.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptohash-cryptoapi"
+              "/cryptohash-cryptoapi-" version ".tar.gz"))
+        (sha256
+          (base32
+            "13h5f9pmcd0swa4asl7wzpf5lskpgjdqrmy1mqdc78gsxdj8cyki"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-memory" ,ghc-memory)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-cereal" ,ghc-cereal)))
+    (home-page
+      "https://github.com/vincenthz/hs-cryptohash-cryptoapi")
+    (synopsis "Crypto-api interfaces for cryptohash")
+    (description
+      "Crypto-api interfaces for cryptohash.")
+    (license license:bsd-3)))
+
 (define-public ghc-csv
   (package
     (name "ghc-csv")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: 0010-gnu-Add-ghc-drbg.patch --]
[-- Type: text/x-patch, Size: 2165 bytes --]

From 29f9804b6b699bbe6d9afab8313ff55177581785 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:15:31 -0800
Subject: [PATCH 10/31] gnu: Add ghc-drbg.

* gnu/packages/haskell-xyz.scm (ghc-drbg): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 9df70fa613..87ff73c200 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -3728,6 +3728,47 @@ monadic interface for building graphs.")
 between double precision floating point and text.")
     (license license:bsd-3)))
 
+(define-public ghc-drbg
+  (package
+    (name "ghc-drbg")
+    (version "0.5.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/DRBG/DRBG-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1z9vqc1nw0mf2sqgddcipmlkz6mckq9wnrzqqdy3rj3c90135pr1"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-cereal" ,ghc-cereal)
+        ("ghc-prettyclass" ,ghc-prettyclass)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-cryptohash-cryptoapi" ,ghc-cryptohash-cryptoapi)
+        ("ghc-parallel" ,ghc-parallel)
+        ("ghc-cipher-aes128" ,ghc-cipher-aes128)
+        ("ghc-entropy" ,ghc-entropy)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-crypto-api-tests" ,ghc-crypto-api-tests)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
+    (arguments
+     ;; FIXME Failing tests
+     `(#:tests? #f))
+    (home-page
+      "http://hackage.haskell.org/package/DRBG")
+    (synopsis "Cryptographically secure RNGs")
+    (description
+      "Deterministic random bit generator (aka RNG, PRNG) based HMACs, Hashes,
+and Ciphers.")
+    (license license:bsd-3)))
+
 (define-public ghc-dual-tree
   (package
     (name "ghc-dual-tree")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: 0011-gnu-Add-ghc-rsa.patch --]
[-- Type: text/x-patch, Size: 2096 bytes --]

From 1eacc256d03793ecbe13a093e0c3d4384644814e Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:55:04 -0800
Subject: [PATCH 11/31] gnu: Add ghc-rsa.

* gnu/packages/haskell-xyz.scm (ghc-rsa): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 87ff73c200..54f16496a5 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11619,6 +11619,43 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rsa
+  (package
+    (name "ghc-rsa")
+    (version "2.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/RSA/RSA-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "06k7nd7b1rdfb7891gw9bihrd9ripffbgqa14q1ryyj6vqa9r4jw"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-crypto-api" ,ghc-crypto-api)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-sha" ,ghc-sha)))
+    (native-inputs
+      `(("ghc-drbg" ,ghc-drbg)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)))
+    (home-page
+      "http://hackage.haskell.org/package/RSA")
+    (synopsis
+      "Implementation of RSA")
+    (description
+      "This library implements the RSA encryption and signature algorithms for
+arbitrarily-sized ByteStrings.  While the implementations work, they are not
+necessarily the fastest ones on the planet.  Particularly key generation.  The
+algorithms included are based of RFC 3447, or the Public-Key Cryptography
+Standard for RSA, version 2.1 (a.k.a, PKCS#1 v2.1).")
+    (license license:bsd-3)))
+
 (define-public ghc-safe
   (package
     (name "ghc-safe")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #13: 0012-gnu-Add-ghc-crypto-pubkey-types.patch --]
[-- Type: text/x-patch, Size: 1613 bytes --]

From 6c959ce7b413ead9c2eb306b859c370e1463028b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 10:56:10 -0800
Subject: [PATCH 12/31] gnu: Add ghc-crypto-pubkey-types.

* gnu/packages/haskell-xyz.scm (ghc-crypto-pubkey-types): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 54f16496a5..43f484b75f 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2897,6 +2897,31 @@ option to turn off macro-expansion.")
       "Crypto-api interfaces for cryptohash.")
     (license license:bsd-3)))
 
+(define-public ghc-crypto-pubkey-types
+  (package
+    (name "ghc-crypto-pubkey-types")
+    (version "0.4.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/crypto-pubkey-types/"
+               "crypto-pubkey-types-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0q0wlzjmpx536h1zcdzrpxjkvqw8abj8z0ci38138kpch4igbnby"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-asn1-types" ,ghc-asn1-types)
+        ("ghc-asn1-encoding" ,ghc-asn1-encoding)))
+    (home-page
+      "https://github.com/vincenthz/hs-crypto-pubkey-types")
+    (synopsis
+      "Generic cryptography Public keys algorithm types")
+    (description
+      "Generic cryptography public keys algorithm types")
+    (license license:bsd-3)))
+
 (define-public ghc-csv
   (package
     (name "ghc-csv")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #14: 0013-gnu-Add-ghc-lens-aeson.patch --]
[-- Type: text/x-patch, Size: 2080 bytes --]

From 239c9729befe2cb6b397c98104e9846494b5264c Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:05 -0800
Subject: [PATCH 13/31] gnu: Add ghc-lens-aeson.

* gnu/packages/haskell-xyz.scm (ghc-lens-aeson): New variable.
---
 gnu/packages/haskell-xyz.scm | 37 ++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 43f484b75f..714354f1fa 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -7258,6 +7258,43 @@ of getters, folds, isomorphisms, traversals, setters and lenses and their
 indexed variants.")
     (license license:bsd-3)))
 
+(define-public ghc-lens-aeson
+  (package
+    (name "ghc-lens-aeson")
+    (version "1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/lens-aeson/lens-aeson-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1k028ycmhz7mnjlrap88fqix4nmmpyy6b88m16kv77d3r8sz04a3"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-lens" ,ghc-lens)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-scientific" ,ghc-scientific)))
+    (native-inputs
+      `(("ghc-doctest" ,ghc-doctest)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-simple-reflect" ,ghc-simple-reflect)
+        ("cabal-doctest" ,cabal-doctest)))
+    (arguments
+      `(#:cabal-revision
+        ("6"
+         "1pg5v8fnlqw1krgi3d2a03a0zkjjdv5yp5f5z6q4mlb5jldz99a8")))
+    (home-page "https://github.com/lens/lens-aeson/")
+    (synopsis "Law-abiding lenses for aeson")
+    (description "Law-abiding lenses for aeson.")
+    (license license:expat)))
+
 (define-public ghc-lens-family-core
   (package
     (name "ghc-lens-family-core")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #15: 0014-gnu-ghc-authenticate-oauth.patch --]
[-- Type: text/x-patch, Size: 1978 bytes --]

From cc79d60b837613cace65035abb61b4ef1b00f3cc Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:01:36 -0800
Subject: [PATCH 14/31] gnu: ghc-authenticate-oauth.

* gnu/packages/haskell-xyz.scm (ghc-authenticate-oauth): New variable.
---
 gnu/packages/haskell-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 714354f1fa..6e79fad406 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -665,6 +665,39 @@ complicated text/binary file formats.")
 from aeson.")
     (license license:bsd-3)))
 
+(define-public ghc-authenticate-oauth
+  (package
+    (name "ghc-authenticate-oauth")
+    (version "1.6.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/authenticate-oauth"
+               "/authenticate-oauth-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1hry1zbi7gbyfi94w9cyg6m7ii7xm68jnsph63zxdj2s4ns0ylp0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-http-client" ,ghc-http-client)
+        ("ghc-crypto-pubkey-types" ,ghc-crypto-pubkey-types)
+        ("ghc-rsa" ,ghc-rsa)
+        ("ghc-data-default" ,ghc-data-default)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-sha" ,ghc-sha)
+        ("ghc-random" ,ghc-random)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-blaze-builder" ,ghc-blaze-builder)
+        ("ghc-transformers-compat" ,ghc-transformers-compat)))
+    (home-page
+      "https://github.com/yesodweb/authenticate")
+    (synopsis
+      "Authenticate with OAuth for Haskell web applications")
+    (description
+     "A library to authenticate with OAuth for Haskell web applications.")
+    (license license:bsd-3)))
+
 (define-public ghc-auto-update
   (package
     (name "ghc-auto-update")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #16: 0015-gnu-Add-ghc-wreq.patch --]
[-- Type: text/x-patch, Size: 3834 bytes --]

From f35cc786355f328db5c6ced47350ac0c5bffbb69 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:02:18 -0800
Subject: [PATCH 15/31] gnu: Add ghc-wreq.

* gnu/packages/haskell-xyz.scm (ghc-wreq): New variable.
---
 gnu/packages/haskell-xyz.scm | 84 ++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 6e79fad406..bb1f852fa7 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -15656,6 +15656,90 @@ modernized interface.")
     (description "Word8 library to be used with @code{Data.ByteString}.")
     (license license:bsd-3)))
 
+(define-public ghc-wreq
+  (package
+    (name "ghc-wreq")
+    (version "0.5.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/wreq/wreq-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "16xls71aby6jqc1frhwnlfvz1iwj1ms0rw9xzif02sn84470gn36"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-psqueues" ,ghc-psqueues)
+        ("ghc-aeson" ,ghc-aeson)
+        ("ghc-attoparsec" ,ghc-attoparsec)
+        ("ghc-authenticate-oauth" ,ghc-authenticate-oauth)
+        ("ghc-base16-bytestring" ,ghc-base16-bytestring)
+        ("ghc-case-insensitive" ,ghc-case-insensitive)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-lens-aeson" ,ghc-lens-aeson)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mime-types" ,ghc-mime-types)
+        ("ghc-time-locale-compat" ,ghc-time-locale-compat)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)))
+    (native-inputs
+      `(("cabal-doctest" ,cabal-doctest)
+        ("ghc-hunit" ,ghc-hunit)
+        ("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-aeson-pretty" ,ghc-aeson-pretty)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-network-info" ,ghc-network-info)
+        ("ghc-snap-core" ,ghc-snap-core)
+        ("ghc-snap-server" ,ghc-snap-server)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-test-framework" ,ghc-test-framework)
+        ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+        ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-uuid" ,ghc-uuid)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-doctest" ,ghc-doctest)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("1"
+         "0gz674sb266hv6si9l79c3bv7n2nbssl1262c24in79sk27887gb")))
+    (home-page "https://www.serpentine.com/wreq")
+    (synopsis "Easy-to-use HTTP client library")
+    (description
+      "A web client library that is designed for ease of use.
+
+Tutorial: http://www.serpentine.com/wreq/tutorial.html
+
+Features include:
+@itemize
+@item Simple but powerful `lens`-based API .
+
+@item A solid test suite, and built on reliable libraries like http-client and
+lens.
+
+@item Session handling includes connection keep-alive and pooling, and cookie
+persistence.
+
+@item Automatic response body decompression.
+@item Powerful multipart form and file upload handling.
+
+@item Support for JSON requests and responses, including navigation of
+schema-less responses.
+
+@item Basic and OAuth2 bearer authentication.
+@item Early TLS support via the tls package
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-x11
   (package
     (name "ghc-x11")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #17: 0016-gnu-Add-ghc-optparse-generic.patch --]
[-- Type: text/x-patch, Size: 2087 bytes --]

From e92c4ede18f2e8be05a2501e01d9fe0aa14cffb3 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:05:32 -0800
Subject: [PATCH 16/31] gnu: Add ghc-optparse-generic.

* gnu/packages/haskell-xyz.scm (ghc-optparse-generic): New variable.
---
 gnu/packages/haskell-xyz.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index bb1f852fa7..d53e808863 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9328,6 +9328,42 @@ easily work with command-line options.")
 easily work with command-line options.")
     (license license:expat)))
 
+(define-public ghc-optparse-generic
+  (package
+    (name "ghc-optparse-generic")
+    (version "1.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-generic/optparse-generic-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "13rr3hq26dpmbami8vb6d1ig9ywk6jia22sp5dkp6jkfc1c9k4l0"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-system-filepath" ,ghc-system-filepath)
+        ("ghc-only" ,ghc-only)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-void" ,ghc-void)
+        ("ghc-semigroups" ,ghc-semigroups)
+        ("ghc-singletons" ,ghc-singletons)
+        ("ghc-tagged" ,ghc-tagged)
+        ("ghc-th-desugar" ,ghc-th-desugar)))
+    (arguments
+      `(#:cabal-revision
+        ("3"
+         "0vszcjmxywblx5z9yvrz8c6yc104jgr1nv0sbv58ansd3rkjlzfn")))
+    (home-page
+      "http://hackage.haskell.org/package/optparse-generic")
+    (synopsis
+      "Auto-generate a command-line parser for your datatype")
+    (description
+      "This library auto-generates an optparse-applicative-compatible
+@code{Parser} from any data type that derives the @code{Generic} interface.")
+    (license license:bsd-3)))
 
 (define-public ghc-optparse-applicative
   (package
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #18: 0017-gnu-Add-ghc-optparse-simple.patch --]
[-- Type: text/x-patch, Size: 1685 bytes --]

From 21ed23819a2a5c17fa61bd7cbd21974514762712 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:19 -0800
Subject: [PATCH 17/31] gnu: Add ghc-optparse-simple.

* gnu/packages/haskell-xyz.scm (ghc-optparse-simple): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index d53e808863..15f5aed88d 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9540,6 +9540,33 @@ with several features not present in pretty-printing libraries designed for
 code.  It was designed for use in @code{Pandoc}.")
     (license license:bsd-3)))
 
+(define-public ghc-optparse-simple
+  (package
+    (name "ghc-optparse-simple")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/optparse-simple/optparse-simple-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1r00hkri42vyx552l8hcd1779fxiyl9w4k0pql915zsprirn8w82"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-githash" ,ghc-githash)
+        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+        ("ghc-semigroups" ,ghc-semigroups)))
+    (home-page
+      "https://github.com/fpco/optparse-simple#readme")
+    (synopsis
+      "Simple interface to optparse-applicative")
+    (description
+     "Simple interface to optparse-applicative.")
+    (license license:bsd-3)))
+
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #19: 0018-gnu-Add-ghc-githash.patch --]
[-- Type: text/x-patch, Size: 2507 bytes --]

From 5adee3812543b093b9e877672447a3ba7060a838 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:06:57 -0800
Subject: [PATCH 18/31] gnu: Add ghc-githash.

* gnu/packages/haskell-xyz.scm (ghc-githash): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 15f5aed88d..a77fc2cf9f 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -66,6 +66,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -5118,6 +5119,52 @@ properties for functions operating on them.")
 interfaces with ease.")
     (license license:bsd-3)))
 
+(define-public ghc-githash
+  (package
+    (name "ghc-githash")
+    (version "0.1.3.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/githash/githash-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "19xhs2nzm1myyjx3nkc3invy15c19cfx790vbcrl050n9sb330jr"))))
+    (build-system haskell-build-system)
+    (native-inputs
+      `(("git" ,git)
+        ("ghc-hspec" ,ghc-hspec)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-temporary" ,ghc-temporary)
+        ("ghc-unliftio" ,ghc-unliftio)))
+    (home-page
+      "https://github.com/snoyberg/githash#readme")
+    (synopsis
+      "Compile git revision info into Haskell projects")
+    (description
+     "Some handy Template Haskell splices for including the current git hash and
+branch in the code of your project.  Useful for including in panic messages,
+--version output, or diagnostic info for more informative bug reports.
+
+Most of the complication in the GitHash module is due to the various places
+the current git hash might be stored:
+
+@itemize
+
+@item Detached HEAD: the hash is in .git/HEAD
+
+@item On a branch or tag: the hash is in a file pointed to by .git/HEAD in a
+location like .git/refs/heads
+
+@item On a branch or tag but in a repository with packed refs: the hash is in
+.git/packed-refs
+
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-gitrev
   (package
     (name "ghc-gitrev")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #20: 0019-gnu-Add-ghc-rio-prettyprint.patch --]
[-- Type: text/x-patch, Size: 1800 bytes --]

From a7f93319d6eba2872a8042ff7b90779cb8a9f148 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:07:43 -0800
Subject: [PATCH 19/31] gnu: Add ghc-rio-prettyprint.

* gnu/packages/haskell-xyz.scm (ghc-rio-prettyprint): New variable.
---
 gnu/packages/haskell-xyz.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a77fc2cf9f..b00fcf3173 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11824,6 +11824,38 @@ expose it from another module in the hierarchy.
 @end itemize")
     (license license:expat)))
 
+(define-public ghc-rio-prettyprint
+  (package
+    (name "ghc-rio-prettyprint")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/rio-prettyprint/rio-prettyprint-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0n8ldc73i0954c6s8jh0hibxrisp84yh5pcxv3x3q0wg4v2xvr0m"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-colour" ,ghc-colour)
+        ("ghc-path" ,ghc-path)
+        ("ghc-rio" ,ghc-rio)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1hvhjqy7kfk7fglx1rw8axscy0dfzqwd1564awnwdhvmf8silkkn")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Pretty-printing for RIO")
+    (description "Pretty-printing for RIO.")
+    (license license:bsd-3)))
+
 (define-public ghc-rsa
   (package
     (name "ghc-rsa")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #21: 0020-gnu-Add-ghc-regex-applicative-text.patch --]
[-- Type: text/x-patch, Size: 1727 bytes --]

From 0a1dc5a358adaecfe3cf60a4e913affa38b1115f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:08:10 -0800
Subject: [PATCH 20/31] gnu: Add ghc-regex-applicative-text.

* gnu/packages/haskell-xyz.scm (ghc-regex-applicative-text): New variable.
---
 gnu/packages/haskell-xyz.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index b00fcf3173..b687b384d1 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -11339,6 +11339,33 @@ copious examples.")
 regular expressions.  Parsers can be built using Applicative interface.")
     (license license:expat)))
 
+(define-public ghc-regex-applicative-text
+  (package
+    (name "ghc-regex-applicative-text")
+    (version "0.1.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/regex-applicative-text"
+              "/regex-applicative-text-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1ng2qhk4mvpzl8fx91ig7ldv09v9aqdsvn6yl9yjapc6h0ghb4xh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-regex-applicative" ,ghc-regex-applicative)))
+    (arguments
+      `(#:cabal-revision
+        ("4"
+         "0ykzppl1v6k70idjl73m4w161f6lsax89v1gp100y4xgipf3yijj")))
+    (home-page
+      "https://github.com/phadej/regex-applicative-text#readme")
+    (synopsis "Regex-applicative on text")
+    (description
+      "Wrapped regex-applicative primitives to work with Text.")
+    (license license:bsd-3)))
+
 (define-public ghc-regex-base
   (package
     (name "ghc-regex-base")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #22: 0021-gnu-Add-ghc-pantry.patch --]
[-- Type: text/x-patch, Size: 5874 bytes --]

From 2f9757133528dab74c82e56ee6ceccc30ba0743b Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:18 -0800
Subject: [PATCH 21/31] gnu: Add ghc-pantry.

* gnu/packages/haskell-xyz.scm (ghc-pantry): New variable.
---
 gnu/packages/haskell-xyz.scm                  | 109 ++++++++++++++++++
 .../ghc-pantry-ghc8.8-compatibility.patch     |  16 +++
 2 files changed, 125 insertions(+)
 create mode 100644 gnu/packages/patches/ghc-pantry-ghc8.8-compatibility.patch

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index b687b384d1..5d4b700b64 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -10026,6 +10026,115 @@ pandoc to represent structured documents.  It also provides functions for
 building up, manipulating and serialising @code{Pandoc} structures.")
     (license license:bsd-3)))
 
+(define-public ghc-pantry
+  (package
+    (name "ghc-pantry")
+    (version "0.1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/pantry/pantry-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+           "1m1sps9kc7y8zpba486lv5z8an3z8493zxb1qhghql6pybsprsgi"))
+        (patches
+         (search-patches "ghc-pantry-ghc8.8-compatibility.patch"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+        ("ghc-base-orphans" ,ghc-base-orphans)
+        ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-contravariant" ,ghc-contravariant)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-digest" ,ghc-digest)
+        ("ghc-filelock" ,ghc-filelock)
+        ("ghc-generic-deriving" ,ghc-generic-deriving)
+        ("ghc-hackage-security" ,ghc-hackage-security)
+        ("ghc-hashable" ,ghc-hashable)
+        ("ghc-hpack" ,ghc-hpack)
+        ("hspec-discover" ,hspec-discover)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-client-tls" ,ghc-http-client-tls)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-download" ,ghc-http-download)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-mono-traversable" ,ghc-mono-traversable)
+        ("ghc-network" ,ghc-network)
+        ("ghc-network-uri" ,ghc-network-uri)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-persistent" ,ghc-persistent)
+        ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+        ("ghc-persistent-template" ,ghc-persistent-template)
+        ("ghc-primitive" ,ghc-primitive)
+        ("ghc-resourcet" ,ghc-resourcet)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-orphans" ,ghc-rio-orphans)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+        ("ghc-safe" ,ghc-safe)
+        ("ghc-syb" ,ghc-syb)
+        ("ghc-tar-conduit" ,ghc-tar-conduit)
+        ("ghc-text-metrics" ,ghc-text-metrics)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-th-lift-instances" ,ghc-th-lift-instances)
+        ("ghc-th-orphans" ,ghc-th-orphans)
+        ("ghc-th-reify-many" ,ghc-th-reify-many)
+        ("ghc-th-utilities" ,ghc-th-utilities)
+        ("ghc-unix-compat" ,ghc-unix-compat)
+        ("ghc-unliftio" ,ghc-unliftio)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-zip-archive" ,ghc-zip-archive)))
+    (native-inputs
+      `(("ghc-quickcheck" ,ghc-quickcheck)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-hedgehog" ,ghc-hedgehog)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)))
+    (arguments
+     `(; Tests do network IO
+       #:tests? #f))
+    (home-page
+      "https://github.com/commercialhaskell/pantry#readme")
+    (synopsis
+      "Content addressable Haskell package management")
+    (description
+     "Content addressable Haskell package management, providing for secure,
+reproducible acquisition of Haskell package contents and metadata.
+
+What is Pantry
+
+@itemize
+
+@item A Haskell library, command line executable, storage specification, and
+network protocol
+
+@item Intended for content-addressable storage of Haskell packages
+@item Allows non-centralized package storage
+@item Primarily for use by Stackage and Stack, hopefully other tools as well
+@end itemize
+
+Goals
+
+@itemize
+@item Efficient, distributed package storage for Haskell
+@item Superset of existing storage mechanisms
+@item Security via content addressable storage
+@item Allow more Stackage-style snapshots to exist
+@item Allow authors to bypass Hackage for uploads
+@item Allow Stackage to create forks of packages on Hackage
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public ghc-parallel
   (package
     (name "ghc-parallel")
diff --git a/gnu/packages/patches/ghc-pantry-ghc8.8-compatibility.patch b/gnu/packages/patches/ghc-pantry-ghc8.8-compatibility.patch
new file mode 100644
index 0000000000..051b3f60dc
--- /dev/null
+++ b/gnu/packages/patches/ghc-pantry-ghc8.8-compatibility.patch
@@ -0,0 +1,16 @@
+This version of pantry uses some language features that changed from 8.6 to
+8.8.
+
+diff --git a/src/Pantry/Storage.hs.old b/src/Pantry/Storage.hs
+index 8ad03b9..2d0481b 100644
+--- a/src/Pantry/Storage.hs
++++ b/src/Pantry/Storage.hs
+@@ -13,6 +13,8 @@
+ {-# LANGUAGE ViewPatterns #-}
+ {-# LANGUAGE LambdaCase #-}
+ {-# LANGUAGE UndecidableInstances #-}
++{-# LANGUAGE DerivingStrategies #-}
++{-# LANGUAGE StandaloneDeriving #-}
+ module Pantry.Storage
+   ( SqlBackend
+   , initStorage
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #23: 0022-gnu-Add-ghc-open-browser.patch --]
[-- Type: text/x-patch, Size: 1551 bytes --]

From 6eacbecc63873a7220f7669ee5471b89a2949acf Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:09:42 -0800
Subject: [PATCH 22/31] gnu: Add ghc-open-browser.

* gnu/packages/haskell-xyz.scm (ghc-open-browser): New variable.
---
 gnu/packages/haskell-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 5d4b700b64..e41f654630 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -9204,6 +9204,29 @@ native tuples; whereas the primary purpose of @code{Only} is to provide the
 traditionally so named type-wrapper for attaching typeclass instances.")
     (license license:bsd-3)))
 
+(define-public ghc-open-browser
+  (package
+    (name "ghc-open-browser")
+    (version "0.2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/open-browser/open-browser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0rna8ir2cfp8gk0rd2q60an51jxc08lx4gl0liw8wwqgh1ijxv8b"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/rightfold/open-browser")
+    (synopsis "Open a web browser from Haskell")
+    (description
+      "Open a web browser from Haskell.  Currently BSD, Linux, OS X and Windows
+are supported.")
+    (license license:bsd-3)))
+
 (define-public ghc-opengl
   (package
     (name "ghc-opengl")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #24: 0023-gnu-Add-ghc-neat-interpolation.patch --]
[-- Type: text/x-patch, Size: 1867 bytes --]

From cc4984a46065e49020d24ed969d3f52b686b2279 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:09 -0800
Subject: [PATCH 23/31] gnu: Add ghc-neat-interpolation.

* gnu/packages/haskell-xyz.scm (ghc-neat-interpolation): New variable.
---
 gnu/packages/haskell-xyz.scm | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index e41f654630..a2a80748ef 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8841,6 +8841,35 @@ with pseudo-graphical interfaces.  This package is a nice, modern binding to GNU
 ncurses.")
     (license license:gpl3)))
 
+(define-public ghc-neat-interpolation
+  (package
+    (name "ghc-neat-interpolation")
+    (version "0.3.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/neat-interpolation"
+              "/neat-interpolation-" version ".tar.gz"))
+        (sha256
+          (base32
+            "0lhpjckwhzlvx4cdhrwprwb85vc7hc44ybvk5nswgn7z73cp0wyy"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-megaparsec" ,ghc-megaparsec)
+        ("ghc-base-prelude" ,ghc-base-prelude)))
+    (native-inputs `(("ghc-htf" ,ghc-htf)))
+    (home-page
+      "https://github.com/nikita-volkov/neat-interpolation")
+    (synopsis
+      "Quasiquoter for neat and simple multiline text interpolation")
+    (description
+      "A quasiquoter for producing Text values with support for a simple
+interpolation of input values.  It removes the excessive indentation from the
+input and accurately manages the indentation of all lines of the interpolated
+variables.")
+    (license license:expat)))
+
 (define-public ghc-network
   (package
     (name "ghc-network")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #25: 0024-gnu-Add-ghc-mustache.patch --]
[-- Type: text/x-patch, Size: 2310 bytes --]

From 18960423b5e465ca7e4fea12724bc493ca7b2475 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:10:38 -0800
Subject: [PATCH 24/31] gnu: Add ghc-mustache.

* gnu/packages/haskell-xyz.scm (ghc-mustache): New variable.
---
 gnu/packages/haskell-xyz.scm | 46 ++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a2a80748ef..c0204e373c 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8733,6 +8733,52 @@ implementation is pure Haskell, so it might be a bit slower than a C FFI
 binding.")
     (license license:bsd-3)))
 
+(define-public ghc-mustache
+  (package
+    (name "ghc-mustache")
+    (version "2.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mustache/mustache-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1q3vadcvv2pxg6rpp92jq5zy784jxphdfpf6xn9y6wg9g3jn7201"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-aeson" ,ghc-aeson)
+        ("ghc-either" ,ghc-either)
+        ("ghc-unordered-containers" ,ghc-unordered-containers)
+        ("ghc-vector" ,ghc-vector)
+        ("ghc-scientific" ,ghc-scientific)
+        ("ghc-th-lift" ,ghc-th-lift)
+        ("ghc-yaml" ,ghc-yaml)
+        ("ghc-cmdargs" ,ghc-cmdargs)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("ghc-base-unicode-symbols" ,ghc-base-unicode-symbols)
+        ("ghc-wreq" ,ghc-wreq)
+        ("ghc-zlib" ,ghc-zlib)
+        ("ghc-tar" ,ghc-tar)
+        ("ghc-lens" ,ghc-lens)
+        ("ghc-hspec" ,ghc-hspec)
+        ("ghc-temporary" ,ghc-temporary)))
+    (arguments
+     ;; Tests do network IO
+     `(#:tests? #f))
+    (home-page
+      "https://github.com/JustusAdam/mustache")
+    (synopsis "Mustache template parser library")
+    (description
+      "Allows parsing and rendering template files with mustache markup.  See
+the mustache language reference http://mustache.github.io/mustache.5.html.
+
+Implements the mustache spec version 1.1.3.")
+    (license license:bsd-3)))
+
 (define-public ghc-mwc-random
   (package
     (name "ghc-mwc-random")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #26: 0025-gnu-Add-ghc-mintty.patch --]
[-- Type: text/x-patch, Size: 2299 bytes --]

From 8808849f3950a9acd7e63740031ec2eb276718f4 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:02 -0800
Subject: [PATCH 25/31] gnu: Add ghc-mintty.

* gnu/packages/haskell-xyz.scm (ghc-mintty): New variable.
---
 gnu/packages/haskell-xyz.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index c0204e373c..33a607d781 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8295,6 +8295,41 @@ generated lenses are fully compatible with ones generated by lens (and can be
 used both from lens and microlens).")
     (license license:bsd-3)))
 
+(define-public ghc-mintty
+  (package
+    (name "ghc-mintty")
+    (version "0.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/mintty/mintty-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1njhz7wjmsk5pbr7gfkl95k50npkmm0iyxp3j93bbsg4rmxzg2kw"))))
+    (build-system haskell-build-system)
+    (home-page
+      "https://github.com/RyanGlScott/mintty")
+    (synopsis
+      "Reliably detect the presence of a MinTTY console on Windows")
+    (description
+      "MinTTY is a Windows-specific terminal emulator for the widely used
+Cygwin and MSYS projects, which provide Unix-like environments for Windows.
+MinTTY consoles behave differently from native Windows consoles (such as
+cmd.exe or PowerShell) in many ways, and in some cases, these differences make
+it necessary to treat MinTTY consoles differently in code.
+
+The mintty library provides a simple way to detect if your code in running in
+a MinTTY console on Windows.  It exports @code{isMinTTY}, which does the right
+thing 90% of the time (by checking if standard error is attached to MinTTY),
+and it also exports @code{isMinTTYHandle} for the other 10% of the time (when
+you want to check is some arbitrary handle is attached to MinTTY).  As you
+might expect, both of these functions will simply return @code{False} on any
+non-Windows operating system.")
+    (license license:bsd-3)))
+
 (define-public ghc-missingh
   (package
     (name "ghc-missingh")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #27: 0026-gnu-Add-ghc-http-download.patch --]
[-- Type: text/x-patch, Size: 2422 bytes --]

From 8dce95a1218bcba01e97de5f1b7fc7bc5ce658de Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:22 -0800
Subject: [PATCH 26/31] gnu: Add ghc-http-download.

* gnu/packages/haskell-xyz.scm (ghc-http-download): New variable.
---
 gnu/packages/haskell-xyz.scm | 47 ++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 33a607d781..5eb008cec9 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6663,6 +6663,53 @@ query parameters")
 Haskell data types to and from HTTP API data.")
     (license license:bsd-3)))
 
+(define-public ghc-http-download
+  (package
+    (name "ghc-http-download")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/http-download/http-download-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "0wip7l6cls734ag306s5l0683qqh273b3lk5ibig66racmysjqyb"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-base64-bytestring" ,ghc-base64-bytestring)
+        ("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-http-client" ,ghc-http-client)
+        ("ghc-http-conduit" ,ghc-http-conduit)
+        ("ghc-http-types" ,ghc-http-types)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-path" ,ghc-path)
+        ("ghc-path-io" ,ghc-path-io)
+        ("ghc-retry" ,ghc-retry)
+        ("ghc-rio" ,ghc-rio)
+        ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)))
+    (native-inputs
+      `(("ghc-hspec" ,ghc-hspec)
+        ("hspec-discover" ,hspec-discover)))
+    (arguments
+     `(#:tests? #f ; Tests do network IO
+       #:cabal-revision
+        ("4"
+         "1s20zjh52whs6hfhr90zyyy7g78zv1pw9hry1nwlzdv4hg97cbdh")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Verified downloads with retries")
+    (description
+     "Higher level HTTP download APIs include verification of content and
+retries.")
+    (license license:bsd-3)))
+
 (define-public ghc-ieee754
   (package
     (name "ghc-ieee754")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #28: 0027-gnu-Add-ghc-hi-file-parser.patch --]
[-- Type: text/x-patch, Size: 2172 bytes --]

From d8e1d80bd441049e08f631d590a1f79220a9fd17 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:11:51 -0800
Subject: [PATCH 27/31] gnu: Add ghc-hi-file-parser.

* gnu/packages/haskell-xyz.scm (ghc-hi-file-parser): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 5eb008cec9..14dcf15d9b 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6102,6 +6102,47 @@ feature, allowing applications to subscribe to notifications when a file is
 accessed or modified.")
     (license license:bsd-3)))
 
+(define-public ghc-hi-file-parser
+  (package
+    (name "ghc-hi-file-parser")
+    (version "0.1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/hi-file-parser/hi-file-parser-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "09gs26z0jvkkhb1r43gj27pq0k5fc4i6fpr59g397vz4sm86gb2l"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("hspec-discover" ,hspec-discover)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-vector" ,ghc-vector)))
+    (native-inputs `(("ghc-hspec" ,ghc-hspec)))
+    (arguments
+      `(#:cabal-revision
+        ("2"
+         "1bm98h0v4wf9vmdng15c2r48yz06118jxlprsnk0z3jw0d95ij9z")))
+    (home-page
+      "https://github.com/commercialhaskell/stack#readme")
+    (synopsis "Parser for GHC's hi files")
+    (description
+     "Provide data types and functions for parsing the binary .hi files produced by
+GHC.  Intended to support multiple versions of GHC, so that tooling can:
+
+@itemize
+@item Support multiple versions of GHC
+@item Avoid linking against the ghc library
+@item Not need to use ghc's textual dump file format.
+@end itemize
+
+Note that this code was written for Stack's usage initially, though it is
+intended to be general purpose.")
+    (license license:bsd-3)))
+
 (define-public ghc-hledger-lib
   (package
     (name "ghc-hledger-lib")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #29: 0028-gnu-Add-ghc-filelock.patch --]
[-- Type: text/x-patch, Size: 1578 bytes --]

From c9f8cef9ee92a49255cd9640554a45e13aab412f Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:14 -0800
Subject: [PATCH 28/31] gnu: Add ghc-filelock.

* gnu/packages/haskell-xyz.scm (ghc-filelock): New variable.
---
 gnu/packages/haskell-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 14dcf15d9b..b89be8e1ab 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -4607,6 +4607,31 @@ the files in a directory, and turn them into @code{(path, bytestring)} pairs
 embedded in your Haskell code.")
     (license license:bsd-3)))
 
+(define-public ghc-filelock
+  (package
+    (name "ghc-filelock")
+    (version "0.1.1.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://hackage.haskell.org/package/filelock/filelock-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "04qimhz78jjndk686dblkx06l9jscq2q9gyr014a4pbfj4iljgi5"))))
+    (build-system haskell-build-system)
+    (native-inputs `(("ghc-async" ,ghc-async)))
+    (home-page
+      "http://github.com/takano-akio/filelock")
+    (synopsis
+      "Portable interface to file locking (flock / LockFileEx)")
+    (description
+      "This package provides an interface to Windows and Unix file locking
+functionalities.")
+    (license license:public-domain)))
+
 (define-public ghc-filemanip
   (package
     (name "ghc-filemanip")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #30: 0029-gnu-Add-ghc-cryptonite-conduit.patch --]
[-- Type: text/x-patch, Size: 2230 bytes --]

From d45799c2f1ee27c0460c80f5e6c6a553614c9145 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:12:44 -0800
Subject: [PATCH 29/31] gnu: Add ghc-cryptonite-conduit.

* gnu/packages/haskell-xyz.scm (ghc-cryptonite-conduit): New variable.
---
 gnu/packages/haskell-xyz.scm | 41 ++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index b89be8e1ab..928d6ab029 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -2956,6 +2956,47 @@ option to turn off macro-expansion.")
       "Generic cryptography public keys algorithm types")
     (license license:bsd-3)))
 
+(define-public ghc-cryptonite-conduit
+  (package
+    (name "ghc-cryptonite-conduit")
+    (version "0.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://hackage.haskell.org/package/cryptonite-conduit/"
+              "cryptonite-conduit-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1bldcmda4xh52mw1wfrjljv8crhw3al7v7kv1j0vidvr7ymnjpbh"))))
+    (build-system haskell-build-system)
+    (inputs
+      `(("ghc-conduit" ,ghc-conduit)
+        ("ghc-conduit-extra" ,ghc-conduit-extra)
+        ("ghc-cryptonite" ,ghc-cryptonite)
+        ("ghc-exceptions" ,ghc-exceptions)
+        ("ghc-memory" ,ghc-memory)
+        ("ghc-resourcet" ,ghc-resourcet)))
+    (native-inputs
+      `(("ghc-conduit-combinators" ,ghc-conduit-combinators)
+        ("ghc-tasty" ,ghc-tasty)
+        ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
+    (arguments
+      `(#:cabal-revision
+        ("1"
+         "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz")))
+    (home-page
+      "https://github.com/haskell-crypto/cryptonite-conduit")
+    (synopsis "Cryptonite conduit")
+    (description
+      "Conduit bridge for cryptonite.
+
+For now only provide a conduit version for hash and hmac, but with
+contribution, this could provide cipher conduits too, and probably other
+things.")
+    (license license:bsd-3)))
+
 (define-public ghc-csv
   (package
     (name "ghc-csv")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #31: 0030-gnu-Add-ghc-hsc2hs.patch --]
[-- Type: text/x-patch, Size: 1962 bytes --]

From cec7473939e12da5722ba38b343a3554b844d6df Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Wed, 12 Feb 2020 08:58:55 -0800
Subject: [PATCH 30/31] gnu: Add ghc-hsc2hs.

* gnu/packages/haskell-xyz.scm (ghc-hsc2hs): New variable.
---
 gnu/packages/haskell-xyz.scm | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index 928d6ab029..ee7ef2f8a4 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -6519,6 +6519,37 @@ that interconverts between various bibliography formats using a common
 MODS-format XML intermediate.")
     (license license:gpl2+)))
 
+(define-public ghc-hsc2hs
+  (package
+    (name "ghc-hsc2hs")
+    (version "0.68.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/hsc2hs/hsc2hs-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1clj6bgs9vmiv3mjzp82lvyyik5zr5411nxab7hydbrgq94pbk70"))))
+    (build-system haskell-build-system)
+    (native-inputs
+     `(("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-hspec" ,ghc-tasty-hspec)))
+    (home-page
+     "http://hackage.haskell.org/package/hsc2hs")
+    (synopsis
+     "Preprocessor that helps with writing Haskell bindings to C code.")
+    (description
+     "The hsc2hs program can be used to automate some parts of the process of
+writing Haskell bindings to C code.  It reads an almost-Haskell source file
+with embedded special constructs, and outputs a real Haskell file with these
+constructs processed, based on information taken from some C headers.  The
+extra constructs provide Haskell counterparts of C types, values of C
+constants, including sizes of C types, and access to fields of C structs.")
+    (license license:bsd-3)))
+
 (define-public ghc-hslogger
   (package
     (name "ghc-hslogger")
-- 
2.29.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #32: 0031-gnu-Add-stack.patch --]
[-- Type: text/x-patch, Size: 7000 bytes --]

From 4085284414b279b064a9ac756bfaefe92c33e0de Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sun, 26 Jan 2020 11:19:47 -0800
Subject: [PATCH 31/31] gnu: Add stack.

* gnu/packages/haskell-xyz.scm (stack): New variable.
---
 gnu/packages/haskell-apps.scm                 | 115 ++++++++++++++++++
 .../patches/stack-ghc8.8-compatibility.patch  |  27 ++++
 2 files changed, 142 insertions(+)
 create mode 100644 gnu/packages/patches/stack-ghc8.8-compatibility.patch

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 19a0fc8a44..b7eb0380bf 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -37,6 +37,8 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system haskell)
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages gl)
@@ -864,6 +866,119 @@ test specifications defining a command to run, some input, and the expected
 output, stderr, and exit status.")
     (license license:gpl3+)))
 
+(define-public stack
+  (package
+    (name "stack")
+    (version "2.1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/stack/stack-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1q2nagnc24fvyj3hwnpgyp3rqhxswhscyw4pw2dazqx34ad3d0zr"))
+       (patches (search-patches "stack-ghc8.8-compatibility.patch"))))
+    (build-system haskell-build-system)
+    ;; FIXME: Some tests fail to access root directory
+    (arguments `(#:tests? #f))
+    (inputs
+     `(("ghc-aeson" ,ghc-aeson)
+       ("ghc-annotated-wl-pprint" ,ghc-annotated-wl-pprint)
+       ("ghc-ansi-terminal" ,ghc-ansi-terminal)
+       ("ghc-async" ,ghc-async)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-base64-bytestring" ,ghc-base64-bytestring)
+       ("ghc-colour" ,ghc-colour)
+       ("ghc-conduit" ,ghc-conduit)
+       ("ghc-conduit-extra" ,ghc-conduit-extra)
+       ("ghc-cryptonite" ,ghc-cryptonite)
+       ("ghc-cryptonite-conduit" ,ghc-cryptonite-conduit)
+       ("ghc-echo" ,ghc-echo)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-extra" ,ghc-extra)
+       ("ghc-file-embed" ,ghc-file-embed)
+       ("ghc-filelock" ,ghc-filelock)
+       ("ghc-fsnotify" ,ghc-fsnotify)
+       ("ghc-generic-deriving" ,ghc-generic-deriving)
+       ("ghc-hackage-security" ,ghc-hackage-security)
+       ("ghc-hashable" ,ghc-hashable)
+       ("ghc-hi-file-parser" ,ghc-hi-file-parser)
+       ("ghc-hpack" ,ghc-hpack)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-http-conduit" ,ghc-http-conduit)
+       ("ghc-http-download" ,ghc-http-download)
+       ("ghc-http-types" ,ghc-http-types)
+       ("ghc-memory" ,ghc-memory)
+       ("ghc-microlens" ,ghc-microlens)
+       ("ghc-mintty" ,ghc-mintty)
+       ("ghc-mono-traversable" ,ghc-mono-traversable)
+       ("ghc-mustache" ,ghc-mustache)
+       ("ghc-neat-interpolation" ,ghc-neat-interpolation)
+       ("ghc-network-uri" ,ghc-network-uri)
+       ("ghc-open-browser" ,ghc-open-browser)
+       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
+       ("ghc-pantry" ,ghc-pantry)
+       ("ghc-path" ,ghc-path)
+       ("ghc-path-io" ,ghc-path-io)
+       ("ghc-persistent" ,ghc-persistent)
+       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
+       ("ghc-persistent-template" ,ghc-persistent-template)
+       ("ghc-primitive" ,ghc-primitive)
+       ("ghc-project-template" ,ghc-project-template)
+       ("ghc-regex-applicative-text" ,ghc-regex-applicative-text)
+       ("ghc-resource-pool" ,ghc-resource-pool)
+       ("ghc-resourcet" ,ghc-resourcet)
+       ("ghc-retry" ,ghc-retry)
+       ("ghc-rio" ,ghc-rio)
+       ("ghc-rio-prettyprint" ,ghc-rio-prettyprint)
+       ("ghc-semigroups" ,ghc-semigroups)
+       ("ghc-split" ,ghc-split)
+       ("ghc-streaming-commons" ,ghc-streaming-commons)
+       ("ghc-tar" ,ghc-tar)
+       ("ghc-temporary" ,ghc-temporary)
+       ("ghc-terminal-size" ,ghc-terminal-size)
+       ("ghc-text-metrics" ,ghc-text-metrics)
+       ("ghc-th-reify-many" ,ghc-th-reify-many)
+       ("ghc-tls" ,ghc-tls)
+       ("ghc-typed-process" ,ghc-typed-process)
+       ("ghc-unicode-transforms" ,ghc-unicode-transforms)
+       ("ghc-unix-compat" ,ghc-unix-compat)
+       ("ghc-unliftio" ,ghc-unliftio)
+       ("ghc-unordered-containers" ,ghc-unordered-containers)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-yaml" ,ghc-yaml)
+       ("ghc-zip-archive" ,ghc-zip-archive)
+       ("ghc-zlib" ,ghc-zlib)
+       ("ghc-githash" ,ghc-githash)
+       ("ghc-optparse-simple" ,ghc-optparse-simple)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-optparse-generic" ,ghc-optparse-generic)))
+    (native-inputs
+     `(("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+       ("ghc-smallcheck" ,ghc-smallcheck)
+       ("hspec-discover" ,hspec-discover)))
+    (home-page "http://haskellstack.org")
+    (synopsis "Haskell Tool Stack")
+    (description
+     "Stack is a cross-platform program for developing Haskell projects.  It
+is aimed at Haskellers both new and experienced.
+
+It features:
+
+@itemize
+@item Installing GHC automatically, in an isolated location.
+@item Installing packages needed for your project.
+@item Building your project.
+@item Testing your project.
+@item Benchmarking your project.
+@end itemize")
+    (license license:bsd-3)))
+
 (define-public stylish-haskell
   (package
     (name "stylish-haskell")
diff --git a/gnu/packages/patches/stack-ghc8.8-compatibility.patch b/gnu/packages/patches/stack-ghc8.8-compatibility.patch
new file mode 100644
index 0000000000..1bfaa14b8b
--- /dev/null
+++ b/gnu/packages/patches/stack-ghc8.8-compatibility.patch
@@ -0,0 +1,27 @@
+This version of stack uses some language features that changed from 8.6 to
+8.8.
+
+diff --git a/src/Stack/Storage/User.hs.old b/src/Stack/Storage/User.hs
+index 3845b09..cfc17d5 100644
+--- a/src/Stack/Storage/User.hs
++++ b/src/Stack/Storage/User.hs
+@@ -10,6 +10,8 @@
+ {-# LANGUAGE TupleSections #-}
+ {-# LANGUAGE TypeFamilies #-}
+ {-# LANGUAGE UndecidableInstances #-}
++{-# LANGUAGE DerivingStrategies #-}
++{-# LANGUAGE StandaloneDeriving #-}
+ {-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-}
+
+ -- | Work with SQLite database used for caches across an entire user account.
+--- a/src/Stack/Storage/Project.hs.old
++++ b/src/Stack/Storage/Project.hs
+@@ -10,4 +10,6 @@
+ {-# LANGUAGE TupleSections #-}
+ {-# LANGUAGE TypeFamilies #-}
+ {-# LANGUAGE UndecidableInstances #-}
++{-# LANGUAGE DerivingStrategies #-}
++{-# LANGUAGE StandaloneDeriving #-}
+ {-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-}
+
+ -- | Work with SQLite database used for caches across a single project.
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [bug#39309] .[PATCH] WIP gnu: add stack.
  2021-01-01 18:04                             ` [bug#39309] .[PATCH] WIP " John Soo
@ 2021-01-01 18:18                               ` John Soo
  0 siblings, 0 replies; 17+ messages in thread
From: John Soo @ 2021-01-01 18:18 UTC (permalink / raw)
  To: Timothy Sample; +Cc: 39309

Well it looks like cryptonite-conduit was added since the last time I
worked on stack. The patch that adds it should be ignored.




^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2021-01-01 18:19 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-27 14:56 [bug#39309] .[PATCH] WIP gnu: add stack John Soo
2020-01-29 15:17 ` [bug#39309] [PATCH WIP] " John Soo
2020-02-07 17:32   ` John Soo
2020-02-10  6:06     ` Timothy Sample
2020-02-13 13:52       ` John Soo
2020-02-13 13:59         ` John Soo
2020-02-13 17:36           ` John Soo
2020-02-13 22:59             ` Timothy Sample
2020-02-16  1:56               ` Timothy Sample
2020-02-19 14:56                 ` John Soo
2020-02-20  4:55                   ` Timothy Sample
2020-02-22 15:34                     ` Timothy Sample
2020-03-11  9:17                       ` John Soo
2020-03-11 14:18                         ` Timothy Sample
2020-03-13 15:05                           ` John Soo
2021-01-01 18:04                             ` [bug#39309] .[PATCH] WIP " John Soo
2021-01-01 18:18                               ` John Soo

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).