
On Tue, 06 Apr 2010 15:08:45 +0200, Heinrich Apfelmus
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 http://nicolaspouillard.fr