proposal: standardize interface to Haskell' implementations

Simon Marlow simonmar at microsoft.com
Mon Feb 20 11:33:57 EST 2006


On 12 February 2006 22:43, Claus Reinke wrote:

> [an innocent question on ghc-users just reminded me of another
>  missed opportunity in previous Haskell definitions: by chosing to
>  ignore the very idea of implementations, they have left tool
>  implementors in a limbo.]
> 
> these days, there is some momentum for providing Haskell with
> various tools for refactoring, documentation, profiling, tracing,
> instance generators, analyzers, pre-processors for extensions,
> editor modes, interactive interfaces (textual, graphical, visual),
> .. and even first ides, but all that is hampered by the lack of a
> standardized interface to functionality that exists in every single
> Haskell implementation: parsing, type checking, AST, (pretty
> printing,) semantic information, (evaluation).
> 
> that functionality is common to most tools, hard (and
> unneccessary) work to reimplement, and almost impossible to
> keep up to date, diverting precious man-power from small teams
> trying to provide much needed tools.
> 
> all we have at the moment is the haskell-src part of the libraries
> Language.Haskell.{Parser,Pretty,Syntax), and some Hugs- or
> GHC-specific APIs (Hugs Server API, package GHC), or other
> frontends like Programatica, etc..
> 
> compare that with Lisp, Smalltalk, SML/NJ and the like, where
> reflection support means that tool builders get a fantastic head
> start by being able to reuse available implementation functionality.

You don't say what you don't like about the existing Language.Haskell.*
libraries - on the face of it, don't they at least fulfill the
requirements for a re-usable Haskell AST, parser, and pretty-printer?
That's what they were intended to be, because we recognised the
importance of having this a long time ago.

I'll start to answer my own question: no they don't fulfill the
requirements.  Not many projects *use* Language.Haskell.*.  Why is that?
One very good reason is that the AST isn't at all extensible, and
everyone wants to extend Haskell.  Even in Haddock, I couldn't use
Language.Haskell.Syntax because I wanted to add annotations to the AST.
Later on I wanted to add GHC extensions too.  So the programmatica
project started with Language.Haskell.Syntax and made it extensible
(that's my understanding - please correct me if I got the history
wrong).  Also, we now have haskell-src-exts which is haskell-src + (some
fixed set of extensions).

So if you standardise the AST, I'm pretty sure it has to be extensible
to be useful.  It seems hard to do a good job of this: Haskell doesn't
do open-ended extensible types very well, the programatica solution is
neat but a little unweildy if you ask me.

I'm not entirely sure why you're using the term "reflection" here - I
suppose there's some overlap in that you might want to obtain the AST of
the data declaration for a particular type at runtime, but mostly I
think runtime reflection is separate from a reusable front-end.  The
Data.Generics library does a pretty good job of reflection.

Standing back a little, I think this is an ideal candidate for a
standardisation process independent of Haskell' - it's too big a task to
squeeze into the Haskell' timeframe, and there are no dependencies that
prevent it from being separately defined.  It's just a library, after
all.

Cheers,
	Simon


More information about the Haskell-prime mailing list