summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorJohn Soo <jsoo1@asu.edu>2020-04-10 21:09:02 -0700
committerLeo Famulari <leo@famulari.name>2020-05-29 10:44:30 -0400
commit89e9082e4e90c9e593ed8584ff6978ecf91dfe24 (patch)
treece7be2b057c0661e800c24a4fc23b2bddbdde871 /gnu/packages
parent2b2c8911c6357312ca577c20dbe6fc58ffa98aa5 (diff)
downloadguix-89e9082e4e90c9e593ed8584ff6978ecf91dfe24.tar.gz
gnu: Add ghc-generic-random.
* gnu/packages/haskell-xyz.scm (ghc-generic-random): New variable.

Signed-off-by: Leo Famulari <leo@famulari.name>
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/haskell-xyz.scm40
1 files changed, 40 insertions, 0 deletions
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index fb26de2669..d828501593 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -4481,6 +4481,46 @@ specific Windows, Mac, and Linux file system event notification.")
 deriving mechanism in Haskell to arbitrary classes.")
     (license license:bsd-3)))
 
+(define-public ghc-generic-random
+  (package
+    (name "ghc-generic-random")
+    (version "1.2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/generic-random/"
+             "generic-random-" version ".tar.gz"))
+       (sha256
+        (base32 "130lmblycxnpqbsl7vf6a90zccibnvcb5zaclfajcn3by39007lv"))))
+    (build-system haskell-build-system)
+    (inputs `(("ghc-quickcheck" ,ghc-quickcheck)))
+    (native-inputs
+     `(("ghc-inspection-testing" ,ghc-inspection-testing)))
+    (arguments
+     `(#:cabal-revision
+       ("1" "1d0hx41r7yq2a86ydnfh2fv540ah8cz05l071s2z4wxcjw0ymyn4")))
+    (home-page
+     "https://github.com/lysxia/generic-random")
+    (synopsis
+     "Generic random generators for QuickCheck")
+    (description
+     "Derive instances of @code{Arbitrary} for QuickCheck, with various options
+to customize implementations.
+
+Automating the arbitrary boilerplate also ensures that when a type changes to
+have more or fewer constructors, then the generator either fixes itself to
+generate that new case (when using the uniform distribution) or causes a
+compilation error so you remember to fix it (when using an explicit
+distribution).
+
+This package also offers a simple (optional) strategy to ensure termination
+for recursive types: make @code{Test.QuickCheck.Gen}'s size parameter decrease
+at every recursive call; when it reaches zero, sample directly from a
+trivially terminating generator given explicitly (@code{genericArbitraryRec}
+and @code{withBaseCase}) or implicitly (@code{genericArbitrary'}).")
+    (license license:expat)))
+
 (define-public ghc-generics-sop
   (package
     (name "ghc-generics-sop")