store: Change 'store-lower' to preserve the original procedure's documentation.

* guix/store.scm (preserve-documentation): New procedure.
  (store-lift, store-lower): Use it.
This commit is contained in:
Ludovic Courtès 2015-01-18 17:38:15 +01:00
parent 561fb6c31f
commit 5808dcc27c

View File

@ -862,23 +862,26 @@ be used internally by the daemon's build hook."
(define-alias store-return state-return)
(define-alias store-bind state-bind)
(define (preserve-documentation original proc)
"Return PROC with documentation taken from ORIGINAL."
(set-object-property! proc 'documentation
(procedure-property original 'documentation))
proc)
(define (store-lift proc)
"Lift PROC, a procedure whose first argument is a connection to the store,
in the store monad."
(define result
(lambda args
(lambda (store)
(values (apply proc store args) store))))
(set-object-property! result 'documentation
(procedure-property proc 'documentation))
result)
(preserve-documentation proc
(lambda args
(lambda (store)
(values (apply proc store args) store)))))
(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))))
(preserve-documentation proc
(lambda (store . args)
(run-with-store store (apply proc args)))))
;;
;; Store monad operators.