On Thu, 6 Oct 2005, Joel Reymont wrote: > I don't want to replicate all the code in NewBinary for Little/Big > endian. I'm looking for an elegant solution (Haskell, the elegant > language, you know).
Maybe that's why I haven't seen anyone propose a foreign interface, but it's sure how I would do it. This standard network library stuff is all sorted out for C programmers, it's just a matter of getting to it. Code for htonl follows, htons should obvious. For floats, I suppose you'd deliver them across the interface as whatever the floating point equivalent of CInt, then make sure they're 32 bit floats on the C side before swapping them with htonl. Donn Cave, [EMAIL PROTECTED] --- Netword.hsc --- -# OPTIONS -fffi #-} module Netword (htonl,ntohl) where import Foreign import Foreign.C #include "netw.h" foreign import ccall unsafe "c_htonl" htonl :: CInt -> CInt foreign import ccall unsafe "c_ntohl" ntohl :: CInt -> CInt --- netw.c --- #include <sys/types.h> #include <arpa/inet.h> #include "netw.h" uint32_t c_ntohl(uint32_t v) { return ntohl(v); } uint32_t c_htonl(uint32_t v) { return htonl(v); } --- compile --- hsc2hs -c gcc -I /usr/local/lib/ghc-6.4/include Netword.hsc ghc -c Netword.hs ghc -o tw Main.hs Netword.o netw.o _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe