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