Comment
Comment by kibwen
Let's avoid using the term "subtyping", which as you say is irrelevant here. The reason you need diverging functions to satisfy arbitrary type obligations (i.e. to coerce to any other type) is because otherwise anything as simple as `let x = Some(42); x.unwrap();` just completely fails to compile, because `unwrap` is internally just:
...and this function couldn't otherwise typecheck because it doesn't return a `T` in the `None` branch. You need coercion here.