Haskell doesn't *need* preprocessors, but they sure make a lot of things easier. There are three I use regularly (c2hs, cpphs, noweb), and each serves a purpose which isn't directly supported by plain Haskell: c2hs -- Supports generating foreign function imports and wrappers based on C header files. This is simpler and less prone to cross-platform type errors than writing the declarations in Haskell, which generally requires a cpp-style #if..#else..#endif preprocessor anyway. cpphs -- The C preprocessor, adapted to Haskell syntax. I'd like to replace my uses of it with Template Haskell, but TH's limitation that its splices can't be defined in the same file make it (for my purposes) essentially useless. cpphs is text-based, which means you can glue together pretty much anything and let the compiler verify that it type-checks. noweb -- True literate programming (as opposed to .lhs verbose commenting), which allows sections of the source code to be re-arranged arbitrarily. I suppose it's possible in theory for a language to support this without a preprocessing step, but (to my knowledge) not even LISP derivatives do/can. On Thu, Jan 7, 2010 at 04:32, Johannes Waldmann <waldmann@imn.htwk-leipzig.de> wrote:
Dear all,
It's not exactly Haskell-specific, but ... I am trying to track down the origin of the proverb
"the existence (or: need for) a preprocessor shows omissions in (the design of) a language."
I like to think that in Haskell, we don't need preprocessors since we can manipulate programs programmatically, because they are data.
In other words, a preprocessor realizes higher order functions, and you only need this if your base language is first-order.
Yes, that's vastly simplified, and it does not cover all cases, what about generic programming (but this can be done via Data.Data) and alex/happy (but we have parsec) etc etc.
Best regards, J.W.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe