distinguish between take_view, which works on Input iterables, and slice_view, which needs Forward iterables