#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: "))))