Safe Haskell | None |
---|---|
Language | Haskell2010 |
Types for referring to remote objects in Remote GHCi. For more details, see Note [External GHCi pointers] in compilerghciGHCi.hs
For details on Remote GHCi, see Note [Remote GHCi] in compilerghciGHCi.hs.
Synopsis
- newtype RemotePtr a = RemotePtr Word64
- toRemotePtr :: Ptr a -> RemotePtr a
- fromRemotePtr :: RemotePtr a -> Ptr a
- castRemotePtr :: RemotePtr a -> RemotePtr b
- newtype HValue = HValue Any
- data RemoteRef a
- mkRemoteRef :: a -> IO (RemoteRef a)
- localRef :: RemoteRef a -> IO a
- freeRemoteRef :: RemoteRef a -> IO ()
- type HValueRef = RemoteRef HValue
- toHValueRef :: RemoteRef a -> RemoteRef HValue
- data ForeignRef a
- mkForeignRef :: RemoteRef a -> IO () -> IO (ForeignRef a)
- withForeignRef :: ForeignRef a -> (RemoteRef a -> IO b) -> IO b
- type ForeignHValue = ForeignRef HValue
- unsafeForeignRefToRemoteRef :: ForeignRef a -> RemoteRef a
- finalizeForeignRef :: ForeignRef a -> IO ()
Documentation
toRemotePtr :: Ptr a -> RemotePtr a Source #
fromRemotePtr :: RemotePtr a -> Ptr a Source #
castRemotePtr :: RemotePtr a -> RemotePtr b Source #
A reference to a remote value. These are allocated and freed explicitly.
mkRemoteRef :: a -> IO (RemoteRef a) Source #
Make a reference to a local value that we can send remotely.
This reference will keep the value that it refers to alive until
freeRemoteRef
is called.
localRef :: RemoteRef a -> IO a Source #
Convert an HValueRef to an HValue. Should only be used if the HValue originated in this process.
freeRemoteRef :: RemoteRef a -> IO () Source #
Release an HValueRef that originated in this process
data ForeignRef a Source #
An HValueRef with a finalizer
Instances
NFData (ForeignRef a) Source # | |
rnf :: ForeignRef a -> () # |
mkForeignRef :: RemoteRef a -> IO () -> IO (ForeignRef a) Source #
Create a ForeignRef
from a RemoteRef
. The finalizer
should arrange to call freeHValueRef
on the HValueRef
. (since
this function needs to be called in the process that created the
HValueRef
, it cannot be called directly from the finalizer).
withForeignRef :: ForeignRef a -> (RemoteRef a -> IO b) -> IO b Source #
Use a ForeignHValue
type ForeignHValue = ForeignRef HValue Source #
unsafeForeignRefToRemoteRef :: ForeignRef a -> RemoteRef a Source #
finalizeForeignRef :: ForeignRef a -> IO () Source #