OddWord-1.0.1.0: Provides a wrapper for deriving word types with fewer bits.

Safe HaskellSafe
LanguageHaskell2010

Data.Word.Odd

Contents

Synopsis

Odd Word Wrapper

data OddWord a n Source

OddWord provides a range of unsigned integer word types with a length in bits encoded at the type level. The first type parameter a must supply an integer type which can hold at least as many bits as required for the OddWord. The second type paramter n then encodes the length in bits which the OddWord will be restricted to.

The length of the OddWord can be encoded as a string of binary digits using the One, Zero, and () type constructors. The outermost constructor specifies the most significant digit and each subsequent digit is nested inside the previous type constructor via its type parameter. Hence, the encoding is terminated by the () type constructor. For example, the number 4 would be expressed as: One (Zero (Zero ())).

Alternatively, if the compiler supports type-level naturals then these can be used via the Lit type constructor. For example, the number 4 can be expressed as: Lit 4.

To supply a complete example, a 4-bit integer type could be built from a Word8 and specified as either OddWord Word8 (One (Zero (Zero ()))) or OddWord Word8 (Lit 4).

The behaviour of an OddWord is undefined if the specified length is greater than that of the underlying integer type. The behaviour is also undefined if the specified length is equal to that of the underlying integer type and that type is also signed.

Instances

(Num a, Bits a, TypeNum n) => Bounded (OddWord a n) Source 
(Enum a, Ord a, Num a, Bits a, TypeNum n) => Enum (OddWord a n) Source 
Eq a => Eq (OddWord a n) Source 
(Integral a, Bits a, TypeNum n) => Integral (OddWord a n) Source 
(Num a, Bits a, TypeNum n) => Num (OddWord a n) Source 
Ord a => Ord (OddWord a n) Source 
(Read a, Num a, Bits a, TypeNum n) => Read (OddWord a n) Source 
(Real a, Bits a, TypeNum n) => Real (OddWord a n) Source 
Show a => Show (OddWord a n) Source 
(Num a, Bits a, TypeNum n) => Bits (OddWord a n) Source 
(Num a, FiniteBits a, TypeNum n) => FiniteBits (OddWord a n) Source 

Type Numbers

class TypeNum a Source

Intances of TypeNum represent type-level numbers.

Minimal complete definition

typeNum

Instances

data One a Source

Represents a type-level number with a leading one bit followed by the string of digits specified by a.

Instances

data Zero a Source

Represents a type-level number with a placeholder zero bit followed by the string of digits specified by a.

Instances

data Lit :: Nat -> * Source

Converts a native GHC type-level natural into one usable by this library. This requires GHC 7.8 or later and the DataKinds extension.

Instances

Predefined Odd Words

type Word5 = OddWord Word8 (One (Zero (One ()))) Source

type Word6 = OddWord Word8 (One (One (Zero ()))) Source

type Word7 = OddWord Word8 (One (One (One ()))) Source

type Word15 = OddWord Word16 (One (One (One (One ())))) Source

type Word19 = OddWord Word32 (One (Zero (Zero (One (One ()))))) Source

type Word21 = OddWord Word32 (One (Zero (One (Zero (One ()))))) Source

type Word22 = OddWord Word32 (One (Zero (One (One (Zero ()))))) Source

type Word23 = OddWord Word32 (One (Zero (One (One (One ()))))) Source

type Word25 = OddWord Word32 (One (One (Zero (Zero (One ()))))) Source

type Word26 = OddWord Word32 (One (One (Zero (One (Zero ()))))) Source

type Word27 = OddWord Word32 (One (One (Zero (One (One ()))))) Source

type Word28 = OddWord Word32 (One (One (One (Zero (Zero ()))))) Source

type Word29 = OddWord Word32 (One (One (One (Zero (One ()))))) Source

type Word30 = OddWord Word32 (One (One (One (One (Zero ()))))) Source

type Word31 = OddWord Word32 (One (One (One (One (One ()))))) Source

type Word35 = OddWord Word64 (One (Zero (Zero (Zero (One (One ())))))) Source

type Word37 = OddWord Word64 (One (Zero (Zero (One (Zero (One ())))))) Source

type Word38 = OddWord Word64 (One (Zero (Zero (One (One (Zero ())))))) Source

type Word39 = OddWord Word64 (One (Zero (Zero (One (One (One ())))))) Source

type Word41 = OddWord Word64 (One (Zero (One (Zero (Zero (One ())))))) Source

type Word42 = OddWord Word64 (One (Zero (One (Zero (One (Zero ())))))) Source

type Word43 = OddWord Word64 (One (Zero (One (Zero (One (One ())))))) Source

type Word44 = OddWord Word64 (One (Zero (One (One (Zero (Zero ())))))) Source

type Word45 = OddWord Word64 (One (Zero (One (One (Zero (One ())))))) Source

type Word46 = OddWord Word64 (One (Zero (One (One (One (Zero ())))))) Source

type Word47 = OddWord Word64 (One (Zero (One (One (One (One ())))))) Source

type Word49 = OddWord Word64 (One (One (Zero (Zero (Zero (One ())))))) Source

type Word50 = OddWord Word64 (One (One (Zero (Zero (One (Zero ())))))) Source

type Word51 = OddWord Word64 (One (One (Zero (Zero (One (One ())))))) Source

type Word52 = OddWord Word64 (One (One (Zero (One (Zero (Zero ())))))) Source

type Word53 = OddWord Word64 (One (One (Zero (One (Zero (One ())))))) Source

type Word54 = OddWord Word64 (One (One (Zero (One (One (Zero ())))))) Source

type Word55 = OddWord Word64 (One (One (Zero (One (One (One ())))))) Source

type Word56 = OddWord Word64 (One (One (One (Zero (Zero (Zero ())))))) Source

type Word57 = OddWord Word64 (One (One (One (Zero (Zero (One ())))))) Source

type Word58 = OddWord Word64 (One (One (One (Zero (One (Zero ())))))) Source

type Word59 = OddWord Word64 (One (One (One (Zero (One (One ())))))) Source

type Word60 = OddWord Word64 (One (One (One (One (Zero (Zero ())))))) Source

type Word61 = OddWord Word64 (One (One (One (One (Zero (One ())))))) Source

type Word62 = OddWord Word64 (One (One (One (One (One (Zero ())))))) Source

type Word63 = OddWord Word64 (One (One (One (One (One (One ())))))) Source