sig
  exception Closed
  type 'a t = {
    put : '-> unit;
    get : unit -> 'a;
    close : unit -> unit;
    kill : unit -> unit;
  }
end