I think this one works:
julia> const U = Union{Signed, Unsigned, AbstractFloat, AbstractIrrational, Rational}
Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}
julia> function mysum(x::T, y::V) where {T<:U,V<:U}
x + y
end
mysum (generic function with 1 method)
julia> mysum(2,3)
5
julia> mysum(2,3.2)
5.2
julia> mysum(2.2,3.2)
5.4
julia> mysum(2.2,3)
5.2
julia> mysum(2.2,true)
ERROR: MethodError: no method matching mysum(::Float64, ::Bool)
Closest candidates are:
mysum(::T<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}, ::V<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}) where {T<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}, V<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}} at REPL[2]:2
Stacktrace:
[1] top-level scope at none:0
julia> mysum(true,2.2)
ERROR: MethodError: no method matching mysum(::Bool, ::Float64)
Closest candidates are:
mysum(::T<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}, ::V<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}) where {T<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}, V<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}} at REPL[2]:2
Stacktrace:
[1] top-level scope at none:0
You can check methods:
julia> methods(mysum)
# 1 method for generic function "mysum":
[1] mysum(x::T, y::V) where {T<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}, V<:Union{AbstractIrrational, AbstractFloat, Signed, Unsigned, Rational}} in Main at REPL[2]:2