monads: Hide 'derivation-expression' and 'lower-inputs'.

* guix/monads.scm: Unexport 'lower-inputs' and 'derivation-expression'.
  (text-file*): Add comment about the switch to 'gexp->derivation'.
  (lower-inputs): Add comment about its doom.
  (derivation-expression): Likewise.
* guix/gexp.scm (lower-inputs*): Rename to...
  (lower-inputs): ... this.  Update callers.
* tests/monads.scm (derivation-expression): New procedure.
* doc/guix.texi (The Store Monad): Use 'gexp->derivation' instead of
  'derivation-expression'.  Remove documentation of
  'derivation-expression'.
* guix/ui.scm (read/eval): Use THE-ROOT-MODULE so that macros are
  properly expanded.
* tests/guix-build.sh: Use 'gexp->derivation' instead of
  'derivation-expression'.monads: Hide 'derivation-expression' and 'lower-inputs'.
This commit is contained in:
Ludovic Courtès 2014-04-27 23:19:11 +02:00
parent 0c21d92b1c
commit ada3df03e3
6 changed files with 17 additions and 22 deletions

View File

@ -1868,11 +1868,12 @@ Consider this ``normal'' procedure:
Using @code{(guix monads)}, it may be rewritten as a monadic function: Using @code{(guix monads)}, it may be rewritten as a monadic function:
@c FIXME: Find a better example, one that uses 'mlet'.
@example @example
(define (sh-symlink) (define (sh-symlink)
;; Same, but return a monadic value. ;; Same, but return a monadic value.
(mlet %store-monad ((sh (package-file bash "bin"))) (gexp->derivation "sh"
(derivation-expression "sh" `(symlink ,sh %output)))) #~(symlink (string-append #$bash "/bin/bash") #$output)))
@end example @end example
There are two things to note in the second version: the @code{store} There are two things to note in the second version: the @code{store}
@ -1973,15 +1974,6 @@ directory of @var{package}. When @var{file} is omitted, return the name
of the @var{output} directory of @var{package}. of the @var{output} directory of @var{package}.
@end deffn @end deffn
@deffn {Monadic Procedure} derivation-expression @var{name} @var{exp} @
[#:system (%current-system)] [#:inputs '()] @
[#:outputs '("out")] [#:hash #f] @
[#:hash-algo #f] [#:env-vars '()] [#:modules '()] @
[#:references-graphs #f] [#:guile-for-build #f]
Monadic version of @code{build-expression->derivation}
(@pxref{Derivations}).
@end deffn
@deffn {Monadic Procedure} package->derivation @var{package} [@var{system}] @deffn {Monadic Procedure} package->derivation @var{package} [@var{system}]
Monadic version of @code{package-derivation} (@pxref{Defining Monadic version of @code{package-derivation} (@pxref{Defining
Packages}). Packages}).

View File

@ -66,10 +66,9 @@
(define raw-derivation (define raw-derivation
(store-lift derivation)) (store-lift derivation))
(define (lower-inputs* inputs) (define (lower-inputs inputs)
"Turn any package from INPUTS into a derivation; return the corresponding "Turn any package from INPUTS into a derivation; return the corresponding
input list as a monadic value." input list as a monadic value."
;; XXX: This is like 'lower-inputs' but without the "name" part in tuples.
(with-monad %store-monad (with-monad %store-monad
(sequence %store-monad (sequence %store-monad
(map (match-lambda (map (match-lambda
@ -101,7 +100,7 @@ The other arguments are as for 'derivation'."
(define %modules modules) (define %modules modules)
(define outputs (gexp-outputs exp)) (define outputs (gexp-outputs exp))
(mlet* %store-monad ((inputs (lower-inputs* (gexp-inputs exp))) (mlet* %store-monad ((inputs (lower-inputs (gexp-inputs exp)))
(sexp (gexp->sexp exp #:outputs outputs)) (sexp (gexp->sexp exp #:outputs outputs))
(builder (text-file (string-append name "-builder") (builder (text-file (string-append name "-builder")
(object->string sexp))) (object->string sexp)))

View File

@ -57,9 +57,7 @@
text-file* text-file*
package-file package-file
package->derivation package->derivation
built-derivations built-derivations)
derivation-expression
lower-inputs)
#:replace (imported-modules #:replace (imported-modules
compiled-modules)) compiled-modules))
@ -356,6 +354,7 @@ and store file names; the resulting store file holds references to all these."
(lambda (port) (lambda (port)
(display ,(computed-text text inputs) port)))) (display ,(computed-text text inputs) port))))
;; TODO: Rewrite using 'gexp->derivation'.
(mlet %store-monad ((inputs (lower-inputs inputs))) (mlet %store-monad ((inputs (lower-inputs inputs)))
(derivation-expression name (builder inputs) (derivation-expression name (builder inputs)
#:inputs inputs))) #:inputs inputs)))
@ -376,7 +375,7 @@ OUTPUT directory of PACKAGE."
(define (lower-inputs inputs) (define (lower-inputs inputs)
"Turn any package from INPUTS into a derivation; return the corresponding "Turn any package from INPUTS into a derivation; return the corresponding
input list as a monadic value." input list as a monadic value."
;; XXX: Should probably be in (guix packages). ;; XXX: This procedure is bound to disappear with 'derivation-expression'.
(with-monad %store-monad (with-monad %store-monad
(sequence %store-monad (sequence %store-monad
(map (match-lambda (map (match-lambda
@ -390,6 +389,7 @@ input list as a monadic value."
inputs)))) inputs))))
(define derivation-expression (define derivation-expression
;; XXX: This procedure is superseded by 'gexp->derivation'.
(store-lift build-expression->derivation)) (store-lift build-expression->derivation))
(define package->derivation (define package->derivation

View File

@ -241,7 +241,7 @@ interpreted."
str args))))) str args)))))
(catch #t (catch #t
(lambda () (lambda ()
(eval exp the-scm-module)) (eval exp the-root-module))
(lambda args (lambda args
(leave (_ "failed to evaluate expression `~a': ~s~%") (leave (_ "failed to evaluate expression `~a': ~s~%")
exp args))))) exp args)))))

View File

@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU # GNU Guix --- Functional package management for GNU
# Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> # Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
# #
# This file is part of GNU Guix. # This file is part of GNU Guix.
# #
@ -75,7 +75,8 @@ then false; else true; fi
# Invoking a monadic procedure. # Invoking a monadic procedure.
guix build -e "(begin guix build -e "(begin
(use-modules (guix monads) (guix utils)) (use-modules (guix gexp))
(lambda () (lambda ()
(derivation-expression \"test\" '(mkdir %output))))" \ (gexp->derivation \"test\"
(gexp (mkdir (ungexp output))))))" \
--dry-run --dry-run

View File

@ -108,6 +108,9 @@
guile))) guile)))
#:guile-for-build (package-derivation %store %bootstrap-guile))) #:guile-for-build (package-derivation %store %bootstrap-guile)))
(define derivation-expression
(@@ (guix monads) derivation-expression))
(test-assert "mlet* + derivation-expression" (test-assert "mlet* + derivation-expression"
(run-with-store %store (run-with-store %store
(mlet* %store-monad ((guile (package-file %bootstrap-guile "bin/guile")) (mlet* %store-monad ((guile (package-file %bootstrap-guile "bin/guile"))