I have an application where, for various reasons, I need to run arbitrary, user supplied code. (SafeHaskell makes this nice and secure). I've looked at the plugins package, which is really nice for loading from a .hi file on disc.
However, for my program design, it would be ideal if I could store these user programs in a database, then directly compile them to functions which I can use in my program.
So, if the function I'm compiling has the following type:
someFunction :: MyIn -> MyOut
I'm looking to write some function that will generate that function from a string:
hotCompile :: String -> IO (MyIn -> MyOut)
where string contains the haskell code code for "someFunction".
Does anybody know if there's a way to do this, preferably using the plugins package? I have come across the GHC API a little bit, but I don't know much about it and how it would relate to this.
Note that I've tried hint, but it is unsuitable for my application because it is not threadsafe.