module Make: functor (M : sigend) -> sig .. end
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 : bool Pervasives.ref
val show_messages : bool Pervasives.ref
val debug : 't Invariant.t ->
       module_name:string ->
       string ->
       't list ->
       'args ->
       ('args -> Sexplib.Sexp.t) ->
       ('result -> Sexplib.Sexp.t) -> (unit -> 'result) -> 'result