@@ -30,12 +30,10 @@ import Control.Exception (throw)
30import GHC.Fingerprint.Type (Fingerprint(..))
30import GHC.Fingerprint.Type (Fingerprint(..))
31import Data.ByteString (ByteString)
31import Data.ByteString (ByteString)
32import qualified Data.ByteString as BS
32import qualified Data.ByteString as BS
33−import qualified Data.ByteString.Internal as BSI ( unsafeCreate
33+import qualified Data.ByteString.Internal as BSI ( unsafeCreate, toForeignPtr )
37import Foreign.Storable (pokeByteOff, peekByteOff, sizeOf)
34import Foreign.Storable (pokeByteOff, peekByteOff, sizeOf)
38import Foreign.ForeignPtr (withForeignPtr)
35import Foreign.ForeignPtr (withForeignPtr)
36+import System.IO.Unsafe (unsafePerformIO)
40-- | Reification of 'Serializable' (see "Control.Distributed.Process.Closure")
38-- | Reification of 'Serializable' (see "Control.Distributed.Process.Closure")
41data SerializableDict a where
39data SerializableDict a where
@@ -63,7 +61,7 @@ decodeFingerprint :: ByteString -> Fingerprint
63decodeFingerprint bs
61decodeFingerprint bs
64 | BS.length bs /= sizeOfFingerprint =
62 | BS.length bs /= sizeOfFingerprint =
65 throw $ userError "decodeFingerprint: Invalid length"
63 throw $ userError "decodeFingerprint: Invalid length"
66− | otherwise = BSI.inlinePerformIO $ do
64+ | otherwise = unsafePerformIO $ do
67 let (fp, offset, _) = BSI.toForeignPtr bs
65 let (fp, offset, _) = BSI.toForeignPtr bs
68 withForeignPtr fp $ \p -> peekByteOff p offset
66 withForeignPtr fp $ \p -> peekByteOff p offset