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