In the classic hand-rolled type eraser below, what role does the private `_Box`/`_AnyBox` abstract-class pattern play?
struct AnySequence2<Element>: Sequence {
private let _makeIterator: () -> AnyIterator<Element>
init<S: Sequence>(_ s: S) where S.Element == Element {
_makeIterator = { AnyIterator(s.makeIterator()) }
}
func makeIterator() -> AnyIterator<Element> { _makeIterator() }
}