sig
  type t = Validate.t
  type 'a check = '-> t
  val pass : t
  val fail : string -> t
  val fails : string -> '-> ('-> Sexplib.Sexp.t) -> t
  val of_list : t list -> t
  val name : string -> t -> t
  val name_list : string -> t list -> t
  val fail_fn : string -> 'a check
  val pass_bool : bool check
  val pass_unit : unit check
  val protect : 'a check -> 'a check
  val result : t -> unit Or_error.t
  val errors : t -> string list
  val maybe_raise : t -> unit
  val valid_or_error : '-> 'a check -> 'Or_error.t
  val field : 'record -> ('record, 'a) Fieldslib.Field.t -> 'a check -> t
  val field_folder :
    'record ->
    'a check -> t list -> ('record, 'a) Fieldslib.Field.t -> t list
  val all : 'a check list -> 'a check
  val of_result : ('-> (unit, string) Result.t) -> 'a check
  val of_error : ('-> unit Or_error.t) -> 'a check
  val booltest : ('-> bool) -> if_false:string -> 'a check
  val pair : fst:'a check -> snd:'b check -> ('a * 'b) check
  val list_indexed : 'a check -> 'a list check
  val list : name:('-> string) -> 'a check -> 'a list check
  val first_failure : t -> t -> t
  val of_error_opt : string option -> t
  val alist : name:('-> string) -> 'b check -> ('a * 'b) list check
end