functor (X : T->
  sig
    val ( % ) : X.t -> X.t -> X.t
    val ( /% ) : X.t -> X.t -> X.t
    val ( // ) : X.t -> X.t -> float
    val round :
      ?dir:[ `Down | `Nearest | `Up | `Zero ] ->
      X.t -> to_multiple_of:X.t -> X.t
    val round_towards_zero : X.t -> to_multiple_of:X.t -> X.t
    val round_down : X.t -> to_multiple_of:X.t -> X.t
    val round_up : X.t -> to_multiple_of:X.t -> X.t
    val round_nearest : X.t -> to_multiple_of:X.t -> X.t
  end