# OPTIONS_GHC -fno - implicit - prelude #
-----------------------------------------------------------------------------
-- |
-- Module      :  Foreign.StablePtr
  Copyright    :   ( c ) The University of Glasgow 2001
-- License     :  BSD-style (see the file libraries/base/LICENSE)
-- 
  Maintainer   :   
-- Stability   :  provisional
-- Portability :  portable
--
  This module is part of the Foreign Function Interface ( FFI ) and will usually
-- be imported via the module "Foreign".
--
-----------------------------------------------------------------------------


module Foreign.StablePtr
  * Stable references to  values
	  StablePtr          -- abstract
        , 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

	  -- $cinterface
        ) where

#ifdef __GLASGOW_HASKELL__
import GHC.Stable
import GHC.Err
#endif

#ifdef __HUGS__
import Hugs.StablePtr
#endif

#ifdef __NHC__
import NHC.FFI
  ( StablePtr
  , newStablePtr
  , deRefStablePtr
  , freeStablePtr
  , castStablePtrToPtr
  , castPtrToStablePtr
  )
#endif

-- $cinterface
--
-- The following definition is available to C programs inter-operating with
   code when including the header @HsFFI.h@.
--
-- > typedef void *HsStablePtr;  /* C representation of a StablePtr */
--
-- 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 referred to by the stable pointer .

---------------------------------------------------------------------------
 |
 Module      :  Foreign.StablePtr
 License     :  BSD-style (see the file libraries/base/LICENSE)
 
 Stability   :  provisional
 Portability :  portable

 be imported via the module "Foreign".

---------------------------------------------------------------------------
 abstract
 :: a -> IO (StablePtr a)
 :: StablePtr a -> IO a
 :: StablePtr a -> IO ()
 :: StablePtr a -> Ptr ()
 :: Ptr () -> StablePtr a
 ** The C-side interface
 $cinterface
 $cinterface

 The following definition is available to C programs inter-operating with

 > typedef void *HsStablePtr;  /* C representation of a StablePtr */

 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
 function 'deRefStablePtr' will be able to reconstruct the
# OPTIONS_GHC -fno - implicit - prelude #
  Copyright    :   ( c ) The University of Glasgow 2001
  Maintainer   :   
  This module is part of the Foreign Function Interface ( FFI ) and will usually


module Foreign.StablePtr
  * Stable references to  values

        ) where

#ifdef __GLASGOW_HASKELL__
import GHC.Stable
import GHC.Err
#endif

#ifdef __HUGS__
import Hugs.StablePtr
#endif

#ifdef __NHC__
import NHC.FFI
  ( StablePtr
  , newStablePtr
  , deRefStablePtr
  , freeStablePtr
  , castStablePtrToPtr
  , castPtrToStablePtr
  )
#endif

   code when including the header @HsFFI.h@.
  guarantee provided is that if they are passed back to Haskell land , the
  Haskell value referred to by the stable pointer .
