首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IORef在Haskell中的行为

IORef在Haskell中的行为
EN

Stack Overflow用户
提问于 2021-12-17 09:44:10
回答 1查看 113关注 0票数 4

在GHCI (9.0.1版)中,以下是我所期望的:

代码语言:javascript
复制
ghci> import Data.IORef
ghci> ref <- newIORef ([] :: [Int])
ghci> modifyIORef ref (1:)
ghci> readIORef ref
[1]

但当我这样做的时候:

代码语言:javascript
复制
ghci> import Data.IORef
ghci> ref = newIORef ([] :: [Int])
ghci> ref >>= \r -> modifyIORef r (1:) 
ghci> ref >>= readIORef
[]

返回一个空列表,好像修改从未发生过一样。这一切为什么要发生?输出不应该一样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-17 10:48:00

编写ref = newIORef ...时,ref的类型是IO (IORef [Int]) (因为这是newIORef返回的类型)。每次执行该IO操作时(通过将其包含在GHCI计算的IO操作中),您将得到一个新的IORef。

相反,在编写ref <- newIORef时,您要求GHCI执行IO操作,生成一个IORef [Int],并将结果IORef保存到变量ref中。然后,您对其执行的所有后续操作都在同一个IORef上执行。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70391196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档