-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Store a stable pointer in a foreign context to be retrieved later.
--   
--   Store a stable pointer in a foreign context to be retrieved later.
--   Persists through GHCi reloads.
@package foreign-store
@version 0.2


-- | Store a stable pointer in a foreign context to be retrieved later.
--   Persists through GHCi reloads. Not thread-safe.
module Foreign.Store

-- | Write to the store at the given index. If a store doesn't exist,
--   creates one and resizes the store vector to fit. If there is already a
--   store at the given index, deletes that store with <a>deleteStore</a>
--   before replacing it.
--   
--   Not thread-safe.
writeStore :: Store a -> a -> IO ()

-- | Allocates or finds an unallocated store. The index is random. The
--   internal vector of stores grows in size. When stores are deleted the
--   vector does not shrink, but old slots are re-used.
--   
--   Not thread-safe.
newStore :: a -> IO (Store a)

-- | Lookup from the store if an index is allocated.
--   
--   Not thread-safe.
lookupStore :: Word32 -> IO (Maybe (Store a))

-- | Read from the store. If the store has been deleted or is unallocated,
--   this will throw an exception.
--   
--   Not thread-safe.
readStore :: Store a -> IO a

-- | Frees the stable pointer for GC and frees up the slot in the store.
--   Deleting an already deleted store is a no-op. But remember that store
--   numbers are re-used.
--   
--   Not thread-safe.
deleteStore :: Store a -> IO ()

-- | Run the action and store the result.
--   
--   Not thread-safe.
storeAction :: Store a -> IO a -> IO a

-- | Run the action with the value in the store.
--   
--   Not thread-safe.
withStore :: Store a -> (a -> IO b) -> IO b

-- | A hideously unsafe store. Only for use if you are suave.
newtype Store a
Store :: Word32 -> Store a

-- | An exception when working with stores.
data StoreException
StoreNotFound :: StoreException
instance GHC.Classes.Eq (Foreign.Store.Store a)
instance GHC.Show.Show (Foreign.Store.Store a)
instance GHC.Classes.Eq Foreign.Store.StoreException
instance GHC.Show.Show Foreign.Store.StoreException
instance GHC.Exception.Exception Foreign.Store.StoreException
