Module Debug.Make

Debug.Make produces a debug function used to wrap a function to display arguments before calling and display results after returning. Intended usage is:

module Foo = struct
  type t = ...
  let invariant = ...
    let bar t x y : Result.t = ...
end
module Foo_debug = struct
  open Foo
  include Debug.Make ()
  let debug x = debug invariant ~module_name:"Foo" x
  let bar t x y =
    debug "bar" [t] (t, x, y) <:sexp_of< t * X.t * Y.t >> <:sexp_of< Result.t >>
      (fun () -> bar t x y)
end

Parameters

Signature

val check_invariant : Base.Bool.t Base.Ref.t

Whether the invariants are called on each invocation.

val show_messages : Base.Bool.t Base.Ref.t

If true, you get a message on stderr every time debug is called.

val debug : 't Base.Invariant.t -> module_name:Base.String.t -> Base.String.t -> 't Base.List.t -> 'args -> ('args -> Sexp.t) -> ('result -> Sexp.t) -> (Base.Unit.t -> 'result) -> 'result

We avoid labels so that the applications are more concise -- see example above.