[Haskell-cafe] Question on proper use of Data.IORef

Adam Smith unfactorable.polynomial at gmail.com
Fri Jun 22 17:37:59 CEST 2012


theValueRef isn't a pointer to theValue that you can use to somehow change
theValue (which is immutable).
theValueRef is a reference to a "box" that contains a totally separate,
mutable value.

When you use newIORef to create theValueRef, it's *copying* theValue into
the box. When you mutate theValueRef, you're mutating the value inside the
box - theValue remains unchanged.

Cheers,
Adam

On 22 June 2012 11:30, Captain Freako <capn.freako at gmail.com> wrote:

> Hi experts,
>
>
> I fear I don't understand how to properly use *Data.IORef*.
> I wrote the following code:
>
>
>   1 -- Testing Data.IORef
>   2 module Main where
>   3
>   4 import Data.IORef
>   5
>   6 bump :: IORef Int -> IO()
>   7 bump theRef = do
>   8     tmp <- readIORef theRef
>   9     let tmp2 = tmp + 1
>  10     writeIORef theRef tmp2
>  11
>  12 main = do
>  13     let theValue = 1
>  14     print theValue
>  15     theValueRef <- newIORef theValue
>  16     bump theValueRef
>  17     return theValue
>
>
> and got this, in ghci:
>
>
> *Main> :load test2.hs
> [1 of 1] Compiling Main             ( test2.hs, interpreted )
> Ok, modules loaded: Main.
> *Main> main
> 1
> *1*
>
>
> I was expecting this:
>
>
> *Main> :load test2.hs
> [1 of 1] Compiling Main             ( test2.hs, interpreted )
> Ok, modules loaded: Main.
> *Main> main
> 1
> *2*
>
>
> Can anyone help me understand what I'm doing wrong?
>
>
> Thanks!
> -db
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120622/a6634f4f/attachment.htm>


More information about the Haskell-Cafe mailing list