Finish the sized primitives work
For a long time GHC had no first-class sized integer types. While `Word8` existed, it was merely a wrapper around `Word#` with the invariant that the value was a byte. This changed in 2c959a1894311e59cd2fd469c1967491c1e488f3 and 36fcf9edee31513db2ddbf716ee0aa79766cbe69 with the introduction of `{Word,Int}{16,32}#`, giving us a full complement of sized integer types.
In !4390 we adjusted the lifted `Data.Int` and `Data.Word` types to use their sized unlifted types (e.g. `Word8#`) instead of their word-sized brethren (e.g. `Word#`). However, this is just the first step of this process. There are a variety of knock-on effects that will also need to be pushed forward,
* [x] `readWord8OffAddr#` and friends still return unsized results (!4492)
* [x] `indexWord8OffAddr#` and friends still return unsized results (!4492)
* [x] `writeWord8OffAddr#` and friends still take unsized arguments (!4492)
* [x] the type mappings `INT_VECTOR_TYPES` and `WORD_VECTOR_TYPES` defined in `primops.txt.pp` still used unsized types (!4492)
* [x] the `ByteArray#` operations still use unsized types (!4492)
* [x] we do not use binary operations (e.g. `+#`, `and#`) for the sized types (!5261, !5262, !4717)
Also
* [x] 64-bit types are annoying to work with because CPP. (!3658, has its own issues too.)
issue