RE: proposal: standardize interface to Haskell' implementations

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

Simon Marlow wrote:
Haskell doesn't do open-ended extensible types very well,
It would be great to change this (perhaps not for Prime, though). It would mean being able to write something like Dynamic without special language support and associated ugliness. See http://haskell.org/haskellwiki/Extensible_datatypes
participants (2)
-
Ashley Yakeley
-
Simon Marlow