{-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-orphans #-} -- | -- Module : Foreign.Prim.StablePtr -- Copyright : (c) Alexey Kuleshevich 2020 -- License : BSD3 -- Maintainer : Alexey Kuleshevich -- Stability : experimental -- Portability : non-portable -- module Foreign.Prim.StablePtr ( GHC.StablePtr(..) , newStablePtr , deRefStablePtr , freeStablePtr , GHC.castStablePtrToPtr , GHC.castPtrToStablePtr ) where import Control.DeepSeq import Control.Prim.Monad import qualified GHC.Stable as GHC instance NFData (GHC.StablePtr a) where rnf (GHC.StablePtr _) = () instance Show (GHC.StablePtr a) where show = show . GHC.castStablePtrToPtr -- | Same as `GHC.newStablePtr`, but generalized to `MonadPrim` newStablePtr :: MonadPrim RW m => a -> m (GHC.StablePtr a) newStablePtr = liftPrimBase . GHC.newStablePtr -- | Same as `GHC.deRefStablePtr`, but generalized to `MonadPrim` deRefStablePtr :: MonadPrim RW m => GHC.StablePtr a -> m a deRefStablePtr = liftPrimBase . GHC.deRefStablePtr -- | Same as `GHC.freeStablePtr`, but generalized to `MonadPrim` freeStablePtr :: MonadPrim RW m => GHC.StablePtr a -> m () freeStablePtr = liftPrimBase . GHC.freeStablePtr