let from_list l sz d = let l = ref l in let f_init i = match !l with [] -> assert false | e::r -> l := r; e in {data = Array.init sz f_init; sz = sz; dummy = d}