haskell中的顶级可变变量

时间:2014-06-04 09:53:19

标签: haskell persistence

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

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

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

getState :: IO Mystate
writeState :: Mystate -> IO ()

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

1 个答案:

答案 0 :(得分:10)

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

myGlobalVar :: IORef Int
{-# NOINLINE myGlobalVar #-}
myGlobalVar = unsafePerformIO (newIORef 17)

haskell wiki 将此作为当前的标准解决方案,同时也讨论替代方案。