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)?

Reply via email to