functor (Data : DATA) ->
  sig
    module T :
      sig
        type t = Data.t = { cnt : int; exp : float; }
        val pp : Format.formatter -> t -> unit
        val show : t -> string
      end
    type t = T.t
    val create : cnt:int -> exp:float -> t
    val count : t -> int
    val expect : t -> float
    val update :
      cnt:int ->
      exp:float ->
      update_rule:Update_rules.Update_fn.t ->
      prior_count:('a -> int) ->
      prior_exp:('a -> float) -> 'a -> t option -> t
  end