heatsink wrote:
> Is there a way, in template haskell, to find out what instance
> declarations exist? I'm not trying to accomplish anything specific
> right now, but I can see two potential uses for this. One is to emit
> compile-time error messages from TH code which would be more informative
> than the typechecker's output. The other is to produce TH functions
> that conditionally generate code depending on the instances satisfied by
> their arguments.
Apologies for becoming off-topic now, I've got nothing against template
haskell (TH), on the contrary, it is a great device to increase genericity.
But I want to warn about conditional code, because this may become a
nightmare to maintain. I.e. we (at Bremen) have (few) bits in TH that
check if we run under windows or unix (but no one knows if the windows
part is still working). Furthermore we support a few older (still
recent) ghc versions with conditional code (like ghc itself can be
bootstrapped with different older version).
Plugging in various libraries using Cabal is a nice feature, but imagine
if you would start to program depending on the currently installed
packages (and visible instances)! (Fortunately, this would be hard to do
currently.)
So (despite cabal and the desire for a minimal kernel) I hope that ghc
will continue to supply a large number of more or less "standard"
packages or modules that can safely be expected to exist in (almost)
every installation. (Therefore I've suggested to keep Data.Set and
Data.Map in the base package, but another "standard" package may be
fine, too). Otherwise truly application specific 3rd party cabal
packages may all come with their own "Prelude extensions" rather than
reusing increasingly solidified Haskell basics (that are hopefully not
disputed too much by the design of Haskell-Prime).
If you agree with me, great, ignore this posting.
Respectfully Christian