sig
  type 'a t
  val create : unit -> 'Service.t
  val accept : ('a, 'b) Session.st Service.t -> ('a, 'b) Session.st
  val request : ('a, 'b) Session.st Service.t -> ('b, 'a) Session.st
  val spawn : (('a, 'b) Session.st -> unit) -> ('a, 'b) Session.st Service.t
end