functor (Elt : Map.OrderedType->
  sig
    type elt = Elt.t
    type t
    val sample : ?rng:Gsl.Rng.t -> size:int -> t -> elt array
    val cumulative_probability : t -> n:elt -> float
    val probability : t -> n:elt -> float
    val create : (elt * float) array -> t
    val mle : elt array -> t
  end