In our language we often run into a use case where a given type variable has both upper and lower bounds.
Given variable `a`, these bounds might be declared as such:
a :<=: ClassType(SomeClass)
a :>=: BottomClassType
In these cases, MPS occasionally behaves nondeterministically depending on the complexity/shape of the surrounding program, resolving either to the upper or lower bound (however it seems to generally prefer the lower bound). In this case, given that the lower bound is a fairly unspecified/useless type for a function argument, we would prefer to resolve to the upper bound.
I am fairly familiar with Kotlin's typesystem and the fact that it provides a way to resolve ambiguities using pull-up and push-down rules, as defined here: https://kotlinlang.org/spec/kotlin-type-constraints.html#finding-optimal-constraint-system-solution
Does MPS provide any functionality like this? If not, is there any way to help resolve this ambiguity manually? It is quite a frustrating issue as it makes fairly obvious inference into a bit of a debugging nightmare.