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