drasil-gool-0.1.1.0: A framework for code and document generation for scientific software - GOOL SubPackage
Safe HaskellNone
LanguageGHC2024

Drasil.Shared.LanguageRenderer.CommonPseudoOO

Description

Implementations defined here are valid in some, but not all, language renderers

Synopsis

Documentation

int :: Monad r => VS (r TypeData) Source #

constructor :: OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var scope val binder typ => Label -> [MS (r param)] -> Initializers r var val -> MS (r bod) -> MS (r mthd) Source #

doxFunc :: (BlockCommentSym r, RenderMethod r mthd) => String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd) Source #

doxClass :: (BlockCommentSym r, RenderClass r cls stvr mthd vis) => String -> CS (r cls) -> CS (r cls) Source #

doxMod :: (BlockCommentSym r, RenderFile r file mod) => String -> String -> String -> [String] -> String -> FS (r file) -> FS (r file) Source #

modDoc' :: ModuleDocRenderer Source #

Generates Markdown/DocC style module doc comment. Useful for Swift, which follows DocC, Julia, which uses Markdown, and any other language that doesn't have Support for a document generator.

functionDoc :: FuncDocRenderer Source #

Generates Markdown/DocC style function doc comment.

extVar :: VariableSym r var typ => Library -> Label -> VS (r typ) -> VS (r var) Source #

An instance- or module-level variable from an external library. Given library Lib, variable name v, and variable type t, it performs the necessary imports and creates v

classVarAccess :: (InternalVarElim r var, RenderVariable r var TypeData, UnRepr r TypeData, VariableElim r var TypeData) => (Doc -> Doc -> Doc) -> VS (r TypeData) -> VS (r var) -> VS (r var) Source #

indexOf :: (TypeSym r typ, IndexTranslator r val, OOFunctionSym r val typ) => Label -> VS (r val) -> VS (r val) -> VS (r val) Source #

contains :: (TypeSym r typ, OOFunctionSym r val typ) => Label -> VS (r val) -> VS (r val) -> VS (r val) Source #

containsInt :: (TypeSym r typ, Comparison r val, OOFunctionSym r val typ) => Label -> Label -> VS (r val) -> VS (r val) -> VS (r val) Source #

discardFileLine :: forall {k} r (typ :: k) (var :: k) (val :: k) (stmt :: k). (TypeSym r typ, InternalValueExp r var val typ, ValueStatement r stmt val) => Label -> VS (r val) -> MS (r stmt) Source #

intClass :: (MethodElim r mthd, Monad r, StateVarElim r stvr, VisibilityElim r vis) => (Label -> Doc -> Doc -> Doc -> Doc -> Doc) -> Label -> r vis -> r ParentSpec -> [CSStateVar r stvr] -> [MS (r mthd)] -> [MS (r mthd)] -> CS (r Doc) Source #

An internal function for creating a class. Parameters: render function, class name, scope, parent, class variables, constructor(s), methods

funcType :: TypeSym r typ => [VS (r typ)] -> VS (r typ) -> VS (r typ) Source #

buildModule :: forall {k} r (cls :: k) (mthd :: k) (mod :: k). (ClassElim r cls, MethodElim r mthd, RenderMod r mod) => Label -> FS Doc -> FS Doc -> FS Doc -> [MS (r mthd)] -> [CS (r cls)] -> FS (r mod) Source #

pi :: forall {k} r (var :: k) (val :: k) (typ :: k). (RenderValue r var val typ, TypeSym r typ) => VS (r val) Source #

printSt :: forall {k} r (stmt :: k) (val :: k). (RenderStatement r stmt, ValueElim r val) => VS (r val) -> VS (r val) -> MS (r stmt) Source #

arrayDec :: (TypeSym r TypeData, ScopeElim r ScopeData, UnRepr r TypeData, InternalVarElim r var, RenderStatement r stmt, ValueElim r val, VariableElim r var TypeData) => VS (r val) -> VS (r var) -> r ScopeData -> MS (r stmt) Source #

arrayDecDef :: forall {k} r (bod :: k) (stmt :: k) (var :: k) (scope :: k) (val :: k). (DeclStatement r bod stmt var scope val, RenderStatement r stmt, StatementElim r stmt, ValueElim r val) => VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt) Source #

openFileA :: forall {k} r (stmt :: k) (var :: k) (val :: k) (typ :: k). (AssignStatement r stmt var val, TypeSym r typ, Literal r val typ) => (VS (r val) -> VS (r typ) -> VS (r val) -> VS (r val)) -> VS (r var) -> VS (r val) -> MS (r stmt) Source #

forEach :: (BodyElim r bod, InternalVarElim r var, RenderStatement r stmt, UnRepr r TypeData, ValueElim r val, VariableElim r var TypeData) => Doc -> Doc -> Doc -> Doc -> VS (r var) -> VS (r val) -> MS (r bod) -> MS (r stmt) Source #

docMain :: OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var scope val binder typ => MS (r bod) -> MS (r mthd) Source #

mainFunction :: (AttachmentSym r attch, TypeSym r TypeData, VariableSym r var TypeData, MethodTypeSym r TypeData, OORenderMethod r mthd attch vis param bod TypeData, ParameterSym r param var, UnRepr r TypeData, Monad r, VisibilitySym r vis) => VS (r TypeData) -> Label -> MS (r bod) -> MS (r mthd) Source #

buildModule' :: (OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var scope val binder typ, UnRepr r Doc) => Label -> (String -> r Doc) -> [Label] -> [MS (r mthd)] -> [CS (r cls)] -> FS (r mod) Source #

Used by the language renderers to build the module. n is the module name inc is the include is is the import statements ms is the class methods cs is the classes

call' :: forall {k} r (var :: k) (val :: k) (typ :: k). (InternalVarElim r var, RenderValue r var val typ, ValueElim r val) => String -> Maybe Library -> Maybe Doc -> MixedCall r var val typ Source #

First parameter is language name, rest similar to call from RendererClassesCommon

listSizeFunc :: (TypeSym r typ, OOFunctionSym r val typ) => VS (r FuncData) Source #

listAccessFunc' :: (ValueSym r val typ, OOFunctionSym r val typ, TypeElim r typ) => Label -> VS (r typ) -> VS (r val) -> VS (r FuncData) Source #

docInOutFunc :: (BlockCommentSym r, RenderMethod r mthd) => ([VS (r var)] -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd)) -> String -> [(String, VS (r var))] -> [(String, VS (r var))] -> [(String, VS (r var))] -> MS (r bod) -> MS (r mthd) Source #

extFuncAppMixedArgs :: ValueExpression r var val binder typ => Library -> MixedCall r var val typ Source #

notNull :: forall {k} r (val :: k) (typ :: k) (var :: k). (ValueSym r val typ, Comparison r val, VariableSym r var typ, VariableValue r var val) => String -> VS (r val) -> VS (r val) Source #

listDecDef :: forall {k} r (bod :: k) (stmt :: k) (var :: k) (scope :: k) (val :: k) (typ :: k). (DeclStatement r bod stmt var scope val, TypeSym r typ, Literal r val typ, VariableElim r var typ) => VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt) Source #

stateVarDef :: (OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var scope val binder typ, Monad r) => r vis -> r attch -> VS (r var) -> VS (r val) -> CS (r Doc) Source #

constVar :: (CommonRenderSym r mthd vis param bod block stmt var scope val binder typ, Monad r) => Doc -> r vis -> VS (r var) -> VS (r val) -> CS (r Doc) Source #

litArray :: forall {k} r (var :: k) (val :: k) (typ :: k). (RenderValue r var val typ, TypeSym r typ, ValueElim r val) => (Doc -> Doc) -> VS (r typ) -> [VS (r val)] -> VS (r val) Source #

litSet :: forall {k} r (var :: k) (val :: k) (typ :: k). (RenderValue r var val typ, TypeSym r typ, ValueElim r val) => (Doc -> Doc) -> (Doc -> Doc) -> VS (r typ) -> [VS (r val)] -> VS (r val) Source #

litSetFunc :: forall {k} r (var :: k) (val :: k) (typ :: k). (RenderValue r var val typ, TypeSym r typ, ValueElim r val) => String -> VS (r typ) -> [VS (r val)] -> VS (r val) Source #

extraClass :: (RenderClass r cls stvr mthd vis, VisibilitySym r vis) => Label -> Maybe Label -> [CSStateVar r stvr] -> [MS (r mthd)] -> [MS (r mthd)] -> CS (r cls) Source #

listAccessFunc :: forall {k} r (val :: k). ValueElim r val => r val -> Doc Source #

openFileR :: forall {k} r (typ :: k) (stmt :: k) (var :: k) (val :: k). (TypeSym r typ, AssignStatement r stmt var val) => (VS (r val) -> VS (r typ) -> VS (r val)) -> VS (r var) -> VS (r val) -> MS (r stmt) Source #

openFileW :: forall {k} r (stmt :: k) (var :: k) (val :: k) (typ :: k). (AssignStatement r stmt var val, TypeSym r typ, Literal r val typ) => (VS (r val) -> VS (r typ) -> VS (r val) -> VS (r val)) -> VS (r var) -> VS (r val) -> MS (r stmt) Source #

stateVar :: (Monad r, OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var scope val binder typ) => r vis -> r attch -> VS (r var) -> CS (r Doc) Source #

self :: forall {k} r (typ :: k) (var :: k). (OOTypeSym r typ, RenderVariable r var typ) => VS (r var) Source #

multiAssign :: forall {k} r (typ :: k) (stmt :: k) (var :: k) (val :: k). (TypeSym r typ, AssignStatement r stmt var val, InternalVarElim r var, RenderValue r var val typ, RenderVariable r var typ, ValueElim r val) => (Doc -> Doc) -> [VS (r var)] -> [VS (r val)] -> MS (r stmt) Source #

multiReturn :: forall {k} r (typ :: k) (bod :: k) (stmt :: k) (var :: k) (val :: k). (TypeSym r typ, ControlStatement r bod stmt var val, RenderValue r var val typ, ValueElim r val) => (Doc -> Doc) -> [VS (r val)] -> MS (r stmt) Source #

listDec :: forall {k} r (bod :: k) (stmt :: k) (var :: k) (scope :: k) (val :: k) (typ :: k). (DeclStatement r bod stmt var scope val, TypeSym r typ, Literal r val typ, VariableElim r var typ) => VS (r var) -> r scope -> MS (r stmt) Source #

funcDecDef :: OORenderSym r file mod cls stvr mthd attch vis param bod block stmt var ScopeData val binder typ => VS (r var) -> r ScopeData -> [VS (r var)] -> MS (r bod) -> MS (r stmt) Source #

inOutCall :: forall {k} r (typ :: k) (stmt :: k) (var :: k) (val :: k). (TypeSym r typ, InternalAssignStmt r stmt var val, ValueStatement r stmt val, VariableValue r var val) => (Label -> VS (r typ) -> [VS (r val)] -> VS (r val)) -> Label -> [VS (r val)] -> [VS (r var)] -> [VS (r var)] -> MS (r stmt) Source #

mainBody :: (BodyElim r bod, RenderMethod r mthd) => MS (r bod) -> MS (r mthd) Source #

inOutFunc :: forall {k} r (var :: k) (val :: k) (param :: k) (typ :: k) (scope :: k) (bod :: k) (stmt :: k) (block :: k) (mthd :: k). (VariableValue r var val, ParameterSym r param var, TypeSym r typ, ScopeSym r scope, DeclStatement r bod stmt var scope val, BlockSym r block stmt, BodySym r bod block, VariableElim r var typ, RenderBody r bod, RenderType r typ, InternalControlStmt r stmt val) => (VS (r typ) -> [MS (r param)] -> MS (r bod) -> MS (r mthd)) -> [VS (r var)] -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd) Source #

docInOutFunc' :: (BlockCommentSym r, RenderMethod r mthd) => FuncDocRenderer -> ([VS (r var)] -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd)) -> String -> [(String, VS (r var))] -> [(String, VS (r var))] -> [(String, VS (r var))] -> MS (r bod) -> MS (r mthd) Source #

bool :: TypeSym r typ => VS (r typ) Source #

listSize :: List r val => VS (r val) -> VS (r val) Source #

Finds the size of a list. Arguments are: List

listSet :: forall {k} r (stmt :: k) (var :: k) (val :: k) (typ :: k). (AssignStatement r stmt var val, ValueSym r val typ, IndexTranslator r val, RenderVariable r var typ, ValueElim r val) => VS (r val) -> VS (r val) -> VS (r val) -> MS (r stmt) Source #

setDecDef :: forall {k} r (bod :: k) (stmt :: k) (var :: k) (scope :: k) (val :: k) (typ :: k). (DeclStatement r bod stmt var scope val, TypeSym r typ, Literal r val typ, VariableElim r var typ) => VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt) Source #

setDec :: forall {k} r (bod :: k) (stmt :: k) (var :: k) (scope :: k) (val :: k). (DeclStatement r bod stmt var scope val, RenderStatement r stmt, StatementElim r stmt) => (r val -> Doc) -> VS (r val) -> VS (r var) -> r scope -> MS (r stmt) Source #

intToIndex :: forall {k} r (val :: k). VS (r val) -> VS (r val) Source #

Convert an integer to an index in a 0-indexed language Since GOOL is 0-indexed, no adjustments need be made

indexToInt :: forall {k} r (val :: k). VS (r val) -> VS (r val) Source #

Convert an index to an integer in a 0-indexed language Since GOOL is 0-indexed, no adjustments need be made

intToIndex' :: forall {k} r (typ :: k) (val :: k) (var :: k). (TypeSym r typ, Literal r val typ, NumericExpression r val, RenderValue r var val typ, ValueElim r val) => VS (r val) -> VS (r val) Source #

Convert an integer to an index in a 1-indexed language Since GOOL is 0-indexed, we need to add 1

indexToInt' :: forall {k} r (typ :: k) (val :: k) (var :: k). (TypeSym r typ, Literal r val typ, NumericExpression r val, RenderValue r var val typ, ValueElim r val) => VS (r val) -> VS (r val) Source #

Convert an index to an integer in a 1-indexed language Since GOOL is 0-indexed, we need to subtract 1

varDecDef :: DeclStatement r bod stmt var scope val => VS (r var) -> r scope -> VS (r val) -> MS (r stmt) Source #

Declare a variable and give it a value. Not for use with arrays; use arrayDecDef instead.

openFileR' :: forall {k} r (typ :: k) (val :: k) (var :: k) (binder :: k). (TypeSym r typ, Literal r val typ, ValueExpression r var val binder typ) => VS (r val) -> VS (r val) Source #

openFileW' :: forall {k} r (typ :: k) (val :: k) (var :: k) (binder :: k). (TypeSym r typ, Literal r val typ, ValueExpression r var val binder typ) => VS (r val) -> VS (r val) Source #

openFileA' :: forall {k} r (typ :: k) (val :: k) (var :: k) (binder :: k). (TypeSym r typ, Literal r val typ, ValueExpression r var val binder typ) => VS (r val) -> VS (r val) Source #

argExists :: forall {k} r (val :: k) (typ :: k). (Literal r val typ, CommandLineArgs r val, Comparison r val, List r val) => Integer -> VS (r val) Source #

setMethodCall :: forall {k} r (typ :: k) (val :: k) (var :: k). (TypeSym r typ, ValueSym r val typ, InternalValueExp r var val typ) => Label -> VS (r val) -> VS (r val) -> VS (r val) Source #