summary refs log tree commit diff
path: root/guix/monads.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/monads.scm')
-rw-r--r--guix/monads.scm21
1 files changed, 15 insertions, 6 deletions
diff --git a/guix/monads.scm b/guix/monads.scm
index db8b645402..ec2b7f8b3b 100644
--- a/guix/monads.scm
+++ b/guix/monads.scm
@@ -56,10 +56,9 @@
             text-file
             text-file*
             package-file
+            origin->derivation
             package->derivation
-            built-derivations
-            derivation-expression
-            lower-inputs)
+            built-derivations)
   #:replace (imported-modules
              compiled-modules))
 
@@ -356,6 +355,7 @@ and store file names; the resulting store file holds references to all these."
        (lambda (port)
          (display ,(computed-text text inputs) port))))
 
+  ;; TODO: Rewrite using 'gexp->derivation'.
   (mlet %store-monad ((inputs (lower-inputs inputs)))
     (derivation-expression name (builder inputs)
                            #:inputs inputs)))
@@ -376,7 +376,7 @@ OUTPUT directory of PACKAGE."
 (define (lower-inputs inputs)
   "Turn any package from INPUTS into a derivation; return the corresponding
 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
     (sequence %store-monad
               (map (match-lambda
@@ -390,11 +390,15 @@ input list as a monadic value."
                    inputs))))
 
 (define derivation-expression
+  ;; XXX: This procedure is superseded by 'gexp->derivation'.
   (store-lift build-expression->derivation))
 
 (define package->derivation
   (store-lift package-derivation))
 
+(define origin->derivation
+  (store-lift package-source-derivation))
+
 (define imported-modules
   (store-lift (@ (guix derivations) imported-modules)))
 
@@ -410,10 +414,15 @@ input list as a monadic value."
                          (system (%current-system)))
   "Run MVAL, a monadic value in the store monad, in STORE, an open store
 connection."
+  (define (default-guile)
+    ;; Lazily resolve 'guile-final'.  This module must not refer to (gnu …)
+    ;; modules directly, to avoid circular dependencies, hence this hack.
+    (module-ref (resolve-interface '(gnu packages base))
+                'guile-final))
+
   (parameterize ((%guile-for-build (or guile-for-build
                                        (package-derivation store
-                                                           (@ (gnu packages base)
-                                                              guile-final)
+                                                           (default-guile)
                                                            system)))
                  (%current-system system))
     (mval store)))