Hello all, It turns out that Guile's built-in 'delay' and 'force' support multiple values properly, but the ones from SRFI-45 do not. --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (define promise (delay (values 1 2))) scheme@(guile-user)> (force promise) $1 = 1 $2 = 2 scheme@(guile-user)> ,use (srfi srfi-45) scheme@(guile-user)> (define promise (delay (values 1 2))) scheme@(guile-user)> (force promise) $3 = 1 --8<---------------cut here---------------end--------------->8--- Here's a small patch to fix that. More specifically, it extends 'eager' to accept any number of arguments, so it can be used just like 'values'. (That's the only way to do it without making 'eager' a macro). It changes the expansion of the 'delay' macro, but in a backward-compatible way: existing compiled code that was expanded from the old version of the SRFI-45 'delay' macro will continue to work, but will only keep the first value. Freshly compiled code will support multiple values. --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> ,use (srfi srfi-45) scheme@(guile-user)> (define promise (delay (values 1 2))) scheme@(guile-user)> (force promise) $1 = 1 $2 = 2 scheme@(guile-user)> (define promise (eager 1 2)) scheme@(guile-user)> (force promise) $3 = 1 $4 = 2 --8<---------------cut here---------------end--------------->8--- Any objections to pushing this to stable-2.0? Mark