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