The GHC API requires that some initialisation occurs before invocation. Specifically, parseStaticFlags can only be called once.

I have functions that can call runGhc :: MaybeFilePath :: Ghc a -> IO a multiple times to run some GHC API methods. However, some of that initialisation should only occur the first time that function is called.

I seem to remember from Yi source that it is possible to create a global variable something like

However, I can not recall exactly how it is done. This code is in the runMonad function for the monad that wraps a GhcMonad. I am well aware that using unsafePerformIO is not pure or functional, but (at the time) this was the best way of achieving a practical result.