anchor.diff: +"### Continuation objects
  + 
  + The value given to the handler in [[call-with-prompt]], much like
  + the value captured by [[shift]], is not a coroutine: it is a
  + continuation object. Continuation objects (or just \"continuations\")
  + can be applied, much like functions, to continue their execution.
  +
  + They may also be given to [[call-with-prompt]]."
  +
   (import lua/coroutine c)
  +
  +(defun reify-continuation (coroutine) :hidden
  +  (setmetatable
  +    { :tag "continuation"
  +      :thread coroutine }
  +    { :--pretty-print (const "«continuation»")
  +      :__call (lambda (k &args)
  +                (apply continue (cons (.> k :thread)
  +                                      args))) }))
   
   (defun call-with-prompt (prompt-tag body handler)
     "Call the thunk BODY with a prompt PROMPT-TAG in scope. If BODY
  
positive.code:                 (>= (n err) 2)
                  (eq? (car err) :abort))
             (if (eq? (cadr err) prompt-tag)
               (handler k (cddr err))
               (abort-to-prompt (cadr err) (unpack (cddr err) 1
                                                   (n (cddr err)))))]
            [(! ok)
  
negative.code:    ```"
    (let* [(k (cond
                [(= (type body) "thread") body]
                ; we reify the continuation before handing it off to the
                ; handler anyway
                [(= (type body) "continuation") (.> body :thread)]
                [(= (type body) "function") (c/create body)]
                [true (error! (.. "expected a coroutine or a function, got " (type body)))]))
           (last-res nil)]
  