packages feed

MicroHs-0.15.0.0: lib/Foreign/StablePtr.hs

module Foreign.StablePtr(
  StablePtr,
  newStablePtr,
  deRefStablePtr,
  freeStablePtr,
  castStablePtrToPtr,
  castPtrToStablePtr,
  ) where
import qualified Prelude()
import Mhs.Builtin
import MiniPrelude
import Primitives
import Data.Typeable
import Foreign.Storable

newtype StablePtr a = StablePtr Word
  deriving (Typeable)
  deriving newtype (Storable)

instance Eq (StablePtr a) where
  StablePtr a == StablePtr a'  =  a == a'

instance Show (StablePtr a) where
  show (StablePtr sp) = "StablePtr#" ++ show sp

newStablePtr :: a -> IO (StablePtr a)
newStablePtr a = StablePtr <$> primNewStablePtr a

deRefStablePtr :: StablePtr a -> IO a
deRefStablePtr (StablePtr sp) = primDeRefStablePtr sp

freeStablePtr :: StablePtr a -> IO ()
freeStablePtr (StablePtr sp) = primFreeStablePtr sp

castStablePtrToPtr :: StablePtr a -> Ptr ()
castStablePtrToPtr (StablePtr sp) = primWordToPtr sp

castPtrToStablePtr :: Ptr () -> StablePtr a
castPtrToStablePtr = StablePtr . primPtrToWord