
Jason Dagit wrote:
While true, there are also 2 other reasons for meta-programmers are not all over Haskell: 1. efficiency nuts are already using C++ templates and don't see why they would switch, 2. people who care about types use a typed meta-language (like metaocaml) instead of an untyped template layer atop a (fantastic!) typed language.
Are you implying that template haskell is not typed?
Indeed. A template haskell meta-program is not typed at 'compile time' of the meta-program, but at 'run-time' of the splices. In other words, you can't typecheck a TH program without running it. You do get _some_ typing (because of the quotes have type Q Exp, Q [Dec] or Q Typ, but that is rather minimalistic. 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. But only 'late' in the process, which means that it can be fairly difficult to understand what the cause of the error really is. It's not nearly as bad as C++ templates, but it's well short of what metaocaml can do. Don't get me wrong - as a programming language, Haskell is still my favourite. It's just as a meta-programming language that it's not. [Unfortunately, I'm writing a lot of meta-programs these days !] Jacques