Safe Haskell | None |
---|---|
Language | Haskell98 |
- data Code
- data ModuleInfo = ModuleInfo {
- moduleName :: ModuleName
- moduleCode :: Code
- bootCode :: Code
- submodules :: Map Text ModuleInfo
- moduleDeps :: Deps
- moduleExports :: Seq Export
- qualifiedImports :: Set ModuleName
- modulePragmas :: Set Text
- moduleGHCOpts :: Set Text
- moduleFlags :: Set ModuleFlag
- moduleDoc :: Maybe Text
- moduleMinBase :: BaseVersion
- data ModuleFlag = ImplicitPrelude
- type BaseCodeGen excType a = ReaderT CodeGenConfig (StateT ModuleInfo (ExceptT excType IO)) a
- type CodeGen a = forall e. BaseCodeGen e a
- type ExcCodeGen a = BaseCodeGen CGError a
- data CGError
- = CGErrorNotImplemented Text
- | CGErrorBadIntrospectionInfo Text
- | CGErrorMissingInfo Text
- genCode :: Config -> Map Name API -> ModuleName -> CodeGen () -> IO ModuleInfo
- evalCodeGen :: Config -> Map Name API -> ModuleName -> CodeGen a -> IO (a, ModuleInfo)
- writeModuleTree :: Bool -> Maybe FilePath -> ModuleInfo -> IO [Text]
- listModuleTree :: ModuleInfo -> [Text]
- codeToText :: Code -> Text
- transitiveModuleDeps :: ModuleInfo -> Deps
- minBaseVersion :: ModuleInfo -> BaseVersion
- data BaseVersion
- showBaseVersion :: BaseVersion -> Text
- type ModuleName = [Text]
- registerNSDependency :: Text -> CodeGen ()
- qualified :: ModuleName -> Name -> CodeGen Text
- getDeps :: CodeGen Deps
- recurseWithAPIs :: Map Name API -> CodeGen () -> CodeGen ()
- handleCGExc :: (CGError -> CodeGen a) -> ExcCodeGen a -> CodeGen a
- describeCGError :: CGError -> Text
- notImplementedError :: Text -> ExcCodeGen a
- badIntroError :: Text -> ExcCodeGen a
- missingInfoError :: Text -> ExcCodeGen a
- indent :: BaseCodeGen e a -> BaseCodeGen e a
- bline :: Text -> CodeGen ()
- line :: Text -> CodeGen ()
- blank :: CodeGen ()
- group :: BaseCodeGen e a -> BaseCodeGen e a
- hsBoot :: BaseCodeGen e a -> BaseCodeGen e a
- submodule :: [Text] -> BaseCodeGen e () -> BaseCodeGen e ()
- setLanguagePragmas :: [Text] -> CodeGen ()
- setGHCOptions :: [Text] -> CodeGen ()
- setModuleFlags :: [ModuleFlag] -> CodeGen ()
- setModuleMinBase :: BaseVersion -> CodeGen ()
- addModuleDocumentation :: Maybe Documentation -> CodeGen ()
- exportToplevel :: SymbolName -> CodeGen ()
- exportModule :: SymbolName -> CodeGen ()
- exportDecl :: SymbolName -> CodeGen ()
- exportMethod :: HaddockSection -> SymbolName -> CodeGen ()
- exportProperty :: HaddockSection -> SymbolName -> CodeGen ()
- exportSignal :: HaddockSection -> SymbolName -> CodeGen ()
- findAPI :: Type -> CodeGen (Maybe API)
- getAPI :: Type -> CodeGen API
- findAPIByName :: Name -> CodeGen API
- getAPIs :: CodeGen (Map Name API)
- config :: CodeGen Config
- currentModule :: CodeGen Text
Documentation
data ModuleInfo Source #
Information on a generated module.
ModuleInfo | |
|
data ModuleFlag Source #
Flags for module code generation.
ImplicitPrelude | Use the standard prelude, instead of the haskell-gi-base short one. |
type BaseCodeGen excType a = ReaderT CodeGenConfig (StateT ModuleInfo (ExceptT excType IO)) a Source #
type CodeGen a = forall e. BaseCodeGen e a Source #
The code generator monad, for generators that cannot throw
errors. The fact that they cannot throw errors is encoded in the
forall, which disallows any operation on the error, except
discarding it or passing it along without inspecting. This last
operation is useful in order to allow embedding CodeGen
computations inside ExcCodeGen
computations, while disallowing
the opposite embedding without explicit error handling.
type ExcCodeGen a = BaseCodeGen CGError a Source #
Code generators that can throw errors.
CGErrorNotImplemented Text | |
CGErrorBadIntrospectionInfo Text | |
CGErrorMissingInfo Text |
genCode :: Config -> Map Name API -> ModuleName -> CodeGen () -> IO ModuleInfo Source #
Like evalCodeGen
, but discard the resulting output value.
evalCodeGen :: Config -> Map Name API -> ModuleName -> CodeGen a -> IO (a, ModuleInfo) Source #
Run a code generator, and return the information for the generated module together with the return value of the generator.
writeModuleTree :: Bool -> Maybe FilePath -> ModuleInfo -> IO [Text] Source #
Write down the code for a module and its submodules to disk under the given base directory. It returns the list of written modules.
listModuleTree :: ModuleInfo -> [Text] Source #
Return the list of modules writeModuleTree
would write, without
actually writing anything to disk.
codeToText :: Code -> Text Source #
Return a text representation of the Code
.
transitiveModuleDeps :: ModuleInfo -> Deps Source #
Return the transitive set of dependencies, i.e. the union of those of the module and (transitively) its submodules.
minBaseVersion :: ModuleInfo -> BaseVersion Source #
Return the minimal base version supported by the module and all its submodules.
data BaseVersion Source #
Minimal version of base supported by a given module.
showBaseVersion :: BaseVersion -> Text Source #
A Text
representation of the given base version bound.
type ModuleName = [Text] Source #
registerNSDependency :: Text -> CodeGen () Source #
Mark the given dependency as used by the module.
qualified :: ModuleName -> Name -> CodeGen Text Source #
Given a module name and a symbol in the module (including a proper namespace), return a qualified name for the symbol.
recurseWithAPIs :: Map Name API -> CodeGen () -> CodeGen () Source #
Like recurse
, giving explicitly the set of loaded APIs for the
subgenerator.
handleCGExc :: (CGError -> CodeGen a) -> ExcCodeGen a -> CodeGen a Source #
Try running the given action
, and if it fails run fallback
instead.
describeCGError :: CGError -> Text Source #
Give a friendly textual description of the error for presenting to the user.
notImplementedError :: Text -> ExcCodeGen a Source #
badIntroError :: Text -> ExcCodeGen a Source #
missingInfoError :: Text -> ExcCodeGen a Source #
indent :: BaseCodeGen e a -> BaseCodeGen e a Source #
Increase the indent level for code generation.
bline :: Text -> CodeGen () Source #
Print out the given line both to the normal module, and to the HsBoot file.
group :: BaseCodeGen e a -> BaseCodeGen e a Source #
Group a set of related code.
hsBoot :: BaseCodeGen e a -> BaseCodeGen e a Source #
Write the given code into the .hs-boot file for the current module.
submodule :: [Text] -> BaseCodeGen e () -> BaseCodeGen e () Source #
Run the given CodeGen in order to generate a submodule (specified an an ordered list) of the current module.
setLanguagePragmas :: [Text] -> CodeGen () Source #
Set the language pragmas for the current module.
setGHCOptions :: [Text] -> CodeGen () Source #
Set the GHC options for compiling this module (in a OPTIONS_GHC pragma).
setModuleFlags :: [ModuleFlag] -> CodeGen () Source #
Set the given flags for the module.
setModuleMinBase :: BaseVersion -> CodeGen () Source #
Set the minimum base version supported by the current module.
addModuleDocumentation :: Maybe Documentation -> CodeGen () Source #
Add the given text to the module-level documentation for the module being generated.
exportToplevel :: SymbolName -> CodeGen () Source #
Export a toplevel (i.e. belonging to no section) symbol.
exportModule :: SymbolName -> CodeGen () Source #
Reexport a whole module.
exportDecl :: SymbolName -> CodeGen () Source #
Add a type declaration-related export.
exportMethod :: HaddockSection -> SymbolName -> CodeGen () Source #
Add a method export under the given section.
exportProperty :: HaddockSection -> SymbolName -> CodeGen () Source #
Add a property-related export under the given section.
exportSignal :: HaddockSection -> SymbolName -> CodeGen () Source #
Add a signal-related export under the given section.
getAPI :: Type -> CodeGen API Source #
Find the API associated with a given type. If the API cannot be
found this raises an error
.
currentModule :: CodeGen Text Source #
Return the name of the current module.