<div dir="ltr"><div><font face="arial, sans-serif"><br></font></div><font face="arial, sans-serif">> <span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap">  how I've </span><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap">found perversely delightful ways to use the C preprocessor. Especially </span><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap">token-pasting.</span></font><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">Then boy! do I have an offer for you/you'll be like a pig in muck.</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">There's a Haskell compiler written in C++, using all the tricks you love:</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">* #define nested inside #if, so you're never quite sure which version of a macro is in play.</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">* #defines that expand to a series of assignments and routine calls.</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">* Module-wide and global variables that get updated as side-effects of routine calls</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">  (as well as those routines passing back results)</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif">* All data structures being cons pairs deeply nested, typically routines poke into hd(hd(tl(e))) or some such.</font></span></div><div><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></span></div><div><font face="arial, sans-serif"><span style="color:rgb(0,0,0);font-size:1em;white-space:pre-wrap">Someone's generously put the source online </span><a href="https://github.com/FranklinChen/hugs98-plus-Sep2006/tree/master/src">https://github.com/FranklinChen/hugs98-plus-Sep2006/tree/master/src</a></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">You can load it up into Visual Studio, and produce a genuine Windows executable with a Haskell REPL. (Ah, silly me, of course you'd want the familiar *nix command line -- that's even easier.)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">And there's real work you could contribute to <a href="https://mail.haskell.org/pipermail/hugs-bugs/2021-October/thread.html">https://mail.haskell.org/pipermail/hugs-bugs/2021-October/thread.html</a></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Enjoy!</font></div><div><span style="font-family:Arial,Helvetica,sans-serif"><br></span></div></div>