View for traversing a vector backwards
View for splitting a vector in half, non-recursively
View for splitting a vector in half, recursively
This allows us to define recursive functions which repeatedly split vectors
in half, with base cases for the empty and singleton lists.
Covering function for the SnocVect view
Constructs the view in linear time
Covering function for the Split view
Constructs the view in linear time
Covering function for the SplitRec view
Constructs the view in O(n lg n)