我可以在运行时(使用插件)从字符串编译haskell函数吗?

我可以在运行时(使用插件)从字符串编译haskell函数吗?,haskell,dynamic,ghc,hotswap,ghc-api,Haskell,Dynamic,Ghc,Hotswap,Ghc Api,我有一个应用程序,由于各种原因,我需要运行用户提供的任意代码。(SafeHaskell让这一切变得美好而安全)。我看过插件包,它非常适合从光盘上的.hi文件加载 然而,对于我的程序设计来说,如果我能将这些用户程序存储在数据库中,然后直接将它们编译成我可以在程序中使用的函数,那将是非常理想的 因此,如果我正在编译的函数具有以下类型: someFunction :: MyIn -> MyOut 我希望编写一些函数,从字符串生成该函数: hotCompile :: String -> I

我有一个应用程序,由于各种原因,我需要运行用户提供的任意代码。(SafeHaskell让这一切变得美好而安全)。我看过插件包,它非常适合从光盘上的.hi文件加载

然而,对于我的程序设计来说,如果我能将这些用户程序存储在数据库中,然后直接将它们编译成我可以在程序中使用的函数,那将是非常理想的

因此,如果我正在编译的函数具有以下类型:

someFunction :: MyIn -> MyOut
我希望编写一些函数,从字符串生成该函数:

hotCompile :: String -> IO (MyIn -> MyOut)
其中字符串包含“someFunction”的haskell代码

有人知道有没有办法做到这一点,最好是使用插件包?我对GHCAPI有一点了解,但我不太了解它,也不知道它与此有什么关系


请注意,我尝试过提示,但它不适合我的应用程序,因为它不是线程安全的。

为什么不将
.hi
文件存储在数据库中?最坏的情况下,您可以对其进行base64编码,并以这种方式将其存储为字符串。您正在查找
hint
包。如果明天其他人还没有回答,我会抽出时间给出答案。我曾尝试过提示,但由于线程安全问题,它给了我随机的SEGFULTS。请编辑您的答案,添加有关
hint
(以及您尝试过的任何其他解决方案)
hint
不是线程安全的,尽管它的文档中有相反的声明——这完全是因为它所依赖的GHCAPI不是线程安全的。