let rec v_neg v = match v with
        |N i -> return_N (-i)
        |R f -> return_R (-.f)
        |Vec (size, vec) -> make_vector size (fun i -> v_neg (vec i))
        |Zero -> Zero
        |W -> fail