Subject: Re: [PATCH WIP] gnu: add stack.

From: John Soo <[email-masked]>
Date: Thu, 13 Feb 2020 13:59:33 +0000

Hi Tim,

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

- John
From 2731dcc3d8f1dc1421bfea41ae648622b4def67e Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From fd36828ec8dd480cbe4d69b9e2bb126c582b3698 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 9aee103d30a4094ed5f64b17112dd2bc19ab5eaf Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From fc4e9b05417a2d6257c8a6759266aa0c803de0d2 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 9f3457df71769aa8d4eba94bc6d0f5bedc5f8922 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From dff40eb5e0da8da9039520e1c0ab217f6c24c2a7 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From c6fe2f4e419d5133e7b40bd965605575b6e4ad7f Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From a054107ac0c5a905898fd54c4a5555ce190449fe Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 355a1900b56e3c6128f4a8f753e8bd617882d743 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 3d10f8ed3722af9a4af8ca1469c9be293fa7d6eb Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 21d5037eba1bd1ee4578390ea0017bb920252eef Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 8fa0bac119039346205b891e22db220dd2bf3970 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From b1e90b241d1e43201166bf08d1111b258b817ece Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 64a8861065e0a59f3ed48d5e57922f451b621b2e Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 3d6f9f3fb1cb71e4f23061d01d5caeb20a583c97 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 3446b60ab8b238ce1bde8859a5c2dbdc86e8cc30 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 313edf764e66d0608bbfc72319a71bd9e73b5f43 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 6a24f98bf99962ad6bb2964845a8b93d486df527 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 48def99a5600b05195116593e9596773921c8c79 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 1f9a11e1a0ab2f571494e61ebd853fe24c031d69 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From decd280b6acb602d3131c1c56064a6a1a143e041 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 26b1993886f552a6c5e56496c79f8e2bb908a1a3 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 266b7ffc7cab53b9666b5c86cd3d937bd4590b78 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 54cda3b433c61530f666e04d966b714ced1f43fa Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From a77833f2360e3c6895584f003a185ae05039b3cc Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 54bc158701f0705a851a5d096a03949017a35f83 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 4063ea3551379290c13c391ffa3a526bee64dea2 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 3b0e6a04e99c44adbe67b4a6903abd700c371f0c Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From c94ae2d3524e226c82843bdf1cbee6cfb0302814 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From b80cb4ad22da156cb1c2d901f9ae4fd41213c8ff Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From 321b48d938376b180b82b6c2be0ba4dc58f2818b Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From f971215408284fb25c9ef884fdf5f859c88cb028 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From c74dd8def30b5dcd7dea7cb85bdec545946e231a Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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

From c2a41472136a6f184399122b3d7032b3e9b959a8 Mon Sep 17 00:00:00 2001
From: John Soo <[email-masked]>
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