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

Refactor `ModIface` serialisation to allow adding more deduplication tables
Split off from #24540, we propose to refactor the serialisation of `ModIface`. The main goal is to change `UserData`, which has special support for deserialising `Name`s and `FastString`s. See: ```haskell data UserData = UserData { -- for *deserialising* only: ud_get_name :: BinHandle -> IO Name, ud_get_fs :: BinHandle -> IO FastString, -- for *serialising* only: ud_put_nonbinding_name :: BinHandle -> Name -> IO (), -- ^ serialize a non-binding 'Name' (e.g. a reference to another -- binding). ud_put_binding_name :: BinHandle -> Name -> IO (), -- ^ serialize a binding 'Name' (e.g. the name of an IfaceDecl) ud_put_fs :: BinHandle -> FastString -> IO () } ``` This does not scale if we want to add more deduplication tables such as #24540. Moreover, a lot of these fields are populated by `undef`. This issue proposes to generalise `UserData` to allow arbitrary deduplication tables with minimal changes to the `Binary` class interface. We split `UserData` (and `BinHandle`) into `Read`/`Write`, allowing us to always keep only exactly the information we need. The second step is to generalise how `putWithTables` serialises deduplication tables, allowing us to conveniently add more deduplication tables later.
issue