{-# LANGUAGE MultiParamTypeClasses #-} module HaskellWorks.Data.Int.Widen ( module X , Widen(..) ) where import Data.Int import Data.Word import HaskellWorks.Data.Int.Widen.Widen16 as X import HaskellWorks.Data.Int.Widen.Widen32 as X import HaskellWorks.Data.Int.Widen.Widen64 as X import HaskellWorks.Data.Int.Widen.Widen8 as X class Widen a b where -- | Cast the value to a larger size. -- -- This is safer to use than 'Prelude.fromIntegral'. widen :: a -> b instance Widen Int8 Int8 where widen = id {-# INLINE widen #-} instance Widen Int8 Int16 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int8 Int32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int8 Int64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int16 Int16 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int16 Int32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int16 Int64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int32 Int32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int32 Int64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Int64 Int64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word8 Word8 where widen = id {-# INLINE widen #-} instance Widen Word8 Word16 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word8 Word32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word8 Word64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word16 Word16 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word16 Word32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word16 Word64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word32 Word32 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word32 Word64 where widen = fromIntegral {-# INLINE widen #-} instance Widen Word64 Word64 where widen = fromIntegral {-# INLINE widen #-}