{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigkx7farqenzhemyq56pcfciscf6wn4fthw4nggfqqxu5ggis7vqu",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mnv4xy43zt32"
},
"path": "/t/haskells-missing-mutable-reference-type/14248#post_11",
"publishedAt": "2026-06-09T20:57:22.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"The Key Monad"
],
"textContent": "BurningWitness:\n\n> It’s mutating if you look at the flow imperatively, but that would be an implementation detail.\n\nThat’s a fine point of view. I don’t have a strong view on what “mutable” should mean, but I think it’s interesting to know that the fact that `IORef` is implemented by actually mutating the value stored in a piece of memory is also an implementation detail. According to The Key Monad it also has a completely pure implementation.\n\nBurningWitness:\n\n> My naive assumption is that a feature like this would be implemented by having every worker thread carry around a table of these kinds of references, and the size of the table would be determined at compilation time.\n\nAh right, the size doesn’t have to be determined up front. It can grow dynamically.",
"title": "Haskell's missing mutable reference type"
}