Consider: julia> abstract A{T}
julia> type B{X, Y} <: A{typejoin(X, Y)} x::X y::Y end julia> super(typeof(B(1, "a"))) A{ASCIIString} julia> super(typeof(B("a", 1))) A{Int64} Which is odd. And, julia> type C{X} <: A{super(X)} x::X end ERROR: `super` has no method matching super(::Type{X}) Which I could not understand, X seems to be treated as something that exists when the type declaration is interpreted... How does Julia deal with expressions in place of super type parameters? If possible, I would like to dispatch on the typejoin of `X` and `Y` in `B{X, Y}`. How can I do this? Thanks, Shashi