binrep-0.5.0: Encode precise binary representations directly in types
Safe HaskellSafe-Inferred
LanguageGHC2021

Binrep.Type.Int

Description

Machine integers: sized integers & naturals with explicit endianness type tags for serialization.

Synopsis

Documentation

data ISign Source #

Machine integer sign.

Signed integers use two's complement for representation.

Constructors

U

unsigned

I

signed (two's complement)

Instances

Instances details
Data ISign Source # 
Instance details

Defined in Binrep.Type.Int

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ISign -> c ISign #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ISign #

toConstr :: ISign -> Constr #

dataTypeOf :: ISign -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ISign) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ISign) #

gmapT :: (forall b. Data b => b -> b) -> ISign -> ISign #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ISign -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ISign -> r #

gmapQ :: (forall d. Data d => d -> u) -> ISign -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ISign -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ISign -> m ISign #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ISign -> m ISign #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ISign -> m ISign #

Generic ISign Source # 
Instance details

Defined in Binrep.Type.Int

Associated Types

type Rep ISign :: Type -> Type #

Methods

from :: ISign -> Rep ISign x #

to :: Rep ISign x -> ISign #

Show ISign Source # 
Instance details

Defined in Binrep.Type.Int

Methods

showsPrec :: Int -> ISign -> ShowS #

show :: ISign -> String #

showList :: [ISign] -> ShowS #

Eq ISign Source # 
Instance details

Defined in Binrep.Type.Int

Methods

(==) :: ISign -> ISign -> Bool #

(/=) :: ISign -> ISign -> Bool #

type Rep ISign Source # 
Instance details

Defined in Binrep.Type.Int

type Rep ISign = D1 ('MetaData "ISign" "Binrep.Type.Int" "binrep-0.5.0-inplace" 'False) (C1 ('MetaCons "U" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "I" 'PrefixI 'False) (U1 :: Type -> Type))

newtype Endian (end :: Endianness) a Source #

A type tagged with the endianness (byte order) to use when serializing.

Intended to be used to wrap existing types which do not otherwise expose endianness, namely the machine integers Int32, Word64 etc. As such, it derives various relevant type classes using the wrapped type.

May be considered a restricted Tagged (from the tagged package).

Constructors

Endian 

Fields

  • unEndian :: a

    Discard endianness information.

Instances

Instances details
IsCBLen (Endian end a :: Type) Source # 
Instance details

Defined in Binrep.Type.Int

Associated Types

type CBLen (Endian end a) :: Natural Source #

FromJSON a => FromJSON (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

parseJSON :: Value -> Parser (Endian end a) #

parseJSONList :: Value -> Parser [Endian end a] #

ToJSON a => ToJSON (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

toJSON :: Endian end a -> Value #

toEncoding :: Endian end a -> Encoding #

toJSONList :: [Endian end a] -> Value #

toEncodingList :: [Endian end a] -> Encoding #

(Typeable end, Data a) => Data (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Endian end a -> c (Endian end a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Endian end a) #

toConstr :: Endian end a -> Constr #

dataTypeOf :: Endian end a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Endian end a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Endian end a)) #

gmapT :: (forall b. Data b => b -> b) -> Endian end a -> Endian end a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Endian end a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Endian end a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Endian end a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Endian end a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Endian end a -> m (Endian end a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Endian end a -> m (Endian end a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Endian end a -> m (Endian end a) #

Bounded a => Bounded (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

minBound :: Endian end a #

maxBound :: Endian end a #

Enum a => Enum (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

succ :: Endian end a -> Endian end a #

pred :: Endian end a -> Endian end a #

toEnum :: Int -> Endian end a #

fromEnum :: Endian end a -> Int #

enumFrom :: Endian end a -> [Endian end a] #

enumFromThen :: Endian end a -> Endian end a -> [Endian end a] #

enumFromTo :: Endian end a -> Endian end a -> [Endian end a] #

enumFromThenTo :: Endian end a -> Endian end a -> Endian end a -> [Endian end a] #

Generic (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Associated Types

type Rep (Endian end a) :: Type -> Type #

Methods

from :: Endian end a -> Rep (Endian end a) x #

to :: Rep (Endian end a) x -> Endian end a #

Num a => Num (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

(+) :: Endian end a -> Endian end a -> Endian end a #

(-) :: Endian end a -> Endian end a -> Endian end a #

(*) :: Endian end a -> Endian end a -> Endian end a #

negate :: Endian end a -> Endian end a #

abs :: Endian end a -> Endian end a #

signum :: Endian end a -> Endian end a #

fromInteger :: Integer -> Endian end a #

Integral a => Integral (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

quot :: Endian end a -> Endian end a -> Endian end a #

rem :: Endian end a -> Endian end a -> Endian end a #

div :: Endian end a -> Endian end a -> Endian end a #

mod :: Endian end a -> Endian end a -> Endian end a #

quotRem :: Endian end a -> Endian end a -> (Endian end a, Endian end a) #

divMod :: Endian end a -> Endian end a -> (Endian end a, Endian end a) #

toInteger :: Endian end a -> Integer #

Real a => Real (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

toRational :: Endian end a -> Rational #

Show a => Show (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

showsPrec :: Int -> Endian end a -> ShowS #

show :: Endian end a -> String #

showList :: [Endian end a] -> ShowS #

BLen a => BLen (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

blen :: Endian end a -> Int Source #

Get (Endian 'BE Int16) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'BE Int32) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'BE Int64) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'BE Word16) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'BE Word32) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'BE Word64) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Int16) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Int32) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Int64) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Word16) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Word32) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian 'LE Word64) Source # 
Instance details

Defined in Binrep.Type.Int

Get (Endian end Int8) Source #

Endianness doesn't matter for single bytes.

Instance details

Defined in Binrep.Type.Int

Methods

get :: Getter (Endian end Int8) Source #

Get (Endian end Word8) Source #

Endianness doesn't matter for single bytes.

Instance details

Defined in Binrep.Type.Int

Methods

get :: Getter (Endian end Word8) Source #

Put (Endian 'BE Int16) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Int16 -> Poke Source #

Put (Endian 'BE Int32) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Int32 -> Poke Source #

Put (Endian 'BE Int64) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Int64 -> Poke Source #

Put (Endian 'BE Word16) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Word16 -> Poke Source #

Put (Endian 'BE Word32) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Word32 -> Poke Source #

Put (Endian 'BE Word64) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'BE Word64 -> Poke Source #

Put (Endian 'LE Int16) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Int16 -> Poke Source #

Put (Endian 'LE Int32) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Int32 -> Poke Source #

Put (Endian 'LE Int64) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Int64 -> Poke Source #

Put (Endian 'LE Word16) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Word16 -> Poke Source #

Put (Endian 'LE Word32) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Word32 -> Poke Source #

Put (Endian 'LE Word64) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian 'LE Word64 -> Poke Source #

Put (Endian end Int8) Source #

Endianness doesn't matter for single bytes.

Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian end Int8 -> Builder Source #

Put (Endian end Word8) Source #

Endianness doesn't matter for single bytes.

Instance details

Defined in Binrep.Type.Int

Methods

put :: Endian end Word8 -> Builder Source #

Prefix a => Prefix (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Prefix

Associated Types

type Max (Endian end a) :: Natural Source #

Methods

lenToPfx :: Int -> Endian end a Source #

pfxToLen :: Endian end a -> Int Source #

Eq a => Eq (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

(==) :: Endian end a -> Endian end a -> Bool #

(/=) :: Endian end a -> Endian end a -> Bool #

Ord a => Ord (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

compare :: Endian end a -> Endian end a -> Ordering #

(<) :: Endian end a -> Endian end a -> Bool #

(<=) :: Endian end a -> Endian end a -> Bool #

(>) :: Endian end a -> Endian end a -> Bool #

(>=) :: Endian end a -> Endian end a -> Bool #

max :: Endian end a -> Endian end a -> Endian end a #

min :: Endian end a -> Endian end a -> Endian end a #

Strengthen a => Strengthen (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Methods

strengthen :: Weak (Endian end a) -> Result (Endian end a) #

Weaken a => Weaken (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

Associated Types

type Weak (Endian end a) #

Methods

weaken :: Endian end a -> Weak (Endian end a) #

type CBLen (Endian end a :: Type) Source # 
Instance details

Defined in Binrep.Type.Int

type CBLen (Endian end a :: Type) = CBLen a
type Rep (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

type Rep (Endian end a) = D1 ('MetaData "Endian" "Binrep.Type.Int" "binrep-0.5.0-inplace" 'True) (C1 ('MetaCons "Endian" 'PrefixI 'True) (S1 ('MetaSel ('Just "unEndian") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))
type Max (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Prefix

type Max (Endian end a) = Max a
type Weak (Endian end a) Source # 
Instance details

Defined in Binrep.Type.Int

type Weak (Endian end a) = Weak a

flatparseParseEndianMin :: Getter a -> Int -> Getter (Endian end a) Source #

Ask for a minimum length before running the given parser and wrapping the result in Endian.

type family IRep (isign :: ISign) (isize :: Natural) where ... Source #

Grouping for matching a signedness and size to a Haskell integer data type.

Equations

IRep 'U 8 = Word8 
IRep 'I 8 = Int8 
IRep 'U 16 = Word16 
IRep 'I 16 = Int16 
IRep 'U 32 = Word32 
IRep 'I 32 = Int32 
IRep 'U 64 = Word64 
IRep 'I 64 = Int64 

type family IMax (isign :: ISign) (n :: Natural) :: Natural where ... Source #

Largest representable value for a machine integer made of n bits.

If signed 'I, twos complement is used, so negative range has 1 extra value.

Equations

IMax 'U n = (2 ^ n) - 1 
IMax 'I n = 2 ^ (n - 1)