haskell中的顶级可变变量

Ing*_*das 8 persistence haskell

我有一个C++程序多次调用我的Haskell程序.但是,第一次调用的一些数据需要保留用于后续调用.我知道Haskell默认不支持顶级可变变量,但我想我仍然需要这样的东西.(将我的状态写入文件并将其读回来会起作用,但我想要更原生的东西)

在hackage上我发现了像全局变量或安全全局变量的库,但它们看起来都很旧并且依赖于我已经使用过的旧版本的软件包.这个问题有规范的解决方案吗?

理想情况下,我想拥有顶级功能:

getState :: IO Mystate
writeState :: Mystate -> IO ()
Run Code Online (Sandbox Code Playgroud)

(我想我还应该提到一切都是在FFI的一次hs_init()调用中完成的,所以Haskell程序并没有在调用之间真正退出)

fir*_*dle 10

您可以创建一个全局可变变量:

myGlobalVar :: IORef Int
{-# NOINLINE myGlobalVar #-}
myGlobalVar = unsafePerformIO (newIORef 17)
Run Code Online (Sandbox Code Playgroud)

哈斯克尔维基 给出这个作为当前的标准溶液,同时讨论替代方案.