returning.rkt
#lang racket/base

(require (prefix-in log: (planet synx/log:1)))

(define returner
   (make-parameter
    (λ args
      (log:warning "Exiting via return (probably a bad idea!) ~s" args)
      (exit))))

(define (return . args) (apply (returner) args))

(define (returning-from thunk)
   (let/ec new-returner (parameterize ((returner new-returner)) (thunk))))

(provide return returning-from)