(address . guix-patches@gnu.org)(name . ???)(address . iyzsong@member.fsf.org)
* guix/gexp.scm (eval-gexp): New procedure.
---
guix/gexp.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Toggle diff (36 lines)
diff --git a/guix/gexp.scm b/guix/gexp.scm
index f005c4d29..9709c5ecb 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -76,6 +76,7 @@
gexp->derivation
gexp->file
gexp->script
+ eval-gexp
text-file*
mixed-text-file
file-union
@@ -1167,6 +1168,21 @@ and '%load-compiled-path' to honor EXP's imported modules."
#:local-build? #t
#:substitutable? #f)))))
+(define* (eval-gexp exp #:optional (name "computed-value"))
+ "Return as a monadic value the EXP (a gexp) evaluate to. This is
+implemented by building a store file NAME that contains the textual
+representation of EXP's value, and then @code{read} from it."
+ (mlet* %store-monad
+ ((drv (gexp->derivation
+ name
+ (gexp (with-output-to-file (ungexp output)
+ (lambda ()
+ (write (eval (quote (ungexp exp)) (current-module))))))
+ #:local-build? #t
+ #:substitutable? #f))
+ (_ (built-derivations (list drv))))
+ (return (call-with-input-file (derivation->output-path drv) read))))
+
(define* (text-file* name #:rest text)
"Return as a monadic value a derivation that builds a text file containing
all of TEXT. TEXT may list, in addition to strings, objects of any type that
--
2.13.3