[Haskell-cafe] A restricted subset of CPP included in a revision
of Haskell 98
sven.panne at aedion.de
Sun Nov 5 08:32:40 EST 2006
[ I'm just working through a large backlog of mails, so the original message
is a bit old... :-) ]
Am Sonntag, 20. August 2006 22:37 schrieb Henning Thielemann:
> On Thu, 17 Aug 2006, Brian Smith wrote:
> I think there should be more effort to avoid CPP completely. My
> experiences with Modula-3 are, that you can nicely separate
> special-purpose stuff into modules which are included depending on some
> conditions. Say you want the same module both for Windows and Unix, you
> provide directories WIN32 and POSIX containing implementations with the
> same interface and then the make system can choose the appropriate
> directory. [...]
That's a nice theory, but this doesn't work in practice, at least not for me.
The problem in my OpenGL/GLUT/... bindings is that the calling convention to
the native libraries is different on Windows, and there is no "Haskell way"
to parametrize this. Therefore using a preprocessor is the only sane way I
see here. Having to duplicate e.g. 567 "foreign imports" just to avoid CPP in
the OpenGL package is a rather bad tradeoff IMHO. Almost everything is better
than redundancy, even CPP...
Another use of CPP in the OpenGL package is to access OpenGL extension entry
points. Here CPP is used to generate a 'foreign import "dynamic"' and two
Haskell functions per extension entry. Perhaps this could be done via TH, but
this would limit the portability, again a bad tradeoff.
I would be glad if there were other ways to achieve these things, but I fail
to see them.
More information about the Haskell-Cafe