-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Stick two binary words together to get a bigger one
--   
--   This package provides Template Haskell utilities for declaring
--   fixed-length binary word data types. Signed and unsigned 96, 128, 160,
--   192, 224, and 256-bit types are predefined.
@package data-dword
@version 0.3.1


-- | Template Haskell utilities for generating double words declarations
module Data.DoubleWord.TH

-- | Declare signed and unsigned binary word types built from the specified
--   low and high halves. The high halves <i>must</i> have less or equal
--   bit-length than the lover half. For each data type the following
--   instances are declared: <a>DoubleWord</a>, <a>Eq</a>, <a>Ord</a>,
--   <a>Bounded</a>, <a>Enum</a>, <a>Num</a>, <a>Real</a>, <a>Integral</a>,
--   <a>Show</a>, <a>Read</a>, <a>Hashable</a>, <a>Ix</a>, <a>Bits</a>,
--   <a>BinaryWord</a>.
mkDoubleWord :: String -> String -> Bang -> Name -> String -> String -> Bang -> Name -> Bang -> Name -> [Name] -> Q [Dec]

-- | <tt><a>mkUnpackedDoubleWord</a> u uh s sh l</tt> is an alias for
--   <tt><a>mkDoubleWord</a> u u <tt>Unpacked</tt> uh s s <tt>Unpacked</tt>
--   sh <tt>Unpacked</tt> l</tt>
mkUnpackedDoubleWord :: String -> Name -> String -> Name -> Name -> [Name] -> Q [Dec]


-- | This module provides strict (low and high halves are unpacked) signed
--   and unsigned binary word data types of sizes 96, 128, 160, 192, 224,
--   and 256 bits.
module Data.DoubleWord

-- | Defines a particular way to split a binary word in halves.
class BinaryWord w => DoubleWord w where type LoWord w type HiWord w where {
    type family LoWord w;
    type family HiWord w;
}

-- | The low half of the word
loWord :: DoubleWord w => w -> LoWord w

-- | The high half of the word
hiWord :: DoubleWord w => w -> HiWord w

-- | Construct a word from the low and high halves
fromHiAndLo :: DoubleWord w => HiWord w -> LoWord w -> w

-- | Extend the low half
extendLo :: DoubleWord w => LoWord w -> w

-- | Sign-extend the low half
signExtendLo :: DoubleWord w => SignedWord (LoWord w) -> w
data Word96
Word96 :: {-# UNPACK #-} !Word32 -> {-# UNPACK #-} !Word64 -> Word96
data Word128
Word128 :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word64 -> Word128
data Word160
Word160 :: {-# UNPACK #-} !Word32 -> {-# UNPACK #-} !Word128 -> Word160
data Word192
Word192 :: {-# UNPACK #-} !Word64 -> {-# UNPACK #-} !Word128 -> Word192
data Word224
Word224 :: {-# UNPACK #-} !Word96 -> {-# UNPACK #-} !Word128 -> Word224
data Word256
Word256 :: {-# UNPACK #-} !Word128 -> {-# UNPACK #-} !Word128 -> Word256
data Int96
Int96 :: {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Word64 -> Int96
data Int128
Int128 :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Word64 -> Int128
data Int160
Int160 :: {-# UNPACK #-} !Int32 -> {-# UNPACK #-} !Word128 -> Int160
data Int192
Int192 :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Word128 -> Int192
data Int224
Int224 :: {-# UNPACK #-} !Int96 -> {-# UNPACK #-} !Word128 -> Int224
data Int256
Int256 :: {-# UNPACK #-} !Int128 -> {-# UNPACK #-} !Word128 -> Int256
instance GHC.Generics.Generic Data.DoubleWord.Int256
instance Data.Data.Data Data.DoubleWord.Int256
instance GHC.Generics.Generic Data.DoubleWord.Word256
instance Data.Data.Data Data.DoubleWord.Word256
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word256
instance GHC.Classes.Eq Data.DoubleWord.Word256
instance GHC.Classes.Ord Data.DoubleWord.Word256
instance GHC.Enum.Bounded Data.DoubleWord.Word256
instance GHC.Enum.Enum Data.DoubleWord.Word256
instance GHC.Num.Num Data.DoubleWord.Word256
instance GHC.Real.Real Data.DoubleWord.Word256
instance GHC.Real.Integral Data.DoubleWord.Word256
instance GHC.Show.Show Data.DoubleWord.Word256
instance GHC.Read.Read Data.DoubleWord.Word256
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word256
instance GHC.Arr.Ix Data.DoubleWord.Word256
instance Data.Bits.Bits Data.DoubleWord.Word256
instance Data.Bits.FiniteBits Data.DoubleWord.Word256
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word256
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int256
instance GHC.Classes.Eq Data.DoubleWord.Int256
instance GHC.Classes.Ord Data.DoubleWord.Int256
instance GHC.Enum.Bounded Data.DoubleWord.Int256
instance GHC.Enum.Enum Data.DoubleWord.Int256
instance GHC.Num.Num Data.DoubleWord.Int256
instance GHC.Real.Real Data.DoubleWord.Int256
instance GHC.Real.Integral Data.DoubleWord.Int256
instance GHC.Show.Show Data.DoubleWord.Int256
instance GHC.Read.Read Data.DoubleWord.Int256
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int256
instance GHC.Arr.Ix Data.DoubleWord.Int256
instance Data.Bits.Bits Data.DoubleWord.Int256
instance Data.Bits.FiniteBits Data.DoubleWord.Int256
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int256
instance GHC.Generics.Generic Data.DoubleWord.Int224
instance Data.Data.Data Data.DoubleWord.Int224
instance GHC.Generics.Generic Data.DoubleWord.Word224
instance Data.Data.Data Data.DoubleWord.Word224
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word224
instance GHC.Classes.Eq Data.DoubleWord.Word224
instance GHC.Classes.Ord Data.DoubleWord.Word224
instance GHC.Enum.Bounded Data.DoubleWord.Word224
instance GHC.Enum.Enum Data.DoubleWord.Word224
instance GHC.Num.Num Data.DoubleWord.Word224
instance GHC.Real.Real Data.DoubleWord.Word224
instance GHC.Real.Integral Data.DoubleWord.Word224
instance GHC.Show.Show Data.DoubleWord.Word224
instance GHC.Read.Read Data.DoubleWord.Word224
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word224
instance GHC.Arr.Ix Data.DoubleWord.Word224
instance Data.Bits.Bits Data.DoubleWord.Word224
instance Data.Bits.FiniteBits Data.DoubleWord.Word224
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word224
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int224
instance GHC.Classes.Eq Data.DoubleWord.Int224
instance GHC.Classes.Ord Data.DoubleWord.Int224
instance GHC.Enum.Bounded Data.DoubleWord.Int224
instance GHC.Enum.Enum Data.DoubleWord.Int224
instance GHC.Num.Num Data.DoubleWord.Int224
instance GHC.Real.Real Data.DoubleWord.Int224
instance GHC.Real.Integral Data.DoubleWord.Int224
instance GHC.Show.Show Data.DoubleWord.Int224
instance GHC.Read.Read Data.DoubleWord.Int224
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int224
instance GHC.Arr.Ix Data.DoubleWord.Int224
instance Data.Bits.Bits Data.DoubleWord.Int224
instance Data.Bits.FiniteBits Data.DoubleWord.Int224
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int224
instance GHC.Generics.Generic Data.DoubleWord.Int192
instance Data.Data.Data Data.DoubleWord.Int192
instance GHC.Generics.Generic Data.DoubleWord.Word192
instance Data.Data.Data Data.DoubleWord.Word192
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word192
instance GHC.Classes.Eq Data.DoubleWord.Word192
instance GHC.Classes.Ord Data.DoubleWord.Word192
instance GHC.Enum.Bounded Data.DoubleWord.Word192
instance GHC.Enum.Enum Data.DoubleWord.Word192
instance GHC.Num.Num Data.DoubleWord.Word192
instance GHC.Real.Real Data.DoubleWord.Word192
instance GHC.Real.Integral Data.DoubleWord.Word192
instance GHC.Show.Show Data.DoubleWord.Word192
instance GHC.Read.Read Data.DoubleWord.Word192
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word192
instance GHC.Arr.Ix Data.DoubleWord.Word192
instance Data.Bits.Bits Data.DoubleWord.Word192
instance Data.Bits.FiniteBits Data.DoubleWord.Word192
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word192
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int192
instance GHC.Classes.Eq Data.DoubleWord.Int192
instance GHC.Classes.Ord Data.DoubleWord.Int192
instance GHC.Enum.Bounded Data.DoubleWord.Int192
instance GHC.Enum.Enum Data.DoubleWord.Int192
instance GHC.Num.Num Data.DoubleWord.Int192
instance GHC.Real.Real Data.DoubleWord.Int192
instance GHC.Real.Integral Data.DoubleWord.Int192
instance GHC.Show.Show Data.DoubleWord.Int192
instance GHC.Read.Read Data.DoubleWord.Int192
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int192
instance GHC.Arr.Ix Data.DoubleWord.Int192
instance Data.Bits.Bits Data.DoubleWord.Int192
instance Data.Bits.FiniteBits Data.DoubleWord.Int192
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int192
instance GHC.Generics.Generic Data.DoubleWord.Int160
instance Data.Data.Data Data.DoubleWord.Int160
instance GHC.Generics.Generic Data.DoubleWord.Word160
instance Data.Data.Data Data.DoubleWord.Word160
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word160
instance GHC.Classes.Eq Data.DoubleWord.Word160
instance GHC.Classes.Ord Data.DoubleWord.Word160
instance GHC.Enum.Bounded Data.DoubleWord.Word160
instance GHC.Enum.Enum Data.DoubleWord.Word160
instance GHC.Num.Num Data.DoubleWord.Word160
instance GHC.Real.Real Data.DoubleWord.Word160
instance GHC.Real.Integral Data.DoubleWord.Word160
instance GHC.Show.Show Data.DoubleWord.Word160
instance GHC.Read.Read Data.DoubleWord.Word160
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word160
instance GHC.Arr.Ix Data.DoubleWord.Word160
instance Data.Bits.Bits Data.DoubleWord.Word160
instance Data.Bits.FiniteBits Data.DoubleWord.Word160
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word160
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int160
instance GHC.Classes.Eq Data.DoubleWord.Int160
instance GHC.Classes.Ord Data.DoubleWord.Int160
instance GHC.Enum.Bounded Data.DoubleWord.Int160
instance GHC.Enum.Enum Data.DoubleWord.Int160
instance GHC.Num.Num Data.DoubleWord.Int160
instance GHC.Real.Real Data.DoubleWord.Int160
instance GHC.Real.Integral Data.DoubleWord.Int160
instance GHC.Show.Show Data.DoubleWord.Int160
instance GHC.Read.Read Data.DoubleWord.Int160
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int160
instance GHC.Arr.Ix Data.DoubleWord.Int160
instance Data.Bits.Bits Data.DoubleWord.Int160
instance Data.Bits.FiniteBits Data.DoubleWord.Int160
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int160
instance GHC.Generics.Generic Data.DoubleWord.Int128
instance Data.Data.Data Data.DoubleWord.Int128
instance GHC.Generics.Generic Data.DoubleWord.Word128
instance Data.Data.Data Data.DoubleWord.Word128
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word128
instance GHC.Classes.Eq Data.DoubleWord.Word128
instance GHC.Classes.Ord Data.DoubleWord.Word128
instance GHC.Enum.Bounded Data.DoubleWord.Word128
instance GHC.Enum.Enum Data.DoubleWord.Word128
instance GHC.Num.Num Data.DoubleWord.Word128
instance GHC.Real.Real Data.DoubleWord.Word128
instance GHC.Real.Integral Data.DoubleWord.Word128
instance GHC.Show.Show Data.DoubleWord.Word128
instance GHC.Read.Read Data.DoubleWord.Word128
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word128
instance GHC.Arr.Ix Data.DoubleWord.Word128
instance Data.Bits.Bits Data.DoubleWord.Word128
instance Data.Bits.FiniteBits Data.DoubleWord.Word128
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word128
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int128
instance GHC.Classes.Eq Data.DoubleWord.Int128
instance GHC.Classes.Ord Data.DoubleWord.Int128
instance GHC.Enum.Bounded Data.DoubleWord.Int128
instance GHC.Enum.Enum Data.DoubleWord.Int128
instance GHC.Num.Num Data.DoubleWord.Int128
instance GHC.Real.Real Data.DoubleWord.Int128
instance GHC.Real.Integral Data.DoubleWord.Int128
instance GHC.Show.Show Data.DoubleWord.Int128
instance GHC.Read.Read Data.DoubleWord.Int128
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int128
instance GHC.Arr.Ix Data.DoubleWord.Int128
instance Data.Bits.Bits Data.DoubleWord.Int128
instance Data.Bits.FiniteBits Data.DoubleWord.Int128
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int128
instance GHC.Generics.Generic Data.DoubleWord.Int96
instance Data.Data.Data Data.DoubleWord.Int96
instance GHC.Generics.Generic Data.DoubleWord.Word96
instance Data.Data.Data Data.DoubleWord.Word96
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Word96
instance GHC.Classes.Eq Data.DoubleWord.Word96
instance GHC.Classes.Ord Data.DoubleWord.Word96
instance GHC.Enum.Bounded Data.DoubleWord.Word96
instance GHC.Enum.Enum Data.DoubleWord.Word96
instance GHC.Num.Num Data.DoubleWord.Word96
instance GHC.Real.Real Data.DoubleWord.Word96
instance GHC.Real.Integral Data.DoubleWord.Word96
instance GHC.Show.Show Data.DoubleWord.Word96
instance GHC.Read.Read Data.DoubleWord.Word96
instance Data.Hashable.Class.Hashable Data.DoubleWord.Word96
instance GHC.Arr.Ix Data.DoubleWord.Word96
instance Data.Bits.Bits Data.DoubleWord.Word96
instance Data.Bits.FiniteBits Data.DoubleWord.Word96
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Word96
instance Data.DoubleWord.Base.DoubleWord Data.DoubleWord.Int96
instance GHC.Classes.Eq Data.DoubleWord.Int96
instance GHC.Classes.Ord Data.DoubleWord.Int96
instance GHC.Enum.Bounded Data.DoubleWord.Int96
instance GHC.Enum.Enum Data.DoubleWord.Int96
instance GHC.Num.Num Data.DoubleWord.Int96
instance GHC.Real.Real Data.DoubleWord.Int96
instance GHC.Real.Integral Data.DoubleWord.Int96
instance GHC.Show.Show Data.DoubleWord.Int96
instance GHC.Read.Read Data.DoubleWord.Int96
instance Data.Hashable.Class.Hashable Data.DoubleWord.Int96
instance GHC.Arr.Ix Data.DoubleWord.Int96
instance Data.Bits.Bits Data.DoubleWord.Int96
instance Data.Bits.FiniteBits Data.DoubleWord.Int96
instance Data.BinaryWord.BinaryWord Data.DoubleWord.Int96
