GHC.StaticPtr

base-4.8.2.0: Basic libraries

Copyright | (C) 2014 I/O Tweag
License | see libraries/base/LICENSE
Maintainer | cvs-ghc@haskell.org
Stability | internal
Portability | non-portable (GHC Extensions)
Safe Haskell | None
Language | Haskell2010

GHC.StaticPtr

Description

Symbolic references to values.

References to values are usually implemented with memory addresses, and this is practical when communicating values between the different pieces of a single process.

When values are communicated across different processes running in possibly different machines, though, addresses are no longer useful since each process may use different addresses to store a given value.

To solve such concern, the references provided by this module offer a key that can be used to locate the values on each process. Each process maintains a global table of references which can be looked up with a given key. This table is known as the Static Pointer Table. The reference can then be dereferenced to obtain the value.

Synopsis

- data StaticPtr a
- deRefStaticPtr :: StaticPtr a -> a
- type StaticKey = Fingerprint
- staticKey :: StaticPtr a -> StaticKey
- unsafeLookupStaticPtr :: StaticKey -> IO (Maybe (StaticPtr a))
- data StaticPtrInfo = StaticPtrInfo {
  - spInfoPackageKey :: String
  - spInfoModuleName :: String
  - spInfoName :: String
  - spInfoSrcLoc :: (Int, Int)
  }
- staticPtrInfo :: StaticPtr a -> StaticPtrInfo
- staticPtrKeys :: IO [StaticKey]

# Documentation

data StaticPtr a

A reference to a value of type `a`.

deRefStaticPtr :: StaticPtr a -> a

Dereferences a static pointer.

type StaticKey = Fingerprint

A key for `StaticPtrs` that can be serialized and used with `unsafeLookupStaticPtr`.

staticKey :: StaticPtr a -> StaticKey

The `StaticKey` that can be used to look up the given `StaticPtr`.

unsafeLookupStaticPtr :: StaticKey -> IO (Maybe (StaticPtr a))

Looks up a `StaticPtr` by its `StaticKey`.

If the `StaticPtr` is not found returns `Nothing`.

This function is unsafe because the program behavior is undefined if the type of the returned `StaticPtr` does not match the expected one.

data StaticPtrInfo

Miscelaneous information available for debugging purposes.

Constructors

StaticPtrInfo |
Fields spInfoPackageKey :: String Package key of the package where the static pointer is defined spInfoModuleName :: String Name of the module where the static pointer is defined spInfoName :: String An internal name that is distinct for every static pointer defined in a given module. spInfoSrcLoc :: (Int, Int) Source location of the definition of the static pointer as a `(Line, Column)` pair.

Instances

Show StaticPtrInfo |

staticPtrInfo :: StaticPtr a -> StaticPtrInfo

`StaticPtrInfo` of the given `StaticPtr`.

staticPtrKeys :: IO [StaticKey]

A list of all known keys.