ghc-9.10.3: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Types.ForeignCall

Synopsis

- newtype ForeignCall = CCall CCallSpec
- isSafeForeignCall :: ForeignCall -> Bool
- data Safety
  - = PlaySafe
  - | PlayInterruptible
  - | PlayRisky
- playSafe :: Safety -> Bool
- playInterruptible :: Safety -> Bool
- data CExportSpec = CExportStatic SourceText CLabelString CCallConv
- type CLabelString = FastString
- isCLabelString :: CLabelString -> Bool
- pprCLabelString :: CLabelString -> SDoc
- data CCallSpec = CCallSpec CCallTarget CCallConv Safety
- data CCallTarget
  - = StaticTarget SourceText CLabelString (Maybe Unit) Bool
  - | DynamicTarget
- isDynamicTarget :: CCallTarget -> Bool
- data CCallConv
  - = CCallConv
  - | CApiConv
  - | StdCallConv
  - | PrimCallConv
  - | JavaScriptCallConv
- defaultCCallConv :: CCallConv
- ccallConvToInt :: CCallConv -> Int
- ccallConvAttribute :: CCallConv -> SDoc
- data Header = Header SourceText FastString
- data CType = CType SourceText (Maybe Header) (SourceText, FastString)

# Documentation

newtype ForeignCall Source #

Constructors

CCall CCallSpec |

#### Instances

Instances details

Binary ForeignCall Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> ForeignCall -> IO () Source # put :: BinHandle -> ForeignCall -> IO (Bin ForeignCall) Source # get :: BinHandle -> IO ForeignCall Source #
Outputable ForeignCall Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: ForeignCall -> SDoc Source #
Eq ForeignCall Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: ForeignCall -> ForeignCall -> Bool # (/=) :: ForeignCall -> ForeignCall -> Bool #

isSafeForeignCall :: ForeignCall -> Bool Source #

data Safety Source #

Constructors

PlaySafe | Might invoke Haskell GC, or do a call back, or switch threads, etc. So make sure things are tidy before the call. Additionally, in the threaded RTS we arrange for the external call to be executed by a separate OS thread, i.e., _concurrently_ to the execution of other Haskell threads.
PlayInterruptible | Like PlaySafe, but additionally the worker thread running this foreign call may be unceremoniously killed, so it must be scheduled on an unbound thread.

PlayRisky

None of the above can happen; the call will return without interacting with the runtime system at all. Specifically:

- No GC
- No call backs
- No blocking
- No precise exceptions

#### Instances

Instances details

Binary Safety Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> Safety -> IO () Source # put :: BinHandle -> Safety -> IO (Bin Safety) Source # get :: BinHandle -> IO Safety Source #
Outputable Safety Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: Safety -> SDoc Source #
Data Safety Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Safety -> c Safety #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Safety #

toConstr :: Safety -> Constr #

dataTypeOf :: Safety -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Safety) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Safety) #

gmapT :: (forall b. Data b => b -> b) -> Safety -> Safety #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Safety -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Safety -> r #

gmapQ :: (forall d. Data d => d -> u) -> Safety -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Safety -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Safety -> m Safety #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Safety -> m Safety #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Safety -> m Safety #

Enum Safety Source # |
Instance details Defined in GHC.Types.ForeignCall Methods succ :: Safety -> Safety # pred :: Safety -> Safety # toEnum :: Int -> Safety # fromEnum :: Safety -> Int # enumFrom :: Safety -> [Safety] # enumFromThen :: Safety -> Safety -> [Safety] # enumFromTo :: Safety -> Safety -> [Safety] # enumFromThenTo :: Safety -> Safety -> Safety -> [Safety] #
Show Safety Source # |
Instance details Defined in GHC.Types.ForeignCall Methods showsPrec :: Int -> Safety -> ShowS # show :: Safety -> String # showList :: [Safety] -> ShowS #
Eq Safety Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: Safety -> Safety -> Bool # (/=) :: Safety -> Safety -> Bool #
type Anno Safety Source # |
Instance details Defined in GHC.Hs.Decls type Anno Safety = EpaLocation

playSafe :: Safety -> Bool Source #

playInterruptible :: Safety -> Bool Source #

data CExportSpec Source #

Constructors

CExportStatic SourceText CLabelString CCallConv |

#### Instances

Instances details

Binary CExportSpec Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> CExportSpec -> IO () Source # put :: BinHandle -> CExportSpec -> IO (Bin CExportSpec) Source # get :: BinHandle -> IO CExportSpec Source #
Outputable CExportSpec Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: CExportSpec -> SDoc Source #
Data CExportSpec Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CExportSpec -> c CExportSpec #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CExportSpec #

toConstr :: CExportSpec -> Constr #

dataTypeOf :: CExportSpec -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CExportSpec) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CExportSpec) #

gmapT :: (forall b. Data b => b -> b) -> CExportSpec -> CExportSpec #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CExportSpec -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CExportSpec -> r #

gmapQ :: (forall d. Data d => d -> u) -> CExportSpec -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> CExportSpec -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> CExportSpec -> m CExportSpec #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CExportSpec -> m CExportSpec #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CExportSpec -> m CExportSpec #

type Anno CExportSpec Source # |
Instance details Defined in GHC.Hs.Decls type Anno CExportSpec = EpaLocation

type CLabelString = FastString Source #

isCLabelString :: CLabelString -> Bool Source #

pprCLabelString :: CLabelString -> SDoc Source #

data CCallSpec Source #

Constructors

CCallSpec CCallTarget CCallConv Safety |

#### Instances

Instances details

Binary CCallSpec Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> CCallSpec -> IO () Source # put :: BinHandle -> CCallSpec -> IO (Bin CCallSpec) Source # get :: BinHandle -> IO CCallSpec Source #
Outputable CCallSpec Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: CCallSpec -> SDoc Source #
Eq CCallSpec Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: CCallSpec -> CCallSpec -> Bool # (/=) :: CCallSpec -> CCallSpec -> Bool #

data CCallTarget Source #

How to call a particular function in C-land.

Constructors

StaticTarget SourceText CLabelString (Maybe Unit) Bool |
DynamicTarget |

#### Instances

Instances details

Binary CCallTarget Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> CCallTarget -> IO () Source # put :: BinHandle -> CCallTarget -> IO (Bin CCallTarget) Source # get :: BinHandle -> IO CCallTarget Source #
Data CCallTarget Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CCallTarget -> c CCallTarget #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CCallTarget #

toConstr :: CCallTarget -> Constr #

dataTypeOf :: CCallTarget -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CCallTarget) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCallTarget) #

gmapT :: (forall b. Data b => b -> b) -> CCallTarget -> CCallTarget #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CCallTarget -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CCallTarget -> r #

gmapQ :: (forall d. Data d => d -> u) -> CCallTarget -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> CCallTarget -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> CCallTarget -> m CCallTarget #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CCallTarget -> m CCallTarget #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CCallTarget -> m CCallTarget #

Eq CCallTarget Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: CCallTarget -> CCallTarget -> Bool # (/=) :: CCallTarget -> CCallTarget -> Bool #

isDynamicTarget :: CCallTarget -> Bool Source #

data CCallConv Source #

Constructors

CCallConv |
CApiConv |
StdCallConv |
PrimCallConv |
JavaScriptCallConv |

#### Instances

Instances details

Binary CCallConv Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> CCallConv -> IO () Source # put :: BinHandle -> CCallConv -> IO (Bin CCallConv) Source # get :: BinHandle -> IO CCallConv Source #
Outputable CCallConv Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: CCallConv -> SDoc Source #
Data CCallConv Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CCallConv -> c CCallConv #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CCallConv #

toConstr :: CCallConv -> Constr #

dataTypeOf :: CCallConv -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CCallConv) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCallConv) #

gmapT :: (forall b. Data b => b -> b) -> CCallConv -> CCallConv #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CCallConv -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CCallConv -> r #

gmapQ :: (forall d. Data d => d -> u) -> CCallConv -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> CCallConv -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> CCallConv -> m CCallConv #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CCallConv -> m CCallConv #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CCallConv -> m CCallConv #

Enum CCallConv Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

succ :: CCallConv -> CCallConv #

pred :: CCallConv -> CCallConv #

toEnum :: Int -> CCallConv #

fromEnum :: CCallConv -> Int #

enumFrom :: CCallConv -> [CCallConv] #

enumFromThen :: CCallConv -> CCallConv -> [CCallConv] #

enumFromTo :: CCallConv -> CCallConv -> [CCallConv] #

enumFromThenTo :: CCallConv -> CCallConv -> CCallConv -> [CCallConv] #

Eq CCallConv Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: CCallConv -> CCallConv -> Bool # (/=) :: CCallConv -> CCallConv -> Bool #
type Anno CCallConv Source # |
Instance details Defined in GHC.Hs.Decls type Anno CCallConv = EpaLocation

defaultCCallConv :: CCallConv Source #

ccallConvToInt :: CCallConv -> Int Source #

ccallConvAttribute :: CCallConv -> SDoc Source #

data Header Source #

Constructors

Header SourceText FastString |

#### Instances

Instances details

Binary Header Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> Header -> IO () Source # put :: BinHandle -> Header -> IO (Bin Header) Source # get :: BinHandle -> IO Header Source #
Outputable Header Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: Header -> SDoc Source #
Data Header Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Header -> c Header #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Header #

toConstr :: Header -> Constr #

dataTypeOf :: Header -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Header) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Header) #

gmapT :: (forall b. Data b => b -> b) -> Header -> Header #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Header -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Header -> r #

gmapQ :: (forall d. Data d => d -> u) -> Header -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Header -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Header -> m Header #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Header -> m Header #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Header -> m Header #

Eq Header Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: Header -> Header -> Bool # (/=) :: Header -> Header -> Bool #

data CType Source #

A C type, used in CAPI FFI calls

- `AnnKeywordId` : `AnnOpen` `'{-# CTYPE'`, `AnnHeader`,`AnnVal`, `AnnClose` `'#-}'`,

Constructors

CType SourceText (Maybe Header) (SourceText, FastString) |

#### Instances

Instances details

Binary CType Source # |
Instance details Defined in GHC.Types.ForeignCall Methods put_ :: BinHandle -> CType -> IO () Source # put :: BinHandle -> CType -> IO (Bin CType) Source # get :: BinHandle -> IO CType Source #
Outputable CType Source # |
Instance details Defined in GHC.Types.ForeignCall Methods ppr :: CType -> SDoc Source #
Data CType Source # |

Instance details

Defined in GHC.Types.ForeignCall

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CType -> c CType #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CType #

toConstr :: CType -> Constr #

dataTypeOf :: CType -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CType) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CType) #

gmapT :: (forall b. Data b => b -> b) -> CType -> CType #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CType -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CType -> r #

gmapQ :: (forall d. Data d => d -> u) -> CType -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> CType -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> CType -> m CType #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CType -> m CType #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CType -> m CType #

Eq CType Source # |
Instance details Defined in GHC.Types.ForeignCall Methods (==) :: CType -> CType -> Bool # (/=) :: CType -> CType -> Bool #
type Anno CType Source # |
Instance details Defined in GHC.Hs.Decls type Anno CType = SrcSpanAnnP