{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
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
newStablePtr :: MonadPrim RW m => a -> m (GHC.StablePtr a)
newStablePtr = liftPrimBase . GHC.newStablePtr
deRefStablePtr :: MonadPrim RW m => GHC.StablePtr a -> m a
deRefStablePtr = liftPrimBase . GHC.deRefStablePtr
freeStablePtr :: MonadPrim RW m => GHC.StablePtr a -> m ()
freeStablePtr = liftPrimBase . GHC.freeStablePtr