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
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.