diff --git a/guix/store.scm b/guix/store.scm index d3e94625a7..82ed94bbc1 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -99,6 +99,7 @@ store-bind store-return store-lift + store-lower run-with-store %guile-for-build text-file @@ -881,6 +882,12 @@ in the store monad." (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 cb5370d5cc..f43fcb14d0 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 +;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -595,6 +595,12 @@ Deriver: ~a~%" (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")