ghci-8.2.2: The library supporting GHC's interactive interpreter

Safe HaskellNone




Remote GHCi message types and serialization.

For details on Remote GHCi, see Note [Remote GHCi] in compilerghciGHCi.hs.



data Message a where Source #

A Message a is a message that returns a value of type a. These are requests sent from GHC to the server.


Shutdown :: Message ()

Exit the iserv process

InitLinker :: Message () 
LookupSymbol :: String -> Message (Maybe (RemotePtr ())) 
LookupClosure :: String -> Message (Maybe HValueRef) 
LoadDLL :: String -> Message (Maybe String) 
LoadArchive :: String -> Message () 
LoadObj :: String -> Message () 
UnloadObj :: String -> Message () 
AddLibrarySearchPath :: String -> Message (RemotePtr ()) 
RemoveLibrarySearchPath :: RemotePtr () -> Message Bool 
ResolveObjs :: Message Bool 
FindSystemLibrary :: String -> Message (Maybe String) 
CreateBCOs :: [ByteString] -> Message [HValueRef]

Create a set of BCO objects, and return HValueRefs to them Note: Each ByteString contains a Binary-encoded [ResolvedBCO], not a ResolvedBCO. The list is to allow us to serialise the ResolvedBCOs in parallel. See createBCOs in compilerghciGHCi.hsc.

FreeHValueRefs :: [HValueRef] -> Message ()

Release HValueRefs

AddSptEntry :: Fingerprint -> HValueRef -> Message ()

Add entries to the Static Pointer Table

MallocData :: ByteString -> Message (RemotePtr ())

Malloc some data and return a RemotePtr to it

MallocStrings :: [ByteString] -> Message [RemotePtr ()] 
PrepFFI :: FFIConv -> [FFIType] -> FFIType -> Message (RemotePtr C_ffi_cif)

Calls prepareForeignCall

FreeFFI :: RemotePtr C_ffi_cif -> Message ()

Free data previously created by PrepFFI

MkConInfoTable :: Int -> Int -> Int -> Int -> [Word8] -> Message (RemotePtr StgInfoTable)

Create an info table for a constructor

EvalStmt :: EvalOpts -> EvalExpr HValueRef -> Message (EvalStatus [HValueRef])

Evaluate a statement

ResumeStmt :: EvalOpts -> RemoteRef (ResumeContext [HValueRef]) -> Message (EvalStatus [HValueRef])

Resume evaluation of a statement after a breakpoint

AbandonStmt :: RemoteRef (ResumeContext [HValueRef]) -> Message ()

Abandon evaluation of a statement after a breakpoint

EvalString :: HValueRef -> Message (EvalResult String)

Evaluate something of type IO String

EvalStringToString :: HValueRef -> String -> Message (EvalResult String)

Evaluate something of type String -> IO String

EvalIO :: HValueRef -> Message (EvalResult ())

Evaluate something of type IO ()

MkCostCentres :: String -> [(String, String)] -> Message [RemotePtr CostCentre]

Create a set of CostCentres with the same module name

CostCentreStackInfo :: RemotePtr CostCentreStack -> Message [String]

Show a CostCentreStack as a [String]

NewBreakArray :: Int -> Message (RemoteRef BreakArray)

Create a new array of breakpoint flags

EnableBreakpoint :: RemoteRef BreakArray -> Int -> Bool -> Message ()

Enable a breakpoint

BreakpointStatus :: RemoteRef BreakArray -> Int -> Message Bool

Query the status of a breakpoint (True = enabled)

GetBreakpointVar :: HValueRef -> Int -> Message (Maybe HValueRef)

Get a reference to a free variable at a breakpoint

StartTH :: Message (RemoteRef (IORef QState))

Start a new TH module, return a state token that should be

RunTH :: RemoteRef (IORef QState) -> HValueRef -> THResultType -> Maybe Loc -> Message (QResult ByteString)

Evaluate a TH computation.

Returns a ByteString, because we have to force the result before returning it to ensure there are no errors lurking in it. The TH types don't have NFData instances, and even if they did, we have to serialize the value anyway, so we might as well serialize it to force it.

RunModFinalizers :: RemoteRef (IORef QState) -> [RemoteRef (Q ())] -> Message (QResult ())

Run the given mod finalizers.


data Msg Source #


(Binary a, Show a) => Msg (Message a) 

data THMessage a where Source #

Messages sent back to GHC from GHCi.TH, to implement the methods of Quasi. For an overview of how TH works with Remote GHCi, see Note [Remote Template Haskell] in GHCi.TH.

data THMsg Source #


(Binary a, Show a) => THMsg (THMessage a) 

data QResult a Source #

Template Haskell return values


QDone a

RunTH finished successfully; return value follows

QException String

RunTH threw an exception

QFail String

RunTH called fail

data EvalStatus_ a b Source #


Show a => Show (EvalStatus_ a b) # 
Generic (EvalStatus_ a b) # 

Associated Types

type Rep (EvalStatus_ a b) :: * -> * Source #


from :: EvalStatus_ a b -> Rep (EvalStatus_ a b) x Source #

to :: Rep (EvalStatus_ a b) x -> EvalStatus_ a b Source #

Binary a => Binary (EvalStatus_ a b) # 
type Rep (EvalStatus_ a b) # 

data EvalExpr a Source #

We can pass simple expressions to EvalStmt, consisting of values and application. This allows us to wrap the statement to be executed in another function, which is used by GHCi to implement :set args and :set prog. It might be worthwhile to extend this little language in the future.


EvalThis a 
EvalApp (EvalExpr a) (EvalExpr a) 

data THResult a Source #


THException String 
THComplete a 


Show a => Show (THResult a) # 
Generic (THResult a) # 

Associated Types

type Rep (THResult a) :: * -> * Source #


from :: THResult a -> Rep (THResult a) x Source #

to :: Rep (THResult a) x -> THResult a Source #

Binary a => Binary (THResult a) # 
type Rep (THResult a) # 

data QState Source #

The server-side Template Haskell state. This is created by the StartTH message. A new one is created per module that GHC typechecks.




remoteCall :: Binary a => Pipe -> Message a -> IO a Source #

readPipe :: Pipe -> Get a -> IO a Source #

writePipe :: Pipe -> Put -> IO () Source #

Orphan instances