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
- modulePragmas :: Set Text
- moduleGHCOpts :: Set Text
- moduleFlags :: Set ModuleFlag
- moduleDoc :: Maybe Text
- moduleMinBase :: BaseVersion
- data ModuleFlag
- 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]
- writeModuleCode :: Bool -> Maybe FilePath -> ModuleInfo -> IO [Text]
- codeToText :: Code -> Text
- transitiveModuleDeps :: ModuleInfo -> Deps
- minBaseVersion :: ModuleInfo -> BaseVersion
- data BaseVersion
- showBaseVersion :: BaseVersion -> Text
- loadDependency :: Text -> CodeGen ()
- 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)
- findAPIByName :: Name -> CodeGen API
- getAPIs :: CodeGen (Map Name API)
- config :: CodeGen Config
- currentModule :: CodeGen Text
- (<>) :: Monoid m => m -> m -> m
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. |
NoTypesImport | Do not import a Types submodule. |
NoCallbacksImport | Do not import a Callbacks submodule. |
Reexport | Reexport the module (as is) from .Types |
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. This also writes the submodules, and a Types submodule reexporting all interfaces defined in .hs-boot files. It returns the list of written modules.
writeModuleCode :: 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.
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.
loadDependency :: Text -> CodeGen () Source
Mark the given dependency as used by the module.
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 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.
findAPIByName :: Name -> CodeGen API Source
currentModule :: CodeGen Text Source
Return the name of the current module.