<div>Hello, all. I decide to write parallel ray tracer on haskell with repa. Now, to save repa array to file I use dirty trick casting repa array ptr to bytestring with fromForeignPtr and then writing it to file with hPut. It looks something like that:<br></div><div><br></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">import qualified Data.Array.Repa as R</span><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">import qualified Data.Array.Repa.Repr.ForeignPtr as RF</span><br></div><div><br></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">import qualified Data.ByteString as B<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">import qualified Data.ByteString.Char8 as BC<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">import qualified Data.ByteString.Internal as BI</span><br></div><div><br></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">type Image = Array F DIM2 Pixel<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">writeImage :: FilePath -> Image -> IO ()<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">writeImage path img = bracket (openFile path WriteMode) (hClose) $ \hdl -> B.hPut hdl header >> B.hPut hdl body<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">  where Z :. h :. w = R.extent img<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">        header = BC.pack $ "P6\n" ++ show w ++ ' ':show h ++ "\n255\n"<br></span></div><div><span style="font-family: menlo, consolas, courier new, monospace, sans-serif;">        body = BI.fromForeignPtr(castForeignPtr $ RF.toForeignPtr img) 0 (w*h*3)</span><br></div><div><br></div><div>My question is: how to write repa array to file safely and fast?<br></div>