{-# LANGUAGE Safe #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DefaultSignatures #-}
module Intro.ConvertIntegral (
ToIntegral(..)
, fromIntegralUnsafe
, fromIntegerUnsafe
) where
import Data.Int
import Data.Word
class ToIntegral a b where
toIntegral :: a -> b
default toIntegral :: (Integral a, Integral b) => a -> b
toIntegral = fromIntegral
{-# INLINE toIntegral #-}
instance ToIntegral Word8 Int16
instance ToIntegral Word8 Int32
instance ToIntegral Word8 Int64
instance ToIntegral Word8 Int
instance ToIntegral Word16 Int32
instance ToIntegral Word16 Int64
instance ToIntegral Word16 Int
instance ToIntegral Word32 Int64
instance ToIntegral Word8 Word16
instance ToIntegral Word8 Word32
instance ToIntegral Word8 Word64
instance ToIntegral Word8 Word
instance ToIntegral Word16 Word32
instance ToIntegral Word16 Word64
instance ToIntegral Word16 Word
instance ToIntegral Word32 Word64
instance ToIntegral Int8 Integer
instance ToIntegral Int16 Integer
instance ToIntegral Int32 Integer
instance ToIntegral Int64 Integer
instance ToIntegral Int Integer
instance ToIntegral Word8 Integer
instance ToIntegral Word16 Integer
instance ToIntegral Word32 Integer
instance ToIntegral Word64 Integer
instance ToIntegral Word Integer
instance ToIntegral Int8 Int16
instance ToIntegral Int8 Int32
instance ToIntegral Int8 Int64
instance ToIntegral Int8 Int
instance ToIntegral Int16 Int32
instance ToIntegral Int16 Int64
instance ToIntegral Int16 Int
instance ToIntegral Int32 Int64
fromIntegralUnsafe :: (Integral a, Num b) => a -> b
fromIntegralUnsafe = fromIntegral
{-# INLINE fromIntegralUnsafe #-}
fromIntegerUnsafe :: Num a => Integer -> a
fromIntegerUnsafe = fromInteger
{-# INLINE fromIntegerUnsafe #-}