module ZM.Type.Words (
Sign(..),
Word7(..),
Word(..),
Word8(..),
Word16(..),
Word32(..),
Word64(..),
Int(..),
Int8(..),
Int16(..),
Int32(..),
Int64(..),
ZigZag(..),
MostSignificantFirst(..),
LeastSignificantFirst(..),
) where
import Prelude hiding (Word,Int)
import Data.Flat
import Data.Model
import ZM.Type.NonEmptyList
import ZM.Type.Generate
import qualified Data.Word as H
data Word = Word (LeastSignificantFirst (NonEmptyList (MostSignificantFirst Word7)))
deriving (Eq, Ord, Show, Generic, Model)
data Word16 = Word16 Word
deriving (Eq, Ord, Show, Generic, Model)
data Word32 = Word32 Word
deriving (Eq, Ord, Show, Generic, Model)
data Word64 = Word64 Word
deriving (Eq, Ord, Show, Generic, Model)
data Word7 = Word7 H.Word8 deriving (Eq, Ord, Show, Generic)
instance Model Word7 where envType = useCT word7CT
data Word8 = Word8 H.Word8 deriving (Eq, Ord, Show, Generic)
instance Model Word8 where envType = useCT word8CT
data Int = Int (ZigZag Word) deriving (Eq, Ord, Show, Generic, Model)
data Int8 = Int8 (ZigZag Word8)
deriving (Eq, Ord, Show, Generic, Model)
data Int16 = Int16 (ZigZag Word16)
deriving (Eq, Ord, Show, Generic, Model)
data Int32 = Int32 (ZigZag Word32)
deriving (Eq, Ord, Show, Generic, Model)
data Int64 = Int64 (ZigZag Word64)
deriving (Eq, Ord, Show, Generic, Model)
data ZigZag a = ZigZag a
deriving (Eq, Ord, Show, Generic, Flat)
instance Model a => Model (ZigZag a)
data LeastSignificantFirst a = LeastSignificantFirst a
deriving (Eq, Ord, Show, Generic, Flat)
instance Model a => Model (LeastSignificantFirst a)
data MostSignificantFirst a = MostSignificantFirst a
deriving (Eq, Ord, Show, Generic, Flat)
instance Model a => Model (MostSignificantFirst a)
data Sign = Positive | Negative deriving (Eq, Ord, Show, Generic, Model, Flat)