Using leaky abstractions is another example of what never works. And representing a dependency graph as a sequence is a leaky abstraction: if A is above B, this means that A_does not_ depend on B, but not that B depends on A.

As for “defaults matter” — agree with this, but it also matters how far do you want to go with enforcement of something you think is right. If you are wrong about what’s right, a few limitations you put will reject a large group of others who don’t think the same way you do.

IMO, a good policy in this case is to give community a chance to decide what to prefer — e.g. by a project-level option telling whether an order is explicitly defined, or F# should figure it out. And only after A/B testing make a decision with such a significant impact (or simply keep the both options, if there will be a kind of split).

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store