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:
parent
3b6eddb2b2
commit
dbbc248aee
|
@ -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))
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue