monads: Fix 'liftN' fallback case.

Reported by Andy Wingo <wingo@igalia.com>.

* guix/monads.scm (define-lift) <fallback case>: Add missing #'.  Remove
  extra formal parameter.
* tests/monads.scm ("lift"): Add test with 'lift1' as a procedure.
This commit is contained in:
Ludovic Courtès 2015-09-04 18:31:06 +02:00
parent 3b6eddb2b2
commit dbbc248aee
2 changed files with 7 additions and 5 deletions

View File

@ -239,10 +239,10 @@ CONDITION is true, return *unspecified* in the current monad."
(identifier? #'id) (identifier? #'id)
;; Slow path: Return a closure-returning procedure (we don't ;; Slow path: Return a closure-returning procedure (we don't
;; guarantee (eq? LIFTN LIFTN), but that's fine.) ;; guarantee (eq? LIFTN LIFTN), but that's fine.)
(lambda (liftn proc monad) #'(lambda (proc monad)
(lambda (args ...) (lambda (args ...)
(with-monad monad (with-monad monad
(return (proc args ...)))))))))))) (return (proc args ...))))))))))))
(define-lift lift0 ()) (define-lift lift0 ())
(define-lift lift1 (a)) (define-lift lift1 (a))

View File

@ -95,10 +95,12 @@
(test-assert "lift" (test-assert "lift"
(every (lambda (monad run) (every (lambda (monad run)
(let ((f (lift1 1+ monad))) (let ((f (lift1 1+ monad))
(g (apply lift1 1+ (list monad))))
(with-monad monad (with-monad monad
(let ((number (random 777))) (let ((number (random 777)))
(= (run (>>= (return number) f)) (= (run (>>= (return number) f))
(run (>>= (return number) g))
(1+ number)))))) (1+ number))))))
%monads %monads
%monad-run)) %monad-run))