Endpoints are represented as triples (fromStart, lo,
loInclusive) and (toEnd, hi, hiInclusive). If fromStart is
true, then the low (absolute) bound is the start of the
backing map, and the other values are ignored. Otherwise,
if loInclusive is true, lo is the inclusive bound, else lo
is the exclusive bound. Similarly for the upper bound.
Endpoints are represented as triples (fromStart, lo, loInclusive) and (toEnd, hi, hiInclusive). If fromStart is true, then the low (absolute) bound is the start of the backing map, and the other values are ignored. Otherwise, if loInclusive is true, lo is the inclusive bound, else lo is the exclusive bound. Similarly for the upper bound.