{-# LANGUAGE Trustworthy #-} module Data.Columbia.Coercion (floatToInt32, int32ToFloat) where import Foreign.Marshal.Utils import Foreign.Storable import Foreign.Ptr import System.IO.Unsafe import Data.Int {-# INLINE unsafeCoerceBits #-} unsafeCoerceBits :: (Storable t, Storable u) => t -> u unsafeCoerceBits n = unsafePerformIO$with n(peek.castPtr) floatToInt32 :: Float -> Int32 floatToInt32 = unsafeCoerceBits int32ToFloat :: Int32 -> Float int32ToFloat = unsafeCoerceBits