let copy ?(copy=(fun x -> x)) a =
  { data = Array.map copy a.data; length = a.length; step = a.step }