<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">On 10 January 2011 16:36, Antoine Latter &lt;<a href="mailto:aslatter@gmail.com">aslatter@gmail.com</a>&gt; wrote:<br>

<br>
&gt; On Mon, Jan 10, 2011 at 10:17 AM, Aaron Gray &lt;<a href="mailto:aaronngray.lists@gmail.com">aaronngray.lists@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt; &gt; On 10 January 2011 16:13, Daniel Fischer &lt;<br>
&gt; <a href="mailto:daniel.is.fischer@googlemail.com">daniel.is.fischer@googlemail.com</a>&gt;<br>
&gt; &gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On Monday 10 January 2011 16:45:36, Aaron Gray wrote:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; This is interesting, what does the following line do :-<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;     data Int24 = I24# Int# deriving (Eq, Ord)<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; regarding the I24# and Int#, are these inbuilt ?<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Int# is the raw machine int (4 or 8 bytes) and I24# is the constructor.<br>
&gt; &gt;&gt; GHC<br>
&gt; &gt;&gt; uses the magic hash &#39;#&#39; to denote raw unboxed types (and the<br>
&gt; constructors<br>
&gt; &gt;&gt; making ordinary boxed Haskell types from these, e.g. there&#39;s<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; data Int = I# Int#<br>
&gt; &gt;&gt; data Word = W# Word#<br>
&gt; &gt;&gt; data Double = D# Double#<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; and more defined in base [GHC.Types, GHC.Word]).<br>
&gt; &gt;<br>
&gt; &gt; So the 24 bit value is actually stored as a 32bit value. Meaning I will<br>
&gt; have<br>
&gt; &gt; to do my own IO reader and writer code to a ByteString.<br>
&gt; &gt; Thanks,<br>
&gt; &gt; Aaron<br>
&gt; &gt;<br>
&gt;<br>
&gt; I don&#39;t think so - the Storable instance provided for the Int24 type<br>
&gt; peeks and pokes 24-bit values. At least, that what I understand John&#39;s<br>
&gt; earlier message to mean.<br>
<br>
<br>
Yes looking at the code it does support 24bit peeks and pokes.<br></blockquote><div><br></div><div>This is correct (at least it&#39;s how it&#39;s meant to work).  24bit values are represented as 32bit words for ops, but peeks and pokes are 24bit.</div>
<div><br></div><div>If all you want to do is read/write 24bit values there&#39;s nothing wrong with binary, but if you ever want to use them the Word24 and Int24 types are nice to have.</div><div><br></div><div>John</div>
</div>