sig
  type name = string list * string
  type query = string list
  val matches :
    ?group:bool ->
    q:Unmark.Benchmarks.query -> Unmark.Benchmarks.name -> bool
  type run = {
    suite : string;
    note : string;
    time : float;
    counters : (string * string option) list;
    benchmarks :
      (Unmark.Benchmarks.name * Unmark.Attr.t *
       Unmark.Measurement.sample list)
      list;
  }
  val run :
    ?probe:Unmark.Measurement.Probe.probe ->
    ?min_t:float ->
    ?min_s:int ->
    ?q:Unmark.Benchmarks.query ->
    ?note:string ->
    suite:string -> Unmark.bench list -> Unmark.Benchmarks.run
  module Run :
    sig
      val filter :
        ?q:Unmark.Benchmarks.query ->
        Unmark.Benchmarks.run -> Unmark.Benchmarks.run
      val add_json : Stdlib.Buffer.t -> Unmark.Benchmarks.run -> unit
      val of_json :
        string ->
        (Unmark.Benchmarks.run * string, [ `Msg of string ]) Stdlib.result
    end
  type 'a thunk
  val fold :
    bench:(Unmark.Benchmarks.name ->
           Unmark.Attr.t -> Unmark.Measurement.runnable -> 'r) ->
    group:(Unmark.Benchmarks.name -> 'r list Unmark.Benchmarks.thunk -> 'r) ->
    suite:('r list -> 'p) -> Unmark.bench list -> 'p
  val eval : 'Unmark.Benchmarks.thunk -> 'a
  val ( %% ) :
    ('-> 'b) -> 'Unmark.Benchmarks.thunk -> 'Unmark.Benchmarks.thunk
end