module Data.Connection.Word (
w08i08
, w08w16
, w08w32
, w08w64
, w08nat
, w16i16
, w16w32
, w16w64
, w16nat
, w32i32
, w32w64
, w32nat
, w64i64
, w64nat
) where
import Control.Category ((>>>))
import Data.Connection
import Data.Int
import Data.Prd
import Data.Word
import Numeric.Natural
signed :: (Bounded b, Integral a, Integral b) => Conn a b
signed = Conn (\x -> fromIntegral x - minBound)
(\y -> fromIntegral (y + maxBound + 1))
w08i08 :: Conn Word8 Int8
w08i08 = signed
w08w16 :: Conn Word8 Word16
w08w16 = Conn fromIntegral (fromIntegral . min 255)
w08w32 :: Conn Word8 Word32
w08w32 = Conn fromIntegral (fromIntegral . min 255)
w08w64 :: Conn Word8 Word64
w08w64 = Conn fromIntegral (fromIntegral . min 255)
w08nat :: Conn Word8 Natural
w08nat = Conn fromIntegral (fromIntegral . min 255)
w16i16 :: Conn Word16 Int16
w16i16 = signed
w16w32 :: Conn Word16 Word32
w16w32 = Conn fromIntegral (fromIntegral . min 65535)
w16w64 :: Conn Word16 Word64
w16w64 = Conn fromIntegral (fromIntegral . min 65535)
w16nat :: Conn Word16 Natural
w16nat = Conn fromIntegral (fromIntegral . min 65535)
w32i32 :: Conn Word32 Int32
w32i32 = signed
w32w64 :: Conn Word32 Word64
w32w64 = Conn fromIntegral (fromIntegral . min 4294967295)
w32nat :: Conn Word32 Natural
w32nat = Conn fromIntegral (fromIntegral . min 4294967295)
w64i64 :: Conn Word64 Int64
w64i64 = signed
w64nat :: Conn Word64 Natural
w64nat = Conn fromIntegral (fromIntegral . min 18446744073709551615)