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