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:
parent
0c21d92b1c
commit
ada3df03e3
|
@ -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}).
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)))))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"))
|
||||||
|
|
Loading…
Reference in New Issue