sig
  module Toggle :
    sig
      type ('a, 'b) t =
        ('a, 'b) Error_check.Toggle.t = {
        assertion : '-> bool;
        fail_alert : '-> 'b;
        success_alert : '-> 'b;
        mutable success_last : bool;
      }
      val create :
        assertion:('-> bool) ->
        fail_alert:('-> 'b) -> success_alert:('-> 'b) -> ('a, 'b) t
      val check : ('a, 'b) t -> '-> 'b option
      val state : ('a, 'b) t -> bool
      val sexp_of_t : '-> '-> ('c, 'd) t -> Sexplib.Sexp.t
    end
  module ToggleN :
    sig
      type ('a, 'b) t =
        ('a, 'b) Error_check.ToggleN.t = {
        assertion : '-> bool;
        fail_alert : '-> 'b;
        final_fail_alert : '-> 'b;
        success_alert : '-> 'b;
        max_fail_alerts : int;
        mutable num_fail_alerts : int;
      }
      val create :
        assertion:('-> bool) ->
        fail_alert:('-> 'b) ->
        final_fail_alert:('-> 'b) ->
        success_alert:('-> 'b) -> max_fail_alerts:int -> ('a, 'b) t
      val check : ('a, 'b) t -> '-> 'b option
      val state : ('a, 'b) t -> bool
      val sexp_of_t : '-> '-> ('c, 'd) t -> Sexplib.Sexp.t
    end
  module Timer :
    sig
      type ('a, 'b) t =
        ('a, 'b) Error_check.Timer.t = {
        assertion : '-> bool;
        fail_alert : '-> 'b;
        success_alert : '-> 'b;
        min_alert_interval : Time.Span.t;
        mutable last_fail_alert_time : Time.t option;
      }
      val create :
        assertion:('-> bool) ->
        fail_alert:('-> 'b) ->
        success_alert:('-> 'b) ->
        min_alert_interval:Time.Span.t -> ('a, 'b) t
      val check : ('a, 'b) t -> '-> Time.t -> 'b option
      val state : ('a, 'b) t -> bool
      val sexp_of_t : '-> '-> ('c, 'd) t -> Sexplib.Sexp.t
    end
  module Step :
    sig
      type ('a, 'b, 'c) t =
        ('a, 'b, 'c) Error_check.Step.t = {
        initial_threshold : 'a;
        mutable threshold : 'a;
        loosen : '-> threshold:'-> 'a;
        assertion : '-> threshold:'-> bool;
        fail_alert : '-> 'c;
        success_alert : '-> 'c;
      }
      val create :
        threshold:'->
        loosen:('-> threshold:'-> 'a) ->
        assertion:('-> threshold:'-> bool) ->
        fail_alert:('-> 'c) -> success_alert:('-> 'c) -> ('a, 'b, 'c) t
      val check : ('a, 'b, 'c) t -> '-> 'c option
      val state : ('a, 'b, 'c) t -> bool
      val sexp_of_t : '-> '-> '-> ('d, 'e, 'f) t -> Sexplib.Sexp.t
    end
end