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