Subject: [PATCH 07/38] gnu: Add ghc-language-haskell-extract.

From: rsiddharth <[email-masked]>
Date: Wed, 18 Oct 2017 03:07:27 +0000

* gnu/packages/haskell.scm
(ghc-language-haskell-extract): New variable.
---
 gnu/packages/haskell.scm | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 43a8565f6..2f064e2b2 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -9171,4 +9171,70 @@ between 2 and 3 times faster than the Mersenne Twister.")
     (description "This Haskell library algorithms for vector arrays.")
     (license license:bsd-3)))
 
+(define-public ghc-language-haskell-extract
+  (package
+    (name "ghc-language-haskell-extract")
+    (version "0.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "language-haskell-extract-" version "/"
+                           "language-haskell-extract-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-regex-posix" ,ghc-regex-posix)))
+    (home-page "https://github.com/finnsson/template-helper")
+    (synopsis "Haskell module to automatically extract functions from
+the local code")
+    (description "This package contains helper functions on top of
+Template Haskell.
+
+@code{functionExtractor} extracts all functions after a regexp-pattern.
+
+@verbatim
+ foo = \"test\"
+ boo = \"testing\"
+ bar = $\(functionExtractor \"oo$\")
+@end verbatim
+
+will automagically extract the functions ending with @code{oo} such as
+
+@verbatim
+ bar = [\(\"foo\",foo), \(\"boo\",boo)]
+@end verbatim
+
+This can be useful if you wish to extract all functions beginning
+with test \(for a test-framework) or all functions beginning with wc
+\(for a web service).
+
+@code{functionExtractorMap} works like @code{functionsExtractor} but
+applies a function over all function-pairs.
+
+This functions is useful if the common return type of the functions is
+a type class.
+
+Example:
+
+@verbatim
+ secondTypeclassTest =
+   do let expected = [\"45\", \"88.8\", \"\\\"hej\\\"\"]
+          actual = $\(functionExtractorMap \"^tc\" [|\\n f -> show f|] )
+      expected @=? actual
+
+ tcInt :: Integer
+ tcInt = 45
+
+ tcDouble :: Double
+ tcDouble = 88.8
+
+ tcString :: String
+ tcString = \"hej\"
+@end verbatim
+")
+    (license license:bsd-3)))
+
 ;;; haskell.scm ends here
-- 
2.15.0.rc0