functor (Event : Map.OrderedType->
  sig
    type event = Event.t
    type +'a t
    val empty : 'a t
    val add : event list -> '-> 'a t -> 'a t
    val remove : event list -> 'a t -> 'a t
    val fold : (event list -> '-> '-> 'b) -> 'a t -> '-> 'b
    val bindings : 'a t -> (event list * 'a) list
    type 'a resolver
    type 'a pack
    val pack : ('-> 'b) -> 'a t -> 'b pack
    val resolver : 'a pack list -> 'a resolver
    type 'a result = Accepted of '| Continue of 'a resolver | Rejected
    val resolve : event -> 'a resolver -> 'a result
  end