Not sure if the title and/or nomenclature are correct, but I need to write 
a function that dispatches on the specific type "inner" type while ignoring 
the "outer" type. An example is probably worth a thousand words: This is 
the closest thing I can get that compiles but errors at runtime.

abstract Bar
abstract Foo{B<:Bar}

type Foo1{B<:Bar} <: Foo
    bar::B
end

type Foo2{B<:Bar} <: Foo
    bar::B
end

type Bar1 <: Bar
    x::Int
end
Bar1() = Bar1(1)

type Bar2 <: Bar
    x::Int
end
Bar2() = Bar2(2)

bar_type_str(foo::Foo{Bar1}) = "Bar1"
bar_type_str(foo::Foo{Bar2}) = "Bar2"

foo = Foo1(Bar1())
println(bar_type_str(foo))

The exact error I get is


*ERROR: `bar_type_str` has no method matching bar_type_str(::Foo1{Bar1})*
Is there a way I can achieve what I'm looking for, or perhaps a better way 
of accomplishing what I want to do. The only thing I can think of is to 
split the Foo and Bar type apart, which will be somewhat inelegant in my 
specific application.

Reply via email to