#lang plait
(define (done _) (error 'resume "nothing suspended."))
(define resumer (box done))
(define (resume)
(let ([next (unbox resumer)])
(begin
(set-box! resumer done)
(next 'dummy))))
(define (yield prompt)
(let/cc k
(begin (set-box! resumer k)
(error 'yield prompt))))
(define (output n) (error 'output (to-string n)))
(define (get-num prompt)
(begin
(yield "(resume) to continue")
(display prompt)
(s-exp->number (read))))
(define (example)
(output
(+ (get-num "First number: ")
(get-num "Second number: "))))