From 023d9892c0411adb523e6bc8337be3e7e94e606f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Wed, 14 Jan 2015 14:25:58 +0100
Subject: [PATCH] store: Add 'store-lower'.

* guix/store.scm (store-lower): New procedure.
* tests/store.scm ("store-lower"): New test.
---
 guix/store.scm  | 7 +++++++
 tests/store.scm | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/guix/store.scm b/guix/store.scm
index d3e94625a7e..82ed94bbc10 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -99,6 +99,7 @@ (define-module (guix store)
             store-bind
             store-return
             store-lift
+            store-lower
             run-with-store
             %guile-for-build
             text-file
@@ -881,6 +882,12 @@ (define result
                         (procedure-property proc 'documentation))
   result)
 
+(define (store-lower proc)
+  "Lower PROC, a monadic procedure in %STORE-MONAD, to a \"normal\" procedure
+taking the store as its first argument."
+  (lambda (store . args)
+    (run-with-store store (apply proc args))))
+
 ;;
 ;; Store monad operators.
 ;;
diff --git a/tests/store.scm b/tests/store.scm
index cb5370d5cca..f43fcb14d00 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -595,6 +595,12 @@ (define (same? x y)
            (null? (valid-derivers %store file))
            (null? (referrers %store file))))))
 
+(test-equal "store-lower"
+  "Lowered."
+  (let* ((add  (store-lower text-file))
+         (file (add %store "foo" "Lowered.")))
+    (call-with-input-file file get-string-all)))
+
 (test-end "store")
 
 
-- 
GitLab