content: module Word(main) where
  import Data.Word
  import Numeric(showHex, showBin)
  
  vals :: [Word16]
  vals = [0xfff0, 0xfffe, 0xffff, 0, 1, 2, 5]
  
  maxw :: Word
  maxw = if _wordSize == 32 then 0x7fff::Word else 0x7fffffff::Word
  
  hex :: Integral a => a -> String
  hex x = showHex x ""
  
  bin :: Integral a => a -> String
  bin x = showBin x ""
  
  main :: IO ()
  main = do
    print (1000::Word)
    print $ maxw*maxw > 0
    print [ op x y | x <- vals, y <- vals, op <- [(+),( - ),(*)] ]
    print [ op x y | x <- vals, y <- vals, y /= 0, op <- [quot, rem] ]
    print [ op x y | x <- vals, y <- vals, op <- [(==),(/=),(<),(<=),(>),(>=)] ]
    print [ op x y | x <- vals, y <- vals, let op = compare ]
    putStrLn $ hex $ byteSwap16 0x1234
    putStrLn $ hex $ byteSwap32 0x12345678
    putStrLn $ hex $ byteSwap64 0x123456789abcdef0
    putStrLn $ bin $ bitReverse8 0b01001000
    putStrLn $ bin $ bitReverse16 0b0100_1000_0000_0001
    putStrLn $ bin $ bitReverse32 0b0100_1000_0000_0001_0000_1111_0000_0001
    putStrLn $ bin $ bitReverse64 0b0100_1000_0000_0001_0000_1111_0000_0001_0000000000000000000000000000001
  