Thanks Aditya...I think that is what I am looking for.<br><br><div class="gmail_quote">On Mon, Jul 19, 2010 at 10:40 PM, aditya siram <span dir="ltr">&lt;<a href="mailto:aditya.siram@gmail.com">aditya.siram@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Sorry, the previous code does not compile. It should be:<br>
<div class="im">replace :: Int -&gt; [IORef (Int,Int,Int)] -&gt; (Int,Int,Int) -&gt; IO ()<br>
replace index pixels new_val = do<br>
  old_val &lt;- return $ pixels !! index<br>
  writeIORef old_val new_val<br>
<br>
print_pixels = mapM_ (\p -&gt; readIORef p &gt;&gt;= print)<br>
<br>
test_data :: [(Int,Int,Int)]<br>
test_data = [(1,2,3),(4,5,6),(7,8,9)]<br>
<br>
test_replace :: IO ()<br>
test_replace = do<br>
  pixels &lt;- mapM (newIORef) test_data<br>
  replace 1 pixels (10,11,12)<br>
  print_pixels pixels<br>
<br>
<br>
</div>in &quot;print_pixels&quot; &quot;mapM&quot; has been changed to &quot;mapM_&quot;<br>
-deech<br>
<div><div></div><div class="h5"><br>
On Mon, Jul 19, 2010 at 11:36 AM, aditya siram &lt;<a href="mailto:aditya.siram@gmail.com">aditya.siram@gmail.com</a>&gt; wrote:<br>
&gt; Do you want a solution like this?<br>
&gt;<br>
&gt; import Data.IORef<br>
&gt;<br>
&gt; replace :: Int -&gt; [IORef (Int,Int,Int)] -&gt; (Int,Int,Int) -&gt; IO ()<br>
&gt; replace index pixels new_val = do<br>
&gt;  old_val &lt;- return $ pixels !! index<br>
&gt;  writeIORef old_val new_val<br>
&gt;<br>
&gt; print_pixels = mapM (\p -&gt; readIORef p &gt;&gt;= print)<br>
&gt;<br>
&gt; test_data :: [(Int,Int,Int)]<br>
&gt; test_data = [(1,2,3),(4,5,6),(7,8,9)]<br>
&gt;<br>
&gt; test_replace :: IO ()<br>
&gt; test_replace = do<br>
&gt;  pixels &lt;- mapM (newIORef) test_data<br>
&gt;  replace 1 pixels (10,11,12)<br>
&gt;  print_pixels pixels<br>
&gt;<br>
&gt; GHCI Output:<br>
&gt; *Main&gt; test_replace<br>
&gt; (1,2,3)<br>
&gt; (10,11,12)<br>
&gt; (7,8,9)<br>
&gt; [(),(),()]<br>
&gt;<br>
&gt; This code takes a list of pixels and replaces the second pixel with<br>
&gt; the given value. In this case every pixel is of type IORef which is<br>
&gt; mutated in-place.<br>
&gt; -deech<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Jul 19, 2010 at 4:07 AM, C K Kashyap &lt;<a href="mailto:ckkashyap@gmail.com">ckkashyap@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Also, Claude ... If I am correct, in your example, there is no in-place<br>
&gt;&gt; replacement happening.<br>
&gt;&gt;<br>
&gt;&gt; On Mon, Jul 19, 2010 at 2:36 PM, C K Kashyap &lt;<a href="mailto:ckkashyap@gmail.com">ckkashyap@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Okay...I think I am beginning to understand.<br>
&gt;&gt;&gt; Is it right to assume that &quot;magic&quot; is backed by FFI and cannot be done in<br>
&gt;&gt;&gt; &quot;pure&quot; Haskell?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Mon, Jul 19, 2010 at 1:47 PM, Ketil Malde &lt;<a href="mailto:ketil@malde.org">ketil@malde.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; C K Kashyap &lt;<a href="mailto:ckkashyap@gmail.com">ckkashyap@gmail.com</a>&gt; writes:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; I looked at State Monad yesterday and this question popped into my<br>
&gt;&gt;&gt;&gt; &gt; mind.<br>
&gt;&gt;&gt;&gt; &gt; From what I gather State Monad essentially allows the use of Haskell&#39;s<br>
&gt;&gt;&gt;&gt; &gt; do<br>
&gt;&gt;&gt;&gt; &gt; notation to &quot;invisibly&quot; pass around a state. So, does the use of<br>
&gt;&gt;&gt;&gt; &gt; Monadic<br>
&gt;&gt;&gt;&gt; &gt; style fetch us more than syntactic convenience?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; At it&#39;s heart, monads are &quot;just&quot; syntactic convenience, but like many<br>
&gt;&gt;&gt;&gt; other syntactic conveniences, allows you to structure your code better.<br>
&gt;&gt;&gt;&gt; Thus it&#39;s more about programmer efficiency than program efficiency.<br>
&gt;&gt;&gt;&gt; (The &quot;do notation&quot; is syntactic sugar for &gt;&gt;= and &gt;&gt;).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Again, if I understand correctly, in Mutable Arrays also, is anything<br>
&gt;&gt;&gt;&gt; &gt; getting modified in place really? If not, what is the real reason for<br>
&gt;&gt;&gt;&gt; &gt; better<br>
&gt;&gt;&gt;&gt; &gt; efficiency?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; STArray and IOArrays are &quot;magic&quot;, and uses monads to ensure a sequence<br>
&gt;&gt;&gt;&gt; of execution to allow (and implement) in-place modification.  So this<br>
&gt;&gt;&gt;&gt; gives you better performance in many cases.  Don&#39;t expect this from<br>
&gt;&gt;&gt;&gt; generic monads.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; -k<br>
&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt; If I haven&#39;t seen further, it is by standing in the footprints of giants<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt;&gt;&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Regards,<br>
&gt;&gt;&gt; Kashyap<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Regards,<br>
&gt;&gt; Kashyap<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Regards,<br>Kashyap<br>