| | 7 | === Non-Obvious interdependencies === |
| | 8 | |
| | 9 | This is a list of interdependencies between seemingly unrelated parts that need to be taken into consideration: |
| | 10 | |
| | 11 | * class Monad mentions `String`, hence pulling Char |
| | 12 | * class Monad mentions `error` and `Data.Int` requires `throw DivideByZero`, hence pulling in exceptions |
| | 13 | * Exceptions pull in `Typeable` |
| | 14 | * `Typeable` pulls in `GHC.Fingerprint` |
| | 15 | * GHC.Fingerprint pulls in `Foreign` and `IO` |
| | 16 | |
| 11 | | Question: Do we want this to include Int and Integer? It is required for, e.g. length, but already includes assumptions about the target. But probably they’d need to go in here as well. |
| 12 | | |
| 13 | | Question: Any reason to keep Char and String separate? Maybe the requirement on the unicode data? Presumably there are interesting targets that do not need String (embedded devices), but what about functions like `error`? |
| 14 | | |
| 15 | | Answer: Probably not possible: The monad class needs String for `fail`, and also error for the default instance. Also there are classes (Exception) with Show class constraints. |
| 16 | | |
| 17 | | But: GHC.Unicode uses the FFI... |
| 18 | | |
| 19 | | |
| 20 | | What about `Data` and `Typeable`? Looks as if we can avoid them, but then `Data.Int` requires `throw DivideByZero` which in turn pulls in exceptions and hence `Typeable` |
| | 21 | By the list from above, this also needs to have `Char`, Exceptions, `Typeable` and from there much other stuff... |