Looking at these `apply`s: maybe an ADT (sealed trait with 2 or 3 implementing model case classes) would better express the different possible content range types that we need to support?