在 haskell 中,我需要一个全局变量,所以我选择使用 IORef 插槽,这是我的计划:
memo :: IORef Int
memo = unsafePerformIO $ newRefInt 9999
evaluate ARGs s = do
v <- Right $ unsafePerformIO $ readIORef memo
val <- Right $ VInt v
return $ (val, s)
evaluate (Call funcID exp) s = do
...
Right $ writeIORef memo 100
...
我的计划是当执行器评估“调用”节点时,它将参数保存到插槽中。然后,当评估“ARGs”节点时,将读取该备忘录槽。
但无论我做什么,我只能读取 9999 但不能将新值写入该插槽。
即使我尝试过:
memo :: IORef Int
memo = unsafePerformIO $ newRefInt 9999
evaluate ARGs s = do
Right $ writeIORef memo 100
v <- Right $ unsafePerformIO $ readIORef memo
val <- Right $ VInt v
return $ (val, s)
它仍然会导致备忘录 = 9999。为什么?