If the language you want to generate code for is at the level of C--, then you could indeed use GHC's native code generator. There isn't an interface to it exposed by the GHC API, but you can use the interfaces directly: the AsmCodeGen module is the top-level of the native code generator, and basically takes Cmm (defined in module Cmm) and produces assembly code.
However, if you want to do this, I wonder whether you would be better off just using the real C-- compiler.
Ok, I gave it a spin, that was "interesting". Things I wrote down while looking at it that might be of interest to others: I tried to build with gcc 3.4.1 and it didn't work very well. Found a mail from November 2004 (<Message-Id: 419B599C.2020204@tzi.de>) which had the same problem. In a reply you said that it was the JMP_-macro in TailCall.h and changing the cast would make the warning go away. It did, however I think I messed up with something else since it made other problems appear. I reverted my changes and switched gcc instead. I had perl 5.005_03 first in my path, that made the splitter not work. Changing to a newer version made it work. Maybe a test could be added to configure to avoid too old versions of perl? All those "Bad eta expand" looks slightly scary when building for the first time. Found a mail from Simon Peyton Jones which made me less worried. Maybe it could be documented that those are expected in the building guide? The GHC commentary was written for pre-CMM NCG. I tried patching that while going through the code but I just ended up butchering the document to basically contain no information whatsoever. I'm not sure it's helpful at all in its current shape though, unfortunately. Needed a patch to build NCG. I tried to preserve as much of the previous structure in order to avoid introducing bugs, but I wasn't entirely successfull. I've attached the patch and would appreciate if someone could glance over it looking for obvious errors. With this patch a bunch of array tests with WAY=normal fails, all in the same way: Stack space overflow: current size 8388608 bytes. Use `+RTS -Ksize' to increase it. Didn't find any obvious reason for the failure. If anyone wants to look into it arr005.hs might be a good place to start. Did not check much of the other regression tests since the above failure seems pretty vital to the functioning of the compiler. / Peter