functor (E : Int_type->
  sig
    val ( + ) : E.t -> E.t -> E.t
    val ( - ) : E.t -> E.t -> E.t
    val ( * ) : E.t -> E.t -> E.t
    val ( / ) : E.t -> E.t -> E.t
    val ( % ) : E.t -> E.t -> E.t
    val ( /% ) : E.t -> E.t -> E.t * E.t
    val ( << ) : E.t -> int -> E.t
    val ( >> ) : E.t -> int -> E.t
    val ( ** ) : E.t -> int -> E.t
    val ( +. ) : E.t -> int -> E.t
    val ( -. ) : E.t -> int -> E.t
    val ( *. ) : E.t -> int -> E.t
    val ( /. ) : E.t -> int -> E.t
    val ( %. ) : E.t -> int -> int
    val ( /%. ) : E.t -> int -> E.t * int
    val ( +! ) : int -> int -> int
    val ( -! ) : int -> int -> int
    val ( *! ) : int -> int -> int
    val ( /! ) : int -> int -> int
    val ( %! ) : int -> int -> int
    val ( =. ) : E.t -> int -> bool
    val ( <>. ) : E.t -> int -> bool
    val ( <. ) : E.t -> int -> bool
    val ( <=. ) : E.t -> int -> bool
    val ( >. ) : E.t -> int -> bool
    val ( >=. ) : E.t -> int -> bool
    val ( =! ) : '-> '-> bool
    val ( <>! ) : '-> '-> bool
    val ( <! ) : '-> '-> bool
    val ( <=! ) : '-> '-> bool
    val ( >! ) : '-> '-> bool
    val ( >=! ) : '-> '-> bool
    val ( ~~ ) : E.tref -> E.t
  end