package incr_dom

  1. Overview
  2. Docs

All Incr_map functions take an optional instrumentation parameter that has type Instrumentation.t. A value of this type is a record containing a function which is polymorphic over a universally-quantified type 'a. This function is passed a unit -> 'a function, which must be immediately executed, and the result of which must be returned.

The function passed to the instrumentor will be doing the bulk of the work for the Incr_map function in question (usually a Map.fold_symmetric_diff).

You may want to use the Instrumentation API to assist in performance profiling like so:

let profile name =
  { Incr_map.Instrumentation.f = fun f ->
      let before = Time.now () in
      let r = f () in
      let after = Time.now () in
      let delta = Time.sub after before in
      printf "%s took %s" name (Time.Span.to_string_hum delta);
      r
  }
;;

Incr_map.map ~instrumentation:(profile "foo") ~f:map_foo
type t = {
  1. f : 'a. (unit -> 'a) -> 'a;
}