The issues I've seen are around super-intervals (if that's the right word), e.g., batches being a superset of timestamps.  Would it make sense to optimize around this?

For example, something like:

def toIntervalOf[U](implicit mapping: Injection[T, Interval[U]]): Interval[U]

Maybe it should be abstracted a different way though, to more simply handle cases like going from timestamp back to batch.