This is because Julia's types are invariant (it's easy to find in the documentation once you know what to look for):
g{S<:AbstractString}(s::Vector{S}) = println("here!") On Wed, 2016-02-10 at 16:23, Ján Dolinský <jan.dolin...@2bridgz.com> wrote: > Hi, > > I am facing the following dispatch problem: > > typealias MyString AbstractString > > g(s::Vector{MyString}) = println("here!") > g(s::MyString) = println("there!") > > a = ["asd", "bvc", "qwerty"] > b = ["asdť", "bvc", "qwerty"] > > > println(typeof(a)) > Array{ASCIIString,1} > println(typeof(b)) > Array{UTF8String,1} > > julia> g(a) > ERROR: MethodError: `g` has no method matching g(::Array{ASCIIString,1}) > > julia> g(b) > ERROR: MethodError: `g` has no method matching g(::Array{UTF8String,1}) > > julia> g(b[2]) > there! > > julia> g(a[2]) > there! > > How do I make the method g(s::Vector{MyString}) accept both vector of > ASCIIString's or UTF8String's ? I expected the supertype AbstractString to > automatically match the both cases. > > Thanks, > Jan > > p.s. I am designing some functions that consumes filesystem paths. I assume, > it > is good idea to make those paths to be ::AbstractString ; I see many functions > related to filesystem in Julia manual to consume or return ::AbstractString