sig
  type rng_type =
      BOROSH13
    | COVEYOU
    | CMRG
    | FISHMAN18
    | FISHMAN20
    | FISHMAN2X
    | GFSR4
    | KNUTHRAN
    | KNUTHRAN2
    | KNUTHRAN2002
    | LECUYER21
    | MINSTD
    | MRG
    | MT19937
    | MT19937_1999
    | MT19937_1998
    | R250
    | RAN0
    | RAN1
    | RAN2
    | RAN3
    | RAND
    | RAND48
    | RANDOM128_BSD
    | RANDOM128_GLIBC2
    | RANDOM128_LIBC5
    | RANDOM256_BSD
    | RANDOM256_GLIBC2
    | RANDOM256_LIBC5
    | RANDOM32_BSD
    | RANDOM32_GLIBC2
    | RANDOM32_LIBC5
    | RANDOM64_BSD
    | RANDOM64_GLIBC2
    | RANDOM64_LIBC5
    | RANDOM8_BSD
    | RANDOM8_GLIBC2
    | RANDOM8_LIBC5
    | RANDOM_BSD
    | RANDOM_GLIBC2
    | RANDOM_LIBC5
    | RANDU
    | RANF
    | RANLUX
    | RANLUX389
    | RANLXD1
    | RANLXD2
    | RANLXS0
    | RANLXS1
    | RANLXS2
    | RANMAR
    | SLATEC
    | TAUS
    | TAUS_2
    | TAUS_113
    | TRANSPUTER
    | TT800
    | UNI
    | UNI32
    | VAX
    | WATERMAN14
    | ZUF
  type t
  external default : unit -> Gsl_rng.rng_type = "ml_gsl_rng_get_default"
  external default_seed : unit -> nativeint = "ml_gsl_rng_get_default_seed"
  external set_default : Gsl_rng.rng_type -> unit = "ml_gsl_rng_set_default"
  external set_default_seed : nativeint -> unit
    = "ml_gsl_rng_set_default_seed"
  external env_setup : unit -> unit = "ml_gsl_rng_env_setup"
  val make : Gsl_rng.rng_type -> Gsl_rng.t
  external set : Gsl_rng.t -> nativeint -> unit = "ml_gsl_rng_set"
  external name : Gsl_rng.t -> string = "ml_gsl_rng_name"
  external get_type : Gsl_rng.t -> Gsl_rng.rng_type = "ml_gsl_rng_get_type"
  external max : Gsl_rng.t -> nativeint = "ml_gsl_rng_max"
  external min : Gsl_rng.t -> nativeint = "ml_gsl_rng_min"
  external memcpy : Gsl_rng.t -> Gsl_rng.t -> unit = "ml_gsl_rng_memcpy"
  external clone : Gsl_rng.t -> Gsl_rng.t = "ml_gsl_rng_clone"
  external dump_state : Gsl_rng.t -> string * string
    = "ml_gsl_rng_dump_state"
  external set_state : Gsl_rng.t -> string * string -> unit
    = "ml_gsl_rng_set_state"
  external get : Gsl_rng.t -> nativeint = "ml_gsl_rng_get"
  external uniform : Gsl_rng.t -> float = "ml_gsl_rng_uniform"
  external uniform_pos : Gsl_rng.t -> float = "ml_gsl_rng_uniform_pos"
  external uniform_int : Gsl_rng.t -> int -> int = "ml_gsl_rng_uniform_int"
    "noalloc"
  external uniform_arr : Gsl_rng.t -> float array -> unit
    = "ml_gsl_rng_uniform_arr" "noalloc"
  external uniform_pos_arr : Gsl_rng.t -> float array -> unit
    = "ml_gsl_rng_uniform_pos_arr" "noalloc"
end