let monomial =
  let rec
    f = function
      a, d -> (* d >= 0 & not (eq_rat (a, cons_rat (", "))) *)
              if d = 0
                then cons_poly (a, null_poly ())
                else x_times (f (a, d - 1)) 
  in
    function
      a, d -> if d >= 0 & not (eq_rat (a, cons_rat ("0""1")))
                then f (a, d)
                else failwith ("monomial : requires a non-null coefficient as its first argument and a non-negative degree as its second one")