(define-library (picrin control list)
  (import (scheme base)
          (picrin control))

  (define unit list)

  (define (bind m f)
    (apply append (map f m)))

  (define-syntax reify
    (syntax-rules ()
      ((_ expr)
       (reset (unit expr)))))

  (define (reflect m)
    (shift k (bind m k)))

  (define zero '())

  (define plus append)

  (export unit
          bind
          zero
          plus
          reify
          reflect
          (rename reify for)
          (rename reflect in)
          (rename unit yield)))