let mapi f ({ ar = ar } as ra) =
    let { ar = res_ar } as res = create_from ra in
    for i = 0 to res.vlix do
      Impl.unsafe_set res_ar i (f i (Impl.unsafe_get ar i))
    done;
    res