packages feed

borsh-0.2.0: src/Codec/Borsh/Internal/Util/BitwiseCast.hs

module Codec.Borsh.Internal.Util.BitwiseCast (BitwiseCast(..)) where

import Data.Int
import Data.WideWord.Int128
import Data.WideWord.Word128
import Data.Word
import GHC.Float


class BitwiseCast a b where
  -- | Bit-for-bit copy from @a@ to @b@
  castBits :: a -> b

instance BitwiseCast Float  Word32 where castBits = castFloatToWord32
instance BitwiseCast Double Word64 where castBits = castDoubleToWord64

instance BitwiseCast Word32 Float  where castBits = castWord32ToFloat
instance BitwiseCast Word64 Double where castBits = castWord64ToDouble

instance BitwiseCast Word8   Int8   where castBits = fromIntegral
instance BitwiseCast Word16  Int16  where castBits = fromIntegral
instance BitwiseCast Word32  Int32  where castBits = fromIntegral
instance BitwiseCast Word64  Int64  where castBits = fromIntegral
instance BitwiseCast Word128 Int128 where castBits = fromIntegral

instance BitwiseCast Int8   Word8   where castBits = fromIntegral
instance BitwiseCast Int16  Word16  where castBits = fromIntegral
instance BitwiseCast Int32  Word32  where castBits = fromIntegral
instance BitwiseCast Int64  Word64  where castBits = fromIntegral
instance BitwiseCast Int128 Word128 where castBits = fromIntegral