[project @ 2002-05-09 13:16:29 by simonmar]
[ghc-base.git] / Foreign / StablePtr.hs
index 5b94104..cc53e9c 100644 (file)
@@ -1,35 +1,48 @@
 {-# OPTIONS -fno-implicit-prelude #-}
 -----------------------------------------------------------------------------
--- 
+-- |
 -- Module      :  Foreign.StablePtr
 -- Copyright   :  (c) The University of Glasgow 2001
--- License     :  BSD-style (see the file libraries/core/LICENSE)
+-- License     :  BSD-style (see the file libraries/base/LICENSE)
 -- 
 -- Maintainer  :  ffi@haskell.org
--- Stability   :  experimental
--- Portability :  non-portable
---
--- $Id: StablePtr.hs,v 1.1 2001/06/28 14:15:03 simonmar Exp $
+-- Stability   :  provisional
+-- Portability :  portable
 --
--- Stable pointers.
+-- This module is part of the Foreign Function Interface (FFI) and will usually
+-- be imported via the module "Foreign".
 --
 -----------------------------------------------------------------------------
 
+
 module Foreign.StablePtr
-        ( StablePtr,         -- abstract
+        ( -- * Stable references to Haskell 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
-        ) where
+       , -- ** The C-side interface
 
-import Data.Dynamic
+         -- $cinterface
+        ) where
 
 #ifdef __GLASGOW_HASKELL__
 import GHC.Stable
 import GHC.Err
 #endif
 
-#include "Dynamic.h"
-INSTANCE_TYPEABLE1(StablePtr,stablePtrTc,"StablePtr")
+
+-- $cinterface
+--
+-- The following definition is available to C programs inter-operating with
+-- Haskell 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 refereed to by the stable pointer.