bytes-0.14: src/Data/Bytes/Signed.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
--------------------------------------------------------------------
-- |
-- License : BSD3
-- Stability : experimental
-- Portability: type-families
--
-- When one wants to think of an 'Int' as a dumb bitstring, converting
-- it to a 'Word' avoids pesky complications with respect to sign
-- extension.
--------------------------------------------------------------------
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