~ruther/guix-local

dbbc248aeef1bc3b5d76268782acff43e9d71d57 — Ludovic Courtès 10 years ago 3b6eddb
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.
2 files changed, 7 insertions(+), 5 deletions(-)

M guix/monads.scm
M tests/monads.scm
M guix/monads.scm => guix/monads.scm +4 -4
@@ 239,10 239,10 @@ CONDITION is true, return *unspecified* in the current monad."
            (identifier? #'id)
            ;; Slow path: Return a closure-returning procedure (we don't
            ;; guarantee (eq? LIFTN LIFTN), but that's fine.)
            (lambda (liftn proc monad)
              (lambda (args ...)
                (with-monad monad
                  (return (proc args ...))))))))))))
            #'(lambda (proc monad)
                (lambda (args ...)
                  (with-monad monad
                    (return (proc args ...))))))))))))

(define-lift lift0 ())
(define-lift lift1 (a))

M tests/monads.scm => tests/monads.scm +3 -1
@@ 95,10 95,12 @@

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