sig
  type 'a t
  module Always :
    sig
      type 'a t
      val of_typerep :
        'Typerep_lib.Std.Typerep.t -> 'Type_immediacy.Always.t option
      val int_as_value : 'Type_immediacy.Always.t -> int -> 'a option
      val int_as_value_exn : 'Type_immediacy.Always.t -> int -> 'a
      val int_is_value : 'Type_immediacy.Always.t -> int -> bool
      val value_as_int : 'Type_immediacy.Always.t -> '-> int
      module For_all_parameters_S1 :
        functor (X : Typerep_lib.Std.Typerepable.S1->
          sig val witness : unit -> 'X.t Type_immediacy.Always.t end
      module For_all_parameters_S2 :
        functor (X : Typerep_lib.Std.Typerepable.S2->
          sig val witness : unit -> ('a, 'b) X.t Type_immediacy.Always.t end
      module For_all_parameters_S3 :
        functor (X : Typerep_lib.Std.Typerepable.S3->
          sig
            val witness : unit -> ('a, 'b, 'c) X.t Type_immediacy.Always.t
          end
      module For_all_parameters_S4 :
        functor (X : Typerep_lib.Std.Typerepable.S4->
          sig
            val witness :
              unit -> ('a, 'b, 'c, 'd) X.t Type_immediacy.Always.t
          end
      module For_all_parameters_S5 :
        functor (X : Typerep_lib.Std.Typerepable.S5->
          sig
            val witness :
              unit -> ('a, 'b, 'c, 'd, 'e) X.t Type_immediacy.Always.t
          end
      val int : int Type_immediacy.Always.t
      val char : char Type_immediacy.Always.t
      val bool : bool Type_immediacy.Always.t
      val unit : unit Type_immediacy.Always.t
    end
  module Sometimes :
    sig
      type 'a t
      val of_typerep :
        'Typerep_lib.Std.Typerep.t -> 'Type_immediacy.Sometimes.t option
      val int_as_value : 'Type_immediacy.Sometimes.t -> int -> 'a option
      val int_as_value_exn : 'Type_immediacy.Sometimes.t -> int -> 'a
      val int_is_value : 'Type_immediacy.Sometimes.t -> int -> bool
      val value_as_int : 'Type_immediacy.Sometimes.t -> '-> int option
      val value_as_int_exn : 'Type_immediacy.Sometimes.t -> '-> int
      val value_is_int : 'Type_immediacy.Sometimes.t -> '-> bool
      module For_all_parameters_S1 :
        functor (X : Typerep_lib.Std.Typerepable.S1->
          sig val witness : unit -> 'X.t Type_immediacy.Sometimes.t end
      module For_all_parameters_S2 :
        functor (X : Typerep_lib.Std.Typerepable.S2->
          sig
            val witness : unit -> ('a, 'b) X.t Type_immediacy.Sometimes.t
          end
      module For_all_parameters_S3 :
        functor (X : Typerep_lib.Std.Typerepable.S3->
          sig
            val witness : unit -> ('a, 'b, 'c) X.t Type_immediacy.Sometimes.t
          end
      module For_all_parameters_S4 :
        functor (X : Typerep_lib.Std.Typerepable.S4->
          sig
            val witness :
              unit -> ('a, 'b, 'c, 'd) X.t Type_immediacy.Sometimes.t
          end
      module For_all_parameters_S5 :
        functor (X : Typerep_lib.Std.Typerepable.S5->
          sig
            val witness :
              unit -> ('a, 'b, 'c, 'd, 'e) X.t Type_immediacy.Sometimes.t
          end
      val option : 'a option Type_immediacy.Sometimes.t
      val list : 'a list Type_immediacy.Sometimes.t
    end
  module Never :
    sig
      type 'a t
      val of_typerep :
        'Typerep_lib.Std.Typerep.t -> 'Type_immediacy.Never.t option
      module For_all_parameters_S1 :
        functor (X : Typerep_lib.Std.Typerepable.S1->
          sig val witness : unit -> 'X.t Type_immediacy.Never.t end
      module For_all_parameters_S2 :
        functor (X : Typerep_lib.Std.Typerepable.S2->
          sig val witness : unit -> ('a, 'b) X.t Type_immediacy.Never.t end
      module For_all_parameters_S3 :
        functor (X : Typerep_lib.Std.Typerepable.S3->
          sig
            val witness : unit -> ('a, 'b, 'c) X.t Type_immediacy.Never.t
          end
      module For_all_parameters_S4 :
        functor (X : Typerep_lib.Std.Typerepable.S4->
          sig
            val witness : unit -> ('a, 'b, 'c, 'd) X.t Type_immediacy.Never.t
          end
      module For_all_parameters_S5 :
        functor (X : Typerep_lib.Std.Typerepable.S5->
          sig
            val witness :
              unit -> ('a, 'b, 'c, 'd, 'e) X.t Type_immediacy.Never.t
          end
      val int32 : int32 Type_immediacy.Never.t
      val int64 : int64 Type_immediacy.Never.t
      val nativeint : nativeint Type_immediacy.Never.t
      val float : float Type_immediacy.Never.t
      val string : string Type_immediacy.Never.t
      val array : 'a array Type_immediacy.Never.t
      val ref_ : 'Pervasives.ref Type_immediacy.Never.t
      val tuple2 : ('a * 'b) Type_immediacy.Never.t
      val tuple3 : ('a * 'b * 'c) Type_immediacy.Never.t
      val tuple4 : ('a * 'b * 'c * 'd) Type_immediacy.Never.t
      val tuple5 : ('a * 'b * 'c * 'd * 'e) Type_immediacy.Never.t
    end
  val of_typerep : 'Typerep_lib.Std.Typerep.t -> 'Type_immediacy.t
  type 'a dest =
      Always of 'Type_immediacy.Always.t
    | Sometimes of 'Type_immediacy.Sometimes.t
    | Never of 'Type_immediacy.Never.t
  val dest : 'Type_immediacy.t -> 'Type_immediacy.dest
  val int_as_value : 'Type_immediacy.t -> int -> 'a option
  val int_as_value_exn : 'Type_immediacy.t -> int -> 'a
  val int_is_value : 'Type_immediacy.t -> int -> bool
  val value_as_int : 'Type_immediacy.t -> '-> int option
  val value_as_int_exn : 'Type_immediacy.t -> '-> int
  val value_is_int : 'Type_immediacy.t -> '-> bool
end