sig
  type t
  type 'a check = 'a -> Validate.t
  val pass : Validate.t
  val fail : string -> Validate.t
  val fails : string -> 'a -> ('a -> Sexplib.Sexp.t) -> Validate.t
  val failf : ('a, unit, string, Validate.t) Pervasives.format4 -> 'a
  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 -> 'a Validate.check
  val pass_bool : bool Validate.check
  val pass_unit : unit Validate.check
  val protect : 'a Validate.check -> 'a 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 : 'a -> 'a Validate.check -> 'a Or_error.t
  val field :
    'record ->
    ('record, 'a) Fieldslib.Field.t -> 'a Validate.check -> Validate.t
  val field_folder :
    'record ->
    'a Validate.check ->
    Validate.t list -> ('record, 'a) Fieldslib.Field.t -> Validate.t list
  val all : 'a Validate.check list -> 'a Validate.check
  val of_result : ('a -> (unit, string) Result.t) -> 'a Validate.check
  val of_error : ('a -> unit Or_error.t) -> 'a Validate.check
  val booltest : ('a -> bool) -> if_false:string -> 'a Validate.check
  val pair :
    fst:'a Validate.check ->
    snd:'b Validate.check -> ('a * 'b) Validate.check
  val list_indexed : 'a Validate.check -> 'a list Validate.check
  val list :
    name:('a -> string) -> 'a 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:('a -> string) -> 'b Validate.check -> ('a * 'b) list Validate.check
end