ExpressionProblem

ThoughtStorms Wiki

https://en.wikipedia.org/wiki/Expression_problem

In typical programming you have types and operations on those types (or classes and methods)

Most languages make it easier to extend one or the other. Either it's cheap to add new types, but expensive to add new operators which can apply to all those types. Or vice versa.

Making both equally cheap is hard.

Basically we are trying to allow flexibility in two dimensions, one of which always ends up requiring work that is the order of magnitude of the other dimension. Eg. if you want to add a new method that covers 10 types, you have to add 10 new method implementations.