On Thursday 18 December 2008 13:40:47 Ryan Ingram wrote: > Actually, this is probably safer: > > import Foreign.Marshal.Alloc > import Foreign.Ptr > import Foreign.Storable > import Data.Word > import System.IO.Unsafe > > endianCheck = unsafePerformIO $ alloca $ \p -> poke p (0x01020304 :: > Word32) >> peek (castPtr p :: Ptr Word8) > > littleEndian = endianCheck == 4 > bigEndian = endianCheck == 1 > > -- ryan > > On Thu, Dec 18, 2008 at 4:33 AM, Ryan Ingram <ryani.s...@gmail.com> wrote: > > I think something like this might work: > > > > Prelude GHC.Exts GHC.Word> let W64# x = 0x100000002 in W32# > > (unsafeCoerce# x) 2 > > > > You should get 1 for big-endian and 2 for little-endian. > > > > (Disclaimer: not particularily well-tested.)
Using modules Data.Binary, Data.Binary.Put and Data.Word, you can define littleEndian = (decode $ runPut $ putWord16host 42 :: Word8) == 42 Under the hood, it also uses peek and poke, but it looks a bit more functional. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe