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@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe