sig
  type t
  val make :
    [< `Array of int array
     | `Array32 of int32 array
     | `CurrentTime
     | `Seed of int
     | `Seed32 of int32 ] ->
    Mersenne.t
  val uint32 : Mersenne.t -> int32
  val int32 : Mersenne.t -> int32
  val uint64 : Mersenne.t -> int64
  val int64 : Mersenne.t -> int64
  val unativeint : Mersenne.t -> nativeint
  val nativeint : Mersenne.t -> nativeint
  val uint : Mersenne.t -> int
  val int : Mersenne.t -> int
  val real1 : Mersenne.t -> float
  val real2 : Mersenne.t -> float
  val real3 : Mersenne.t -> float
  val res53 : Mersenne.t -> float
  module IntSource :
    sig
      type t = int
      and state = t
      val genrand : state -> t
      val min : t
      val max : t
    end
  module Int32Source :
    sig
      type t = int32
      and state = t
      val genrand : state -> t
      val min : t
      val max : t
    end
  module FloatSource :
    sig
      type t = float
      and state = t
      val genrand : state -> t
      val min : t
      val max : t
    end
end