Why were structural records removed?

They had three usability problems:

  1. The fields had to be in the exact same order every time you constructed an instance of the record. This is because the compiler needed a canonical ordering.

  2. They could not be recursive without the compiler doing fancy typechecking (coinductive IIRC), which was felt to be not worth the effort.

  3. Field-level privacy can’t work with them.