base: Introduce GHC.ByteOrder
authorBen Gamari <bgamari.foss@gmail.com>
Mon, 24 Jul 2017 23:54:37 +0000 (19:54 -0400)
committerBen Gamari <ben@smart-cactus.org>
Tue, 25 Jul 2017 01:06:13 +0000 (21:06 -0400)
This provides a ByteOrder type as well as a targetByteOrder value, which
indicates the byte ordering used by the target machine. We might also
consider exposing this via Data.Bits if the CLC is so inclined.

Test Plan: Needs test

Reviewers: hvr, RyanGlScott, austin

Reviewed By: hvr, RyanGlScott

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3786

libraries/base/GHC/ByteOrder.hs [new file with mode: 0644]
libraries/base/base.cabal

diff --git a/libraries/base/GHC/ByteOrder.hs b/libraries/base/GHC/ByteOrder.hs
new file mode 100644 (file)
index 0000000..eecc56c
--- /dev/null
@@ -0,0 +1,31 @@
+{-# LANGUAGE CPP #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  GHC.ByteOrder
+-- Copyright   :  (c) The University of Glasgow, 1994-2000
+-- License     :  see libraries/base/LICENSE
+--
+-- Maintainer  :  cvs-ghc@haskell.org
+-- Stability   :  internal
+-- Portability :  non-portable (GHC extensions)
+--
+-- Target byte ordering.
+--
+-----------------------------------------------------------------------------
+
+module GHC.ByteOrder where
+
+-- | Byte ordering.
+data ByteOrder
+    = BigEndian    -- ^ most-significant-byte occurs in lowest address.
+    | LittleEndian -- ^ least-significant-byte occurs in lowest address.
+    deriving (Eq, Ord, Bounded, Enum, Read, Show)
+
+-- | The byte ordering of the target machine.
+targetByteOrder :: ByteOrder
+#if defined(WORDS_BIGENDIAN)
+targetByteOrder = BigEndian
+#else
+targetByteOrder = LittleEndian
+#endif
index f00fb87..9429de0 100644 (file)
@@ -202,6 +202,7 @@ Library
         Foreign.Storable
         GHC.Arr
         GHC.Base
+        GHC.ByteOrder
         GHC.Char
         GHC.Conc
         GHC.Conc.IO