No, the building block is an interface for a collection that can
- either store a new value (eg
<: eltype
), - or allocate a new collection that can.
The caller determines if widening is needed, and calls itself accordingly. Just review “take 2” here, it is really short.