{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE TypeFamilies #-}

-- | This module provides signed and unsigned binary word data types of sizes
--   2, 3, 4, 5, 6, 7, 24, and 48 bits.
module Data.ShortWord
  ( module Data.BinaryWord
  , Word2
  , aWord2
  , Word3
  , aWord3
  , Word4
  , aWord4
  , Word5
  , aWord5
  , Word6
  , aWord6
  , Word7
  , aWord7
  , Word24
  , aWord24
  , Word48
  , aWord48
  , Int2
  , anInt2
  , Int3
  , anInt3
  , Int4
  , anInt4
  , Int5
  , anInt5
  , Int6
  , anInt6
  , Int7
  , anInt7
  , Int24
  , anInt24
  , Int48
  , anInt48
  ) where

import Data.Word
import Data.BinaryWord
import Data.ShortWord.TH

mkShortWord "Word2" "Word2" "aWord2" "Int2" "Int2" "anInt2" ''Word8 2 []
mkShortWord "Word3" "Word3" "aWord3" "Int3" "Int3" "anInt3" ''Word8 3 []
mkShortWord "Word4" "Word4" "aWord4" "Int4" "Int4" "anInt4" ''Word8 4 []
mkShortWord "Word5" "Word5" "aWord5" "Int5" "Int5" "anInt5" ''Word8 5 []
mkShortWord "Word6" "Word6" "aWord6" "Int6" "Int6" "anInt6" ''Word8 6 []
mkShortWord "Word7" "Word7" "aWord7" "Int7" "Int7" "anInt7" ''Word8 7 []
mkShortWord "Word24" "Word24" "aWord24" "Int24" "Int24" "anInt24"
            ''Word32 24 []
mkShortWord "Word48" "Word48" "aWord48" "Int48" "Int48" "anInt48"
            ''Word64 48 []