Hi All,
Currently there are three and a half major Haskell 98 platforms: the
GHC/Hugs combo, NHC98 and HBC. All of these have some extensions to the
official language, as well as extra libraries. Every platform has
existential type quantification, GHC/Hugs has multi-parameter type classes,
universal quantification (maybe NHC has that too - I don't have the
documentation at hand), Hugs has support for records, functional
dependencies and implicit parameters. A veritable plethora of features!
When I'm coding in Hugs I have a tendency to use all those sexy features
because I find them very useful. However, whenever I think about producing a
compiled version for multiple platforms, it makes me be very cautious in
actually using them. Currently, whenever I have a nice Module.hs that uses
implicit parameters I rename it to ImplicitModule.hs and write a
NormalModule.hs that doesn't. But sometimes, e.g. when using universal
quantification, this isn't possible. Also this limits my choice of
libraries: Swierstra's error correcting parser library uses universal
quantification in an essential way and so I can't use it for NHC at all, or
for HBC without (superficial) syntax changes.
I'm under the impression that Hugs has the most features (probably because
it's relatively easy to hack on, being an interpreter in C), GHC comes next
after that and tends to adopt features introduced in Hugs, and NHC and HBC
lag far behind that (no compiler wars please - each tool has its strength
and weaknesses and its niche).
So will the features of Hugs eventually be supported by all platforms and
integrated into a future version of Haskell or will I have to keep seperate
versions of my code?
All the best,
Jan de Wit