Hi Maciej,<br><br>Thanks to have take some time to read this code.<br><br>I rewrite using your comments:<br><br>import Foreign<br>import Foreign.C<br><br>data CStruct = CStruct (CULong, CULong)<br><br>instance Storable CStruct where<br>
  sizeOf _ = 2*sizeOf (undefined::CULong)<br>  alignment _ = alignment (undefined::CULong)<br>  <br>test = with (CStruct (1,1)) (\ptr -&gt; return ())<br><br>The class Storable does not need to make your own peek and poke method (the class provide a default implementation).<br>
But with, i have still the behavior when I try this code in ghci.<br><br>Please, can you test this code and tell me why ghci stay blocked after executing the method test.<br><br>BR<br><br>Marco<br><br><div class="gmail_quote">
2010/2/6 Maciej Piechotka <span dir="ltr">&lt;<a href="mailto:uzytkownik2@gmail.com">uzytkownik2@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">On Sat, 2010-02-06 at 12:28 +0100, Marco De Oliveira wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; I try to initialize a C struct using the FFI API and ghc stays blocked<br>
&gt; when I execute my code (and I got sometimes the error &quot;out of<br>
&gt; memory&quot;).<br>
&gt; I do not understand, I do not find any mistake in my code:<br>
&gt;<br>
&gt; {-# OPTIONS -XTypeSynonymInstances #-}<br>
&gt;<br>
&gt; import Foreign.C.Types<br>
&gt; import Foreign.Marshal.Alloc<br>
&gt; import Foreign.Ptr<br>
&gt; import Foreign.Storable<br>
&gt;<br>
<br>
</div>It can be written as:<br>
import Foreign<br>
import Foreign.C<br>
<br>
&gt;<br>
&gt; type CStruct = (CULong, CULong)<br>
&gt;<br>
<br>
I guess that you may want to use newtype or data rather then type to<br>
avoid clashes (and have just 98 + FFI):<br>
<br>
newtype CStruct = CStruct (CULong, CULong)<br>
data CStruct = CStruct CULong CULong<br>
<div class="im"><br>
&gt; instance Storable CStruct where<br>
&gt;   sizeOf _ = 2*sizeOf (undefined::CULong)<br>
&gt;   alignment _ = alignment (undefined::CULong)<br>
&gt;<br>
<br>
</div>To begin with - where&#39;s peek and poke?<br>
<div class="im"><br>
&gt; test = alloca (\pStruct -&gt; do<br>
&gt;          poke pStruct ( (fromIntegral 1)::CULong, (fromIntegral<br>
&gt; 1)::CULong )<br>
&gt;          )<br>
<br>
</div>If you just do this at the beginning you may want to use with (notation<br>
as with newtype/data):<br>
<br>
with (CStruct (1, 1)) (\ptr -&gt; ...)<br>
<br>
<br>
Also is main = test?<br>
<div class="im">&gt; Thanks for your help.<br>
&gt;<br>
&gt; Marco<br>
<br>
</div>Regards<br>
<div><div></div><div class="h5"><br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br>