| Haskell Hierarchical Libraries (base package) | Contents | Index

Foreign.StablePtr

Portability | portable
Stability | provisional
Maintainer | ffi@haskell.org

Contents

Stable references to Haskell values
  The C-side interface

Description
This module is part of the Foreign Function Interface (FFI) and will usually be imported via the module Foreign.
Synopsis

data StablePtr a
newStablePtr :: a -> IO (StablePtr a)
deRefStablePtr :: StablePtr a -> IO a
freeStablePtr :: StablePtr a -> IO ()
castStablePtrToPtr :: StablePtr a -> Ptr ()
castPtrToStablePtr :: Ptr () -> StablePtr a

Stable references to Haskell values
data StablePtr a

Instances

IArray UArray (StablePtr a)
Ix ix => Eq (UArray ix (StablePtr a))
MArray (STUArray s) (StablePtr a) (ST s)
IArray (IOToDiffArray IOUArray) (StablePtr a)
MArray IOUArray (StablePtr a) IO
Typeable a => Typeable (StablePtr a)
Storable (StablePtr a)
Eq (StablePtr a)

newStablePtr :: a -> IO (StablePtr a)
deRefStablePtr :: StablePtr a -> IO a
freeStablePtr :: StablePtr a -> IO ()
castStablePtrToPtr :: StablePtr a -> Ptr ()
castPtrToStablePtr :: Ptr () -> StablePtr a
The C-side interface

The following definition is available to C programs inter-operating with Haskell code when including the header `HsFFI.h`.

     typedef void *HsStablePtr;

Note that no assumptions may be made about the values representing stable pointers. In fact, they need not even be valid memory addresses. The only guarantee provided is that if they are passed back to Haskell land, the function `deRefStablePtr` will be able to reconstruct the Haskell value refereed to by the stable pointer.

Produced by Haddock version 0.6