haskell-gi-0.14: Generate Haskell bindings for GObject Introspection capable libraries

Safe HaskellNone
LanguageHaskell98

Data.GI.CodeGen.Code

Synopsis

Documentation

data Code Source

Constructors

NoCode

No code

Line Text

A single line, indented to current indentation

Indent Code

Indented region

Sequence (Seq Code)

The basic sequence of code

Group Code

A grouped set of lines

Instances

data ModuleInfo Source

Information on a generated module.

Constructors

ModuleInfo 

Fields

moduleName :: ModuleName

Full module name: [GI, Gtk, Label].

moduleCode :: Code

Generated code for the module.

bootCode :: Code

Interface going into the .hs-boot file.

submodules :: Map Text ModuleInfo

Indexed by the relative module name.

moduleDeps :: Deps

Set of dependencies for this module.

moduleExports :: Seq Export

Exports for the module.

modulePragmas :: Set Text

Set of language pragmas for the module.

moduleGHCOpts :: Set Text

GHC options for compiling the module.

moduleFlags :: Set ModuleFlag

Flags for the module.

moduleDoc :: Maybe Text

Documentation for the module.

moduleMinBase :: BaseVersion

Minimal version of base the module will work on.

data ModuleFlag Source

Flags for module code generation.

Constructors

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.

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.

Constructors

Base47
  1. 7.0
Base48
  1. 8.0

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.

getDeps :: CodeGen Deps Source

Return the currently loaded set of dependencies.

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.

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.

line :: Text -> CodeGen () Source

Print out a (newline-terminated) line.

blank :: CodeGen () Source

A blank line

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.

getAPIs :: CodeGen (Map Name API) Source

Return the list of APIs available to the generator.

config :: CodeGen Config Source

Return the ambient configuration for the code generator.

currentModule :: CodeGen Text Source

Return the name of the current module.

(<>) :: Monoid m => m -> m -> m infixr 6

An infix synonym for mappend.

Since: 4.5.0.0