<p>You do not have to use computeIntoP. You can just use computeP followed by toForeignPtr (i don&#39;t remember the exact name for that and am on my phone so it would be awkward to look up). So Repa can create the buffer for you. Coincidentally, I didn&#39;t realize computeIntoP even existed, and I want it for what I&#39;m doing!</p>

<div class="gmail_quote">On Oct 10, 2012 7:55 AM, &quot;Janek S.&quot; &lt;<a href="mailto:fremenzone@poczta.onet.pl">fremenzone@poczta.onet.pl</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;m playing a bit with Repa library and its DevIL bindings. I tried to modify one of the examples<br>
from tutorial on HaskellWiki. I want to load an image, rotate it and save it to disk. I managed<br>
to write something like this:<br>
<br>
import Foreign.Ptr<br>
import System.Environment<br>
import Data.Array.Repa as R hiding ((++))<br>
import qualified Data.Array.Repa.Repr.ForeignPtr as RFP<br>
import Data.Array.Repa.IO.DevIL<br>
<br>
main = do<br>
    [f] &lt;- getArgs<br>
    (RGB v) &lt;- runIL $ readImage f<br>
    RFP.computeIntoP (RFP.toForeignPtr v) (rot180 v)<br>
    runIL $ writeImage (&quot;flip-&quot;++f) (RGB v)<br>
    return ()<br>
<br>
rot180 g = backpermute e flop g<br>
    where<br>
        e@(Z :. x :. y :. _)   = extent g<br>
        flop (Z :. i         :. j         :. k) =<br>
             (Z :. x - i - 1 :. y - j - 1 :. k)<br>
<br>
This is obviously wrong, because the foreign pointer used as a data source is at the same time<br>
used as destination, so the data gets overwritten before it is used. Does this mean that I have<br>
to allocate foreign memory buffers on my own? If so, than it feels kind of painfull to go through<br>
the hassle of allocating foreign pointers, converting between many different representations and<br>
so on. Am I doing something wrong and if not is there a more painless way of working with images<br>
and repa in Haskell?<br>
<br>
Jan<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>