I think it would be good to try to nail down the principles which have guided the development of PureScript so far, so that we can reference them.
After some discussion on Slack, we came up with these principles:
1. The compiler is not the place for preferences. That’s what tooling is for.
This principle could be rephrased as “be as unopinionated as possible about the way in which users use our tools”. It encourages us to push decisions downstream to tools and libraries, and to avoid a runtime or an enforced standard library.
2. The meaning of a composition of programs is the composition of their meanings.
This principle is nabbed from Conal Elliott’s type class morphisms work, but it is a nice way of summarizing “predictable codegen”. It also enables things like incremental compilation.
3. Prefer fewer, more powerful features, to many special-purpose ones.
Do you agree with these? What other principles do we want to keep?
Edit: here are some more, collected from the comments:
4. It is better if the compiler implementation is simple and easily understood, than to add many features of limited utility which might complicate the implementation.