Admin message

Due to a large amount of spam we do not allow new users to create repositories, they are "external" users. If you are a new user and want to create a repository, for example for forking GHC, open a new issue on ghc/ghc using the "get-verified" issue template

Back-end responsibilities are distributed throughout the compiler
A back end for GHC is described by a value of type `GHC.Driver.Backend.Backend`. This type is an enumeration type. The semantics of a particular value constructor is determined by code spread throughout the compiler: while it would be tedious to count exactly how many modules include a `case` discrimination on the `Backend` type, the `GHC.Driver.Backend` module is imported by over 20 other modules. This distributed semantics makes it a bit challenging to add a new value of `Backend` type, as is being contemplated for both JavaScript and WebAssembly targets. One possible remedy would be to keep the existing compiler structure as much as possible, but to make the `Backend` type abstract, centralizing all the `Backend`-dependent functionality in one module. Because of the potential for recursive imports, such a refactoring is not quite possible, but an approximation would probably be good enough.
issue