Predicate for checking wider subtype of `Integer`

question

#1

If T <: Integer and S <: Integer, how can I check that S is (weakly) wider than T?

Comparing typemax and typemin does not work because of BigInt. I could special-case BigInt, but then I would miss similar user-defined types (a theoretical concern ATM).


#2

Is this what you mean?

julia> <=(T,S) = begin; lt_eq = T === S; while !lt_eq && T != widen(T); T = widen(T); lt_eq = T === S; end; lt_eq; end
<= (generic function with 1 method)

julia> <=(Int,BigInt)
true

julia> <=(BigInt,BigInt)
true

julia> <=(BigInt,Int)
false

#3

Thanks! Perhaps

iswider(T,S) = S ≡ promote_type(T, S)

is even simpler and appears to work too.


#4

Yup there is also that :smile: