https://blog.cckim.cn/posts/type-compatibility-based-on-subtyping/