Skip to content

Add MutInt#

One can use PrimVar Int from primitive, which is essentially a ByteArray# fitting one Int. That representation however has additional heap object and need to follow a pointer on access. MutInt# would be mutable bits directly inside the object.

More generally, we could want to have a primitive for unboxed representations, say Ref#, generalising MutInt# and possible MutDouble#, MutWord# etc; but I think MutInt# is easier to implement, and enough for my current needs.

Also MutInt# can support operations like

casMutInt# :: MutInt# d -> Int# -> Int# -> State# d -> (# State# d, Int# #)

The more general Ref# could also have specialised versions like

casRefInt# :: Ref# d Int# -> Int# -> Int# -> State# d -> (# State# d, Int# #)
casRefInt8# :: Ref# d Int8# -> Int8# -> Int8# -> State# d -> (# State# d, Int8# #)
... -- like `casIntArray#` etc friends

but again, I think MutInt# is hopefully easier to implement; and if Ref# is later done too, one could change type MutInt# = Ref# Int#.

Edited by Oleg Grenrus
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information