= Solution
The expression constructs a valid <iterator> object; it does not itself return the concatenated numeric or character values. The element types have a common supertype `AnyVal`, and covariance lets `Iterator[Int]` and `Iterator[Char]` serve as the two inputs to `ConcatIterator[AnyVal]`. In the ordinary Scala 2 typing of this expression, the common element type is `AnyVal`. One can make the intended widening explicit:
``
new ConcatIterator[AnyVal](
List(1, 2, 3).iterator,
List('a', 'b', 'c').iterator
)
``
\b[Successive calls return `1, 2, 3, 'a', 'b', 'c'`, then exhaustion.] Characters remain characters: viewing an existing <iterator> at a wider type does not convert its contents to <integer> character codes. No `next()` is invoked merely by constructing this adapter. The common-type argument uses <subtype polymorphism> and <covariant type parameters>, rather than requiring the two concrete input types to be equal.
Back to article page