-- | Bit orderings
module Haskus.Format.Binary.Bits.Order
   ( BitOrder(..)
   )
where

-- | Bit order
--
-- The first letter indicates the outer bit ordering, i.e. how bytes are filled:
--    B*: from left to right (B is for BigEndian)
--    L*: from right to left (L is for LittleEndian)
--
-- The second letter indicates the inner bit ordering, i.e. how words are stored:
--    *B: the most significant bit is stored first (in the outer bit order!)
--    *L: the least-significant bit is stored first (in the outer bit order!)
--
-- E.g. two successive words of 5 bits: ABCDE, VWXYZ
--    - BB: ABCDEVWX YZxxxxxx
--    - BL: EDCBAZYX WVxxxxxx
--    - LB: XWVEDCBA xxxxxxZY
--    - LL: XYZABCDE xxxxxxVW
data BitOrder
   = BB
   | LB
   | BL
   | LL
   deriving (Show,Eq)