
following the recent discussion, I would suggest to split the instances into three groups, in three separate modules: [standard]: fully implemented 'Data' instances (no runtime errors). [partial]: partially implemented instances (usually for abstract types,
If the Data class, your [standard] instances (including Ratio and Complex) and the instances for FFI pointer types are in base, then the packages you listed (array, bytestring, containers, haskell-src, network, packedstring and template-haskell) need no longer depend on syb, and syb need no longer be a boot package. That would give maximal freedom to develop syb independently, wouldn't it? (Changes to Data can't be independent of GHC, and the instances of the types listed are canonical, aren't they?)
This wouldn't allow you to hide the partial instances for the pointer types, but it would be hard to stop them leaking anyway, as they're used by several of the above packages.
That would be my guess, yes. It isn't quite "maximal" freedom because some of the things that one might want to improve would not even be in 'syb', but would stay in 'base'. But with all this surprising inertia, more freedom doesn't seem realistic anymore. Claus