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

Nicolas Pouillard nicolas.pouillard at gmail.com
Tue Apr 6 09:23:09 EDT 2010

On Tue, 06 Apr 2010 15:08:45 +0200, Heinrich Apfelmus <apfelmus at quantentunnel.de> wrote:
> Jacques Carette wrote:
> > Jason Dagit wrote:
> >> Are you implying that template haskell is not typed?
> >
> > Indeed. [...]
> >
> > Compare with metaocaml where if you can compile you meta-program (i.e.
> > code generator), then you are guaranteed that it can only ever produce
> > valid, well-typed code.  Not so with TH, where you can easily generate
> > junk -- which GHC will promptly figure out  and give you an error.
> I'm curious, can metaocaml create new data type definitions, value
> declarations or type class instances? I usually use TH to get rid of
> boilerplate that I cannot get rid off in Haskell itself, for instance
> for creating functional lenses for record types
>     data Foo = Foo { bar_ :: Int, ...}
>     $(DeriveLenses Foo)
>     -- bar :: Lens Foo Int

No metaocaml cannot do this. It is restricted to the expression level, and
not the declaration level. Moreover you cannot pattern match over the
generated code.

> It seems to me that metaocaml is more used as "user annotated" partial
> evaluation?

That is a way to look at it.

Nicolas Pouillard

More information about the Haskell-Cafe mailing list