Multiple Dispatch seems to be acting odd on AbstractSparseMatrixCSC

If I recall correctly, multiple dispatch is supposed to select the most specific method available when calling a function.

In this case, when the Array type is specified as AbstractSparseMatrix, the specialization based on the value types works, but fails when using AbstractSparseMatrixCSC. Does anyone know if this is a bug or intended behavior?

using SparseArrays 

M = [sprand(rand(15:50), rand(15:50), 0.02) for i in 1:2500] #result of type Vector{SparseMatrixCSC{Float64, Int64}}
N = [i % 2 == 0 ? SparseMatrixCSC{Float32, Int32}(sprand(rand(15:50), rand(15:50), 0.02)) : sprand(rand(15:50), rand(15:50), 0.02) for i in 1:2500] #result of type Vector{SparseMatrixCSC}

funcA(X::SparseArrays.AbstractSparseMatrix...) = "generic"
funcA(X::SparseArrays.AbstractSparseMatrix{Tv, Ti}...) where {Tv, Ti} = "specific"

funcB(X::SparseArrays.AbstractSparseMatrixCSC...) = "generic"
funcB(X::SparseArrays.AbstractSparseMatrixCSC{Tv, Ti}...) where {Tv, Ti} = "specific"

funcA(M...) # returns specific
funcA(N...) # returns generic

funcB(M...) # returns generic, which is incorrect
funcB(N...) # returns generic

It appears I didn’t specify type parameters correctly, in this case using

funcB(X::SparseArrays.AbstractSparseMatrixCSC{Tv, Ti}...) where {Tv, Ti <: Integer} = "specific"

instead of

funcB(X::SparseArrays.AbstractSparseMatrixCSC{Tv, Ti}...) where {Tv, Ti} = "specific"

fixed it, dispatch is working correctly on all 4 cases

funcA(M...) # returns specific
funcA(N...) # returns generic

funcB(M...) # returns specific
funcB(N...) # returns generic