module Data.Bytes.Signed
( Unsigned, unsigned
, Signed, signed
) where
import Data.Int
import Data.Word
type family Unsigned i :: *
type instance Unsigned Int = Word
type instance Unsigned Int8 = Word8
type instance Unsigned Int16 = Word16
type instance Unsigned Int32 = Word32
type instance Unsigned Int64 = Word64
type instance Unsigned Integer = Integer
type instance Unsigned Word = Word
type instance Unsigned Word8 = Word8
type instance Unsigned Word16 = Word16
type instance Unsigned Word32 = Word32
type instance Unsigned Word64 = Word64
unsigned :: (Integral i, Num (Unsigned i)) => i -> Unsigned i
unsigned = fromIntegral
type family Signed i :: *
type instance Signed Int = Int
type instance Signed Int8 = Int8
type instance Signed Int16 = Int16
type instance Signed Int32 = Int32
type instance Signed Int64 = Int64
type instance Signed Integer = Integer
type instance Signed Word = Int
type instance Signed Word8 = Int8
type instance Signed Word16 = Int16
type instance Signed Word32 = Int32
type instance Signed Word64 = Int64
signed :: (Integral i, Num (Signed i)) => i -> Signed i
signed = fromIntegral