Can we defer creating the `shape_array` until it's needed in `foreach_tile`?

Alternatively, can we do something like we do with `distarray.Slice` where we map over the original array, but change the extent we pass in to the user?