Language extensions are a great way to control what language features are allowed in a production codebase. Here are some opinionated recommendations about language extensions that are generally in line with the principles of Simple Haskell. Note that this should not be considered an endorsement of any particular view, but rather an overview of some of the opinions that have been put forth by various community members. Each project will have unique needs, so you should not feel the need to observe any one set of recommendations religiously.
Here are some more general informational resources that provide information you can use in assessing language extensions.
- GHC Language Pragma History (useful for learning how long various extensions have been around)
- Stephen Diehl's Language Extension Roundup
Example HLint Configs
You can use HLint to enforce your team's language extension policy in CI. Here are some example HLint config files:
For more information on customizing these to suit the needs of your project see the HLint documentation.