Anyone have any thoughts on this? What I'm trying to figure out is a way to dispatch on different elements all in the same collection, without declaring the collection to be of abstract type. Meaning `func(a::Foo)` and `func(a::Bar)` should be different, even though `Bar` and `Foo` have the same internal representation (should be no underlying difference in memory).
This boils down to wondering if having a collection of an unparametrized parametric type is better/different than just an abstract type. Reiterating my example from above: Option 1: abstract Root type Foo <: Root ... end type Bar <: Root ... end (the ... are the same for both Foo and Bar) Option 2: type Root ... end typealias Foo Root{:Foo} typealias Bar Root{:Bar} Would either option generate better code when iterating over a collection of `Root`? Or is `Root` in option 2 still treated the same as an abstract parameter (even though the internal structure is invariant among all parametrizations)?