Use new elm interface to avoid unsafePerformIO

We now retrieve the interfaces within the IO monad here and pass them to pure functions, including the one for compilation of the program.