[Haskell-cafe] Re: Metaprogramming in Haskell vs. Ocaml

Jacques Carette carette at mcmaster.ca
Tue Apr 6 09:37:59 EDT 2010

One thing I should have mentionned - TH and camlp4 are really 
equivalents.  And camlp4 is as-typed-as TH (or not, depending on your 
point of view).  I am co-author of a camlp4 extension, and I must admit 
that coding in camlp4 was not enjoyable, while coding in metaocaml 
(eventually) is.

[I see that Nicolas Pouillard just answered the question about new type 
definitions, etc, as I was typing this answer]

Heinrich Apfelmus wrote:
> It seems to me that metaocaml is more used as "user annotated" partial
> evaluation?
I see most of my uses of metaocaml as code generation (building 'up' 
code from pieces by making explicit design choices) rather than 
classical partial evaluation (specializing code).  Others would argue 
that these two activities are really the same thing -- and I would not 
really disagree!  It's just that in my cases the 'specialization' is not 
driven by the partial evaluator at all, it is fully driven by the user 
[through explicit decisions of which modules/functors to use].  This 
requires a very different code organization, which is why I make the 
difference between the two approaches.

The Haskell analogy: I write tons and tons of typeclass-level 'code', 
including typeclasses for type constructors (and type constructor 
transformers and ...) but then I ensure that whenever these are used, it 
can be statically determined exactly which instance should be used, and 
100% of the dispatch overhead is eliminated AND I get full control over 
which methods get inlined in the final code.  It is that 'full control' 
aspect which gets you reliable efficiency from highly abstract code.


More information about the Haskell-Cafe mailing list