correct subtyping rules for type constructors