What is the essential difference between those three different ways of declaring a function with abstract type in julia ?
Base.zero(::AbstractZero) = Zero()
Base.zero(::Type{<:AbstractZero}) = Zero()
Base.zero(::Type{T}) where T <: AbstractZero = Zero()