This type

Extension methods aren’t polymorphic, and as you said, also requires you to expose state properties.

That’s interesting about abstract types in Scala. Certainly there are more powerful solutions than the one I suggested.