Ahn, Ki Yung 쓴 글:
Magicloud Magiclouds 쓴 글:
Hi,
There are times, when we need to make some system calls, or call C
library. So we have to deal with C data types.
For example, CPid, which is an integer, actually. So we can do
"fromIntegral pid". Then why do not we define "type CPid = Integer",
and convert Haskell Integer with C Int internally. So the "user" does
not have to care about the type convert (everywhere, which is ugly).
And, specially, when doing something like serialisation, for Haskell
Integer, the user does not have to do things with precision. But for
CPid, without the fromIntegral, we have to specify its precision,
well, on different machine/OS, the precision may not be the same.
Integer is not a fixed length chunk of bits. It can be arbitrarily
large as long as there is memory left in the system. It's theoretically
more clean being close to a mathematical definition of integers, but
internally a complicated beast. So defining CPid as Integer is just not
sane.
In addition, we cannot use Int either. Int is not a 32 bit or 64 bit
word. The Haskell 98 standard does not require that, and in most
implementations it is 2^31 singed bits using one bit as a mark to
distinguish pointers from values for garbage collection purposes. (OCaml
int types are like that too.)
I hope this gives enough explanation.
I wrote this and thought that you might already know this. For
convenience of serialization, wouldn't defining Data.Binary instances
for C types be enough in the library level?
--
Ahn, Ki Yung
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe