Run the compiler itself. This does not start a separate process; it's just a call to a Haskell function. This step always generates an 'interface file'Foo.hi, and depending on what flags you give, it also generates a compiled file: