1
{-# OPTIONS_GHC -XNoImplicitPrelude #-}
2
-----------------------------------------------------------------------------
4
-- Module : Foreign.StablePtr
5
-- Copyright : (c) The University of Glasgow 2001
6
-- License : BSD-style (see the file libraries/base/LICENSE)
8
-- Maintainer : ffi@haskell.org
9
-- Stability : provisional
10
-- Portability : portable
12
-- This module is part of the Foreign Function Interface (FFI) and will usually
13
-- be imported via the module "Foreign".
15
-----------------------------------------------------------------------------
18
module Foreign.StablePtr
19
( -- * Stable references to Haskell values
21
, newStablePtr -- :: a -> IO (StablePtr a)
22
, deRefStablePtr -- :: StablePtr a -> IO a
23
, freeStablePtr -- :: StablePtr a -> IO ()
24
, castStablePtrToPtr -- :: StablePtr a -> Ptr ()
25
, castPtrToStablePtr -- :: Ptr () -> StablePtr a
26
, -- ** The C-side interface
31
#ifdef __GLASGOW_HASKELL__
52
-- The following definition is available to C programs inter-operating with
53
-- Haskell code when including the header @HsFFI.h@.
55
-- > typedef void *HsStablePtr; /* C representation of a StablePtr */
57
-- Note that no assumptions may be made about the values representing stable
58
-- pointers. In fact, they need not even be valid memory addresses. The only
59
-- guarantee provided is that if they are passed back to Haskell land, the
60
-- function 'deRefStablePtr' will be able to reconstruct the
61
-- Haskell value referred to by the stable pointer.