The fuzziness is this: what is a sharp criterion that tells you whether a type or function belongs in the “GHC-specific” part or the “pure library” part?
One possiblity is this. Consider an entity E, where “entity” means type, data constructor, class, or function.
- If GHC has specific knowlege of E, then E is GHC-specific. In GHC-jargon, these are the “wired-in” things and the “known-key” things.
- If a GHC-specific entity E’ depends on E, then E is also GHC-specific.
- Everything else is pure-library
I’m not sure if that’s enough, but it’s a start