Single dispatch
julia> using .MultipleDispatch
julia> f(A1)
"A1"
julia> f(A2)
"A2"
Multiple dispatch
julia> f(A1, A1)
"A1×A1"
julia> f(A1, A2)
"A1×A2"
julia> f(A2, A1)
"A2×A1"
julia> f(A2, A2)
"A2×A2"
Extending
struct A3 <: A end
MultipleDispatch.f(::Type{A3}) = "A3"
f(A1, A2, A3)