todo comments and lose DiscreteRange<T, TRAITS>:: first/last