functor (M : BasicSig->
  sig
    type ('a, 'b) op_t0 = ('a, 'b) M.t
    val ( + ) : ('a, 'b) M.t -> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( - ) : ('a, 'b) M.t -> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( * ) : ('a, 'b) M.t -> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( / ) : ('a, 'b) M.t -> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( +$ ) : ('a, 'b) M.t -> '-> ('a, 'b) M.t
    val ( -$ ) : ('a, 'b) M.t -> '-> ('a, 'b) M.t
    val ( *$ ) : ('a, 'b) M.t -> '-> ('a, 'b) M.t
    val ( /$ ) : ('a, 'b) M.t -> '-> ('a, 'b) M.t
    val ( $+ ) : '-> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( $- ) : '-> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( $* ) : '-> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( $/ ) : '-> ('a, 'b) M.t -> ('a, 'b) M.t
    val ( = ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( != ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( <> ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( > ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( < ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( >= ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
    val ( <= ) : ('a, 'b) M.t -> ('a, 'b) M.t -> bool
  end