A simpler approach to #457

This fixes the case in the bug report, but doesn't fix the related case where `hasX` has a type with an open row. I'll work on that next.