store: Add 'store-lower'.

* guix/store.scm (store-lower): New procedure.
* tests/store.scm ("store-lower"): New test.
This commit is contained in:
Ludovic Courtès 2015-01-14 14:25:58 +01:00
parent e87f0591f3
commit 023d9892c0
2 changed files with 14 additions and 1 deletions

@ -99,6 +99,7 @@
store-bind store-bind
store-return store-return
store-lift store-lift
store-lower
run-with-store run-with-store
%guile-for-build %guile-for-build
text-file text-file
@ -881,6 +882,12 @@ in the store monad."
(procedure-property proc 'documentation)) (procedure-property proc 'documentation))
result) 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. ;; Store monad operators.
;; ;;

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; 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. ;;; This file is part of GNU Guix.
;;; ;;;
@ -595,6 +595,12 @@ Deriver: ~a~%"
(null? (valid-derivers %store file)) (null? (valid-derivers %store file))
(null? (referrers %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") (test-end "store")