  Designing a language feature often requires a choice between several,
similarly expressive possibilities. Given that user studies are generally
impractical, we propose using stability as a way of making such decisions.
Stability is a measure of whether the meaning of a program alters under small,
seemingly innocuous changes in the code. Directly motivated by a need to pin
down a feature in GHC/Haskell, we apply this notion of stability to analyse
four approaches to the instantiation of polymorphic types, concluding that the
most stable approach is lazy (instantiate a polytype only when absolutely
necessary) and shallow (instantiate only top-level type variables, not
variables that appear after explicit arguments).
