<br><br><div class="gmail_quote">On Mon, Jun 29, 2009 at 7:01 PM, Magicloud Magiclouds <span dir="ltr">&lt;<a href="mailto:magicloud.magiclouds@gmail.com">magicloud.magiclouds@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;">
Hi,<br>
  There are times, when we need to make some system calls, or call C<br>
library. So we have to deal with C data types.<br>
  For example, CPid, which is an integer, actually. So we can do<br>
&quot;fromIntegral pid&quot;. Then why do not we define &quot;type CPid = Integer&quot;,<br>
and convert Haskell Integer with C Int internally. So the &quot;user&quot; does<br>
not have to care about the type convert (everywhere, which is ugly).<br>
And, specially, when doing something like serialisation, for Haskell<br>
Integer, the user does not have to do things with precision. But for<br>
CPid, without the fromIntegral, we have to specify its precision,<br>
well, on different machine/OS, the precision may not be the same.</blockquote><div><br>If you use Int, Integer, Word, etc to represent all your discrete values you can *accidentally* reuse the values for different purposes.  So in Haskell we like to put a &#39;newtype&#39; wrapper around the integral type so that it has a different identity to the type system even when the values are equal as numbers.  C is notorious for allowing this type of value reuse and the way that it leads to buggy programs is pretty well document at this point, I believe (although, I take it for granted and I haven&#39;t checked for said documentation).<br>
<br>Also, in Haskell we don&#39;t like implicit, or even ambiguous, type conversions and that&#39;s just a preference shared by the majority of Haskell programmers.  We like to believe that it saves us from ourselves in a sense.  So for these reasons, CPid isn&#39;t just an Int32 or Word32.  We want to be type safe.  The price we pay is that at key points in the program you have to explicitly state the transformation you want (fromIntegral).<br>
<br>I hope that helps clarify the reasoning.<br>Jason</div></div><br>