I guess these are very silly questions, but I can’t find the rationale for
factorial(::Int32) → Int64,
factorial(::UInt64) → UInt64 but
factorial(::UInt32) → Int64 (why not UInt64?)
lcm(::UInt16, ::Int64) and
lcm(::UInt32, ::Int64) both return
reduce(lcm, UInt16(1), Int64) → Int64 but
reduce(lcm, UInt32(1), Int64) → UInt64.
I guess there is some type widening happening, but why?