lambda1@tg says to YSITD subtyping, yes, or we can just use typeclasses, which is to say we can make ad hoc polymorphism less ad hoc