for this function:
inline <reified T> fun foo(arg: T): T = TODO()
// T is Int absoutly.
inline <reified T : Int> fun foo(arg: T): T = arg + 1
// I am confuse that: Should the return value type be changed?
inline <reified T : Either<L, R>> fun foo(arg: T): L? =
if (arg.isLeft) (arg as Left).a else null