| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Language.Oberon.Abstract
Description
Finally Tagless Abstract Syntax Tree definitions for the programming language Oberon
Synopsis
- class Wirthy l where
- type Module l = (m :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | m -> l
- type Declaration l = (d :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | d -> l
- type Type l = (t :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | t -> l
- type Statement l = (s :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | s -> l
- type Expression l = (e :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | e -> l
- type Designator l = (d :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | d -> l
- type Value l = (v :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | v -> l
- type FieldList l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type ProcedureHeading l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type FormalParameters l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type FPSection l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type Block l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type StatementSequence l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type Case l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type CaseLabels l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type ConditionalBranch l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type Element l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- type Import l = (x :: Type) | x -> l
- type IdentDef l = (x :: Type) | x -> l
- type QualIdent l = (x :: Type) | x -> l
- constantDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration l l' f' f
- typeDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (Type l' l' f' f') -> Declaration l l' f' f
- variableDeclaration :: forall l' f (f' :: Type -> Type). IdentList l' -> f (Type l' l' f' f') -> Declaration l l' f' f
- procedureDeclaration :: forall f l' (f' :: Type -> Type). f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration l l' f' f
- formalParameters :: forall f l' (f' :: Type -> Type). [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters l l' f' f
- fpSection :: forall f l' (f' :: Type -> Type). Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection l l' f' f
- block :: forall f l' (f' :: Type -> Type). [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Block l l' f' f
- fieldList :: forall l' f (f' :: Type -> Type). NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList l l' f' f
- pointerType :: forall f l' (f' :: Type -> Type). f (Type l' l' f' f') -> Type l l' f' f
- procedureType :: forall f l' (f' :: Type -> Type). Maybe (f (FormalParameters l' l' f' f')) -> Type l l' f' f
- typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Type l l' f' f
- assignment :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f
- caseStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> [f (Case l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f
- emptyStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement l l' f' f
- exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement l l' f' f
- ifStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (ConditionalBranch l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f
- loopStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> Statement l l' f' f
- procedureCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Maybe [f (Expression l' l' f' f')] -> Statement l l' f' f
- repeatStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f
- returnStatement :: forall f l' (f' :: Type -> Type). Maybe (f (Expression l' l' f' f')) -> Statement l l' f' f
- whileStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement l l' f' f
- conditionalBranch :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch l l' f' f
- caseAlternative :: forall f l' (f' :: Type -> Type). NonEmpty (f (CaseLabels l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Case l l' f' f
- singleLabel :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f
- labelRange :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f
- statementSequence :: forall f l' (f' :: Type -> Type). [f (Statement l' l' f' f')] -> StatementSequence l l' f' f
- add :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- subtract :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- and :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- or :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- divide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- integerDivide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- modulo :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- multiply :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- functionCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression l l' f' f
- literal :: forall f l' (f' :: Type -> Type). f (Value l' l' f' f') -> Expression l l' f' f
- negative :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f
- positive :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f
- not :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f
- read :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Expression l l' f' f
- relation :: forall f l' (f' :: Type -> Type). RelOp -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
- element :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Element l l' f' f
- range :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Element l l' f' f
- integer :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Integer -> Value l l' f' f
- nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f
- false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f
- true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f
- real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Double -> Value l l' f' f
- string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value l l' f' f
- charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Int -> Value l l' f' f
- builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value l l' f' f
- variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Designator l l' f' f
- field :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Ident -> Designator l l' f' f
- index :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> NonEmpty (f (Expression l' l' f' f')) -> Designator l l' f' f
- dereference :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Designator l l' f' f
- identDef :: Ident -> IdentDef l
- nonQualIdent :: Ident -> QualIdent l
- class Wirthy l => CoWirthy l where
- type TargetClass l :: Type -> Constraint
- coDeclaration :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Declaration l l'' f' f -> Declaration l' l'' f' f
- coType :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Type l l'' f' f -> Type l' l'' f' f
- coStatement :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Statement l l'' f' f -> Statement l' l'' f' f
- coExpression :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Expression l l'' f' f -> Expression l' l'' f' f
- coDesignator :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Designator l l'' f' f -> Designator l' l'' f' f
- coValue :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Value l l'' f' f -> Value l' l'' f' f
- class Wirthy l => Oberon l where
- type WithAlternative l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l
- moduleUnit :: forall f l' (f' :: Type -> Type). Ident -> [Import l] -> f (Block l' l' f' f') -> Module l l' f' f
- moduleImport :: Maybe Ident -> Ident -> Import l
- qualIdent :: Ident -> Ident -> QualIdent l
- getQualIdentNames :: QualIdent l -> Maybe (Ident, Ident)
- exported :: Ident -> IdentDef l
- forwardDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> Declaration l l' f' f
- procedureHeading :: forall l' f (f' :: Type -> Type). Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f
- arrayType :: forall f l' (f' :: Type -> Type). [f (ConstExpression l' l' f' f')] -> f (Type l' l' f' f') -> Type l l' f' f
- recordType :: forall l' f (f' :: Type -> Type). Maybe (BaseType l') -> [f (FieldList l' l' f' f')] -> Type l l' f' f
- withStatement :: forall f l' (f' :: Type -> Type). f (WithAlternative l' l' f' f') -> Statement l l' f' f
- withAlternative :: forall l' f (f' :: Type -> Type). QualIdent l' -> QualIdent l' -> f (StatementSequence l' l' f' f') -> WithAlternative l l' f' f
- is :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> QualIdent l' -> Expression l l' f' f
- set :: forall f l' (f' :: Type -> Type). [f (Element l' l' f' f')] -> Expression l l' f' f
- typeGuard :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> QualIdent l' -> Designator l l' f' f
- class Oberon l => Oberon2 l where
- readOnly :: Ident -> IdentDef l
- typeBoundHeading :: forall l' f (f' :: Type -> Type). Bool -> Ident -> Ident -> Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f
- forStatement :: forall f l' (f' :: Type -> Type). Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Statement l l' f' f
- variantWithStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (WithAlternative l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f
- class Wirthy l => Nameable l where
- getProcedureName :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Nameable l' => ProcedureHeading l l' f' f -> Ident
- getIdentDefName :: IdentDef l -> Ident
- getNonQualIdentName :: QualIdent l -> Maybe Ident
- type Ident = Text
- type IdentList l = NonEmpty (IdentDef l)
- type BaseType l = QualIdent l
- type ReturnType l = QualIdent l
- type ConstExpression l = Expression l
- data RelOp
- = Equal
- | Unequal
- | Less
- | LessOrEqual
- | Greater
- | GreaterOrEqual
- | In
- data WirthySubsetOf l = WirthySubsetOf l
- newtype Maybe3 (f :: k -> k1 -> k2 -> Type) (a :: k) (b :: k1) (c :: k2) = Maybe3 (Maybe (f a b c))
- just3 :: forall {k1} {k2} {k3} {f} {a :: k1} {b :: k2} {c :: k3}. f a b c -> Maybe3 f a b c
- nothing3 :: forall {k1} {k2} {k3} {f :: k1 -> k2 -> k3 -> Type} {a :: k1} {b :: k2} {c :: k3}. Maybe3 f a b c
- maybe3 :: forall {k1} {k2} {k3} {b1} {f} {a :: k1} {b2 :: k2} {c :: k3}. b1 -> (f a b2 c -> b1) -> Maybe3 f a b2 c -> b1
Language classes
The finally-tagless associated types and methods relevant to all programming languages designed by Niklaus Wirth. Every non-leaf node type has four type variables:
- type variable
lrepresents the language of the constructs built by the methods, l'is the language of the child node constructs,f'wraps all descendant nodes, exceptfwraps all direct children of the node.
Associated Types
type Module l = (m :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | m -> l Source #
type Declaration l = (d :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | d -> l Source #
type Type l = (t :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | t -> l Source #
type Statement l = (s :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | s -> l Source #
type Expression l = (e :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | e -> l Source #
type Designator l = (d :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | d -> l Source #
type Value l = (v :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | v -> l Source #
type FieldList l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type ProcedureHeading l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type FormalParameters l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type FPSection l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type Block l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type StatementSequence l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type Case l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type CaseLabels l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type ConditionalBranch l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type Element l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
type Import l = (x :: Type) | x -> l Source #
Methods
constantDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration l l' f' f Source #
typeDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (Type l' l' f' f') -> Declaration l l' f' f Source #
variableDeclaration :: forall l' f (f' :: Type -> Type). IdentList l' -> f (Type l' l' f' f') -> Declaration l l' f' f Source #
procedureDeclaration :: forall f l' (f' :: Type -> Type). f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration l l' f' f Source #
formalParameters :: forall f l' (f' :: Type -> Type). [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters l l' f' f Source #
fpSection :: forall f l' (f' :: Type -> Type). Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection l l' f' f Source #
block :: forall f l' (f' :: Type -> Type). [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Block l l' f' f Source #
fieldList :: forall l' f (f' :: Type -> Type). NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList l l' f' f Source #
pointerType :: forall f l' (f' :: Type -> Type). f (Type l' l' f' f') -> Type l l' f' f Source #
procedureType :: forall f l' (f' :: Type -> Type). Maybe (f (FormalParameters l' l' f' f')) -> Type l l' f' f Source #
typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Type l l' f' f Source #
assignment :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f Source #
caseStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> [f (Case l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f Source #
emptyStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement l l' f' f Source #
exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement l l' f' f Source #
ifStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (ConditionalBranch l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f Source #
loopStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> Statement l l' f' f Source #
procedureCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Maybe [f (Expression l' l' f' f')] -> Statement l l' f' f Source #
repeatStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f Source #
returnStatement :: forall f l' (f' :: Type -> Type). Maybe (f (Expression l' l' f' f')) -> Statement l l' f' f Source #
whileStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement l l' f' f Source #
conditionalBranch :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch l l' f' f Source #
caseAlternative :: forall f l' (f' :: Type -> Type). NonEmpty (f (CaseLabels l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Case l l' f' f Source #
singleLabel :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f Source #
labelRange :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f Source #
statementSequence :: forall f l' (f' :: Type -> Type). [f (Statement l' l' f' f')] -> StatementSequence l l' f' f Source #
add :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
subtract :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
and :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
or :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
divide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
integerDivide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
modulo :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
multiply :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
functionCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression l l' f' f Source #
literal :: forall f l' (f' :: Type -> Type). f (Value l' l' f' f') -> Expression l l' f' f Source #
negative :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f Source #
positive :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f Source #
not :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression l l' f' f Source #
read :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Expression l l' f' f Source #
relation :: forall f l' (f' :: Type -> Type). RelOp -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f Source #
element :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Element l l' f' f Source #
range :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Element l l' f' f Source #
integer :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Integer -> Value l l' f' f Source #
nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f Source #
false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f Source #
true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value l l' f' f Source #
real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Double -> Value l l' f' f Source #
string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value l l' f' f Source #
charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Int -> Value l l' f' f Source #
builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value l l' f' f Source #
variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Designator l l' f' f Source #
field :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Ident -> Designator l l' f' f Source #
index :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> NonEmpty (f (Expression l' l' f' f')) -> Designator l l' f' f Source #
dereference :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Designator l l' f' f Source #
identDef :: Ident -> IdentDef l Source #
nonQualIdent :: Ident -> QualIdent l Source #
Instances
| Wirthy Language Source # | |
Defined in Language.Oberon.AST Associated Types Methods constantDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration Language l' f' f Source # typeDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (Type l' l' f' f') -> Declaration Language l' f' f Source # variableDeclaration :: forall l' f (f' :: Type -> Type). IdentList l' -> f (Type l' l' f' f') -> Declaration Language l' f' f Source # procedureDeclaration :: forall f l' (f' :: Type -> Type). f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration Language l' f' f Source # formalParameters :: forall f l' (f' :: Type -> Type). [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters Language l' f' f Source # fpSection :: forall f l' (f' :: Type -> Type). Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection Language l' f' f Source # block :: forall f l' (f' :: Type -> Type). [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Block Language l' f' f Source # fieldList :: forall l' f (f' :: Type -> Type). NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList Language l' f' f Source # pointerType :: forall f l' (f' :: Type -> Type). f (Type l' l' f' f') -> Type Language l' f' f Source # procedureType :: forall f l' (f' :: Type -> Type). Maybe (f (FormalParameters l' l' f' f')) -> Type Language l' f' f Source # typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Type Language l' f' f Source # assignment :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement Language l' f' f Source # caseStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> [f (Case l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Statement Language l' f' f Source # emptyStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement Language l' f' f Source # exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement Language l' f' f Source # ifStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (ConditionalBranch l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement Language l' f' f Source # loopStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> Statement Language l' f' f Source # procedureCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Maybe [f (Expression l' l' f' f')] -> Statement Language l' f' f Source # repeatStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement Language l' f' f Source # returnStatement :: forall f l' (f' :: Type -> Type). Maybe (f (Expression l' l' f' f')) -> Statement Language l' f' f Source # whileStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement Language l' f' f Source # conditionalBranch :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch Language l' f' f Source # caseAlternative :: forall f l' (f' :: Type -> Type). NonEmpty (f (CaseLabels l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Case Language l' f' f Source # singleLabel :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> CaseLabels Language l' f' f Source # labelRange :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels Language l' f' f Source # statementSequence :: forall f l' (f' :: Type -> Type). [f (Statement l' l' f' f')] -> StatementSequence Language l' f' f Source # add :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # subtract :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # and :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # or :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # divide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # integerDivide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # modulo :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # multiply :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # functionCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression Language l' f' f Source # literal :: forall f l' (f' :: Type -> Type). f (Value l' l' f' f') -> Expression Language l' f' f Source # negative :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression Language l' f' f Source # positive :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression Language l' f' f Source # not :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression Language l' f' f Source # read :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Expression Language l' f' f Source # relation :: forall f l' (f' :: Type -> Type). RelOp -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression Language l' f' f Source # element :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Element Language l' f' f Source # range :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Element Language l' f' f Source # integer :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Integer -> Value Language l' f' f Source # nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value Language l' f' f Source # false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value Language l' f' f Source # true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value Language l' f' f Source # real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Double -> Value Language l' f' f Source # string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value Language l' f' f Source # charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Int -> Value Language l' f' f Source # builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value Language l' f' f Source # variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Designator Language l' f' f Source # field :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Ident -> Designator Language l' f' f Source # index :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> NonEmpty (f (Expression l' l' f' f')) -> Designator Language l' f' f Source # dereference :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Designator Language l' f' f Source # | |
| Wirthy l => Wirthy (WirthySubsetOf l) Source # | |
Defined in Language.Oberon.Abstract Associated Types Methods constantDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # typeDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (Type l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # variableDeclaration :: forall l' f (f' :: Type -> Type). IdentList l' -> f (Type l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # procedureDeclaration :: forall f l' (f' :: Type -> Type). f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # formalParameters :: forall f l' (f' :: Type -> Type). [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters (WirthySubsetOf l) l' f' f Source # fpSection :: forall f l' (f' :: Type -> Type). Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection (WirthySubsetOf l) l' f' f Source # block :: forall f l' (f' :: Type -> Type). [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Block (WirthySubsetOf l) l' f' f Source # fieldList :: forall l' f (f' :: Type -> Type). NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList (WirthySubsetOf l) l' f' f Source # pointerType :: forall f l' (f' :: Type -> Type). f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f Source # procedureType :: forall f l' (f' :: Type -> Type). Maybe (f (FormalParameters l' l' f' f')) -> Type (WirthySubsetOf l) l' f' f Source # typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Type (WirthySubsetOf l) l' f' f Source # assignment :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # caseStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> [f (Case l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # emptyStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement (WirthySubsetOf l) l' f' f Source # exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement (WirthySubsetOf l) l' f' f Source # ifStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (ConditionalBranch l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # loopStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # procedureCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Maybe [f (Expression l' l' f' f')] -> Statement (WirthySubsetOf l) l' f' f Source # repeatStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # returnStatement :: forall f l' (f' :: Type -> Type). Maybe (f (Expression l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # whileStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # conditionalBranch :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch (WirthySubsetOf l) l' f' f Source # caseAlternative :: forall f l' (f' :: Type -> Type). NonEmpty (f (CaseLabels l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Case (WirthySubsetOf l) l' f' f Source # singleLabel :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> CaseLabels (WirthySubsetOf l) l' f' f Source # labelRange :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels (WirthySubsetOf l) l' f' f Source # statementSequence :: forall f l' (f' :: Type -> Type). [f (Statement l' l' f' f')] -> StatementSequence (WirthySubsetOf l) l' f' f Source # add :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # subtract :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # and :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # or :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # divide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # integerDivide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # modulo :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # multiply :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # functionCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression (WirthySubsetOf l) l' f' f Source # literal :: forall f l' (f' :: Type -> Type). f (Value l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # negative :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # positive :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # not :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # read :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # relation :: forall f l' (f' :: Type -> Type). RelOp -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # element :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Element (WirthySubsetOf l) l' f' f Source # range :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Element (WirthySubsetOf l) l' f' f Source # integer :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Integer -> Value (WirthySubsetOf l) l' f' f Source # nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Double -> Value (WirthySubsetOf l) l' f' f Source # string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value (WirthySubsetOf l) l' f' f Source # charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Int -> Value (WirthySubsetOf l) l' f' f Source # builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value (WirthySubsetOf l) l' f' f Source # variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Designator (WirthySubsetOf l) l' f' f Source # field :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Ident -> Designator (WirthySubsetOf l) l' f' f Source # index :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> NonEmpty (f (Expression l' l' f' f')) -> Designator (WirthySubsetOf l) l' f' f Source # dereference :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Designator (WirthySubsetOf l) l' f' f Source # identDef :: Ident -> IdentDef (WirthySubsetOf l) Source # nonQualIdent :: Ident -> QualIdent (WirthySubsetOf l) Source # | |
class Wirthy l => CoWirthy l where Source #
An instance of this type can convert its own constructs to another language that's an instance of TargetClass.
Methods
coDeclaration :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Declaration l l'' f' f -> Declaration l' l'' f' f Source #
coType :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Type l l'' f' f -> Type l' l'' f' f Source #
coStatement :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Statement l l'' f' f -> Statement l' l'' f' f Source #
coExpression :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Expression l l'' f' f -> Expression l' l'' f' f Source #
coDesignator :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Designator l l'' f' f -> Designator l' l'' f' f Source #
coValue :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass l l' => Value l l'' f' f -> Value l' l'' f' f Source #
Instances
| CoWirthy Language Source # | |||||
Defined in Language.Oberon.AST Associated Types
Methods coDeclaration :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Declaration Language l'' f' f -> Declaration l' l'' f' f Source # coType :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Type Language l'' f' f -> Type l' l'' f' f Source # coStatement :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Statement Language l'' f' f -> Statement l' l'' f' f Source # coExpression :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Expression Language l'' f' f -> Expression l' l'' f' f Source # coDesignator :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Designator Language l'' f' f -> Designator l' l'' f' f Source # coValue :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). TargetClass Language l' => Value Language l'' f' f -> Value l' l'' f' f Source # | |||||
class Wirthy l => Oberon l where Source #
The finally-tagless associated types and methods relevant to both versions of the Oberon language.
Associated Types
type WithAlternative l = (x :: Type -> (Type -> Type) -> (Type -> Type) -> Type) | x -> l Source #
Methods
moduleUnit :: forall f l' (f' :: Type -> Type). Ident -> [Import l] -> f (Block l' l' f' f') -> Module l l' f' f Source #
moduleImport :: Maybe Ident -> Ident -> Import l Source #
qualIdent :: Ident -> Ident -> QualIdent l Source #
getQualIdentNames :: QualIdent l -> Maybe (Ident, Ident) Source #
exported :: Ident -> IdentDef l Source #
forwardDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> Declaration l l' f' f Source #
procedureHeading :: forall l' f (f' :: Type -> Type). Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f Source #
arrayType :: forall f l' (f' :: Type -> Type). [f (ConstExpression l' l' f' f')] -> f (Type l' l' f' f') -> Type l l' f' f Source #
recordType :: forall l' f (f' :: Type -> Type). Maybe (BaseType l') -> [f (FieldList l' l' f' f')] -> Type l l' f' f Source #
withStatement :: forall f l' (f' :: Type -> Type). f (WithAlternative l' l' f' f') -> Statement l l' f' f Source #
withAlternative :: forall l' f (f' :: Type -> Type). QualIdent l' -> QualIdent l' -> f (StatementSequence l' l' f' f') -> WithAlternative l l' f' f Source #
is :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> QualIdent l' -> Expression l l' f' f Source #
set :: forall f l' (f' :: Type -> Type). [f (Element l' l' f' f')] -> Expression l l' f' f Source #
typeGuard :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> QualIdent l' -> Designator l l' f' f Source #
Instances
class Oberon l => Oberon2 l where Source #
The finally-tagless associated types and methods relevant to the Oberon 2 language.
Methods
readOnly :: Ident -> IdentDef l Source #
typeBoundHeading :: forall l' f (f' :: Type -> Type). Bool -> Ident -> Ident -> Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f Source #
forStatement :: forall f l' (f' :: Type -> Type). Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Statement l l' f' f Source #
variantWithStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (WithAlternative l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f Source #
Instances
| Oberon2 Language Source # | |
Defined in Language.Oberon.AST Methods readOnly :: Ident -> IdentDef Language Source # typeBoundHeading :: forall l' f (f' :: Type -> Type). Bool -> Ident -> Ident -> Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading Language l' f' f Source # forStatement :: forall f l' (f' :: Type -> Type). Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Statement Language l' f' f Source # variantWithStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (WithAlternative l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement Language l' f' f Source # | |
| Wirthy l => Oberon2 (WirthySubsetOf l) Source # | |
Defined in Language.Oberon.Abstract Methods readOnly :: Ident -> IdentDef (WirthySubsetOf l) Source # typeBoundHeading :: forall l' f (f' :: Type -> Type). Bool -> Ident -> Ident -> Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading (WirthySubsetOf l) l' f' f Source # forStatement :: forall f l' (f' :: Type -> Type). Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # variantWithStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (WithAlternative l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # | |
class Wirthy l => Nameable l where Source #
Ability to deconstruct named constructs and obtain their Ident.
Methods
getProcedureName :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Nameable l' => ProcedureHeading l l' f' f -> Ident Source #
getIdentDefName :: IdentDef l -> Ident Source #
Instances
| Nameable Language Source # | |
Defined in Language.Oberon.AST | |
Type synonyms
type ReturnType l = QualIdent l Source #
type ConstExpression l = Expression l Source #
Auxiliary data types
Relational operators
Constructors
| Equal | |
| Unequal | |
| Less | |
| LessOrEqual | |
| Greater | |
| GreaterOrEqual | |
| In |
Instances
| Data RelOp Source # | |
Defined in Language.Oberon.Abstract Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RelOp -> c RelOp # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c RelOp # dataTypeOf :: RelOp -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c RelOp) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RelOp) # gmapT :: (forall b. Data b => b -> b) -> RelOp -> RelOp # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RelOp -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RelOp -> r # gmapQ :: (forall d. Data d => d -> u) -> RelOp -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> RelOp -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> RelOp -> m RelOp # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RelOp -> m RelOp # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RelOp -> m RelOp # | |
| Show RelOp Source # | |
| Eq RelOp Source # | |
| Pretty RelOp Source # | |
Defined in Language.Oberon.Pretty | |
data WirthySubsetOf l Source #
A language with constructs beyond the base Wirthy class will have constructs that cannot be converted to a
| Wirthy target. It can declare its TargetClass to be this transformed language instead, whose language
| constructs are all wrapped in Maybe or Maybe3.
Constructors
| WirthySubsetOf l |
Instances
| Wirthy l => Oberon (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract Associated Types
Methods moduleUnit :: forall f l' (f' :: Type -> Type). Ident -> [Import (WirthySubsetOf l)] -> f (Block l' l' f' f') -> Module (WirthySubsetOf l) l' f' f Source # moduleImport :: Maybe Ident -> Ident -> Import (WirthySubsetOf l) Source # qualIdent :: Ident -> Ident -> QualIdent (WirthySubsetOf l) Source # getQualIdentNames :: QualIdent (WirthySubsetOf l) -> Maybe (Ident, Ident) Source # exported :: Ident -> IdentDef (WirthySubsetOf l) Source # forwardDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> Declaration (WirthySubsetOf l) l' f' f Source # procedureHeading :: forall l' f (f' :: Type -> Type). Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading (WirthySubsetOf l) l' f' f Source # arrayType :: forall f l' (f' :: Type -> Type). [f (ConstExpression l' l' f' f')] -> f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f Source # recordType :: forall l' f (f' :: Type -> Type). Maybe (BaseType l') -> [f (FieldList l' l' f' f')] -> Type (WirthySubsetOf l) l' f' f Source # withStatement :: forall f l' (f' :: Type -> Type). f (WithAlternative l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # withAlternative :: forall l' f (f' :: Type -> Type). QualIdent l' -> QualIdent l' -> f (StatementSequence l' l' f' f') -> WithAlternative (WirthySubsetOf l) l' f' f Source # is :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> QualIdent l' -> Expression (WirthySubsetOf l) l' f' f Source # set :: forall f l' (f' :: Type -> Type). [f (Element l' l' f' f')] -> Expression (WirthySubsetOf l) l' f' f Source # typeGuard :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> QualIdent l' -> Designator (WirthySubsetOf l) l' f' f Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wirthy l => Oberon2 (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract Methods readOnly :: Ident -> IdentDef (WirthySubsetOf l) Source # typeBoundHeading :: forall l' f (f' :: Type -> Type). Bool -> Ident -> Ident -> Bool -> IdentDef l' -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading (WirthySubsetOf l) l' f' f Source # forStatement :: forall f l' (f' :: Type -> Type). Ident -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Maybe (f (Expression l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # variantWithStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (WithAlternative l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wirthy l => Wirthy (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract Associated Types
Methods constantDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # typeDeclaration :: forall l' f (f' :: Type -> Type). IdentDef l' -> f (Type l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # variableDeclaration :: forall l' f (f' :: Type -> Type). IdentList l' -> f (Type l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # procedureDeclaration :: forall f l' (f' :: Type -> Type). f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration (WirthySubsetOf l) l' f' f Source # formalParameters :: forall f l' (f' :: Type -> Type). [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters (WirthySubsetOf l) l' f' f Source # fpSection :: forall f l' (f' :: Type -> Type). Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection (WirthySubsetOf l) l' f' f Source # block :: forall f l' (f' :: Type -> Type). [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Block (WirthySubsetOf l) l' f' f Source # fieldList :: forall l' f (f' :: Type -> Type). NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList (WirthySubsetOf l) l' f' f Source # pointerType :: forall f l' (f' :: Type -> Type). f (Type l' l' f' f') -> Type (WirthySubsetOf l) l' f' f Source # procedureType :: forall f l' (f' :: Type -> Type). Maybe (f (FormalParameters l' l' f' f')) -> Type (WirthySubsetOf l) l' f' f Source # typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Type (WirthySubsetOf l) l' f' f Source # assignment :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # caseStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> [f (Case l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # emptyStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement (WirthySubsetOf l) l' f' f Source # exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Statement (WirthySubsetOf l) l' f' f Source # ifStatement :: forall f l' (f' :: Type -> Type). NonEmpty (f (ConditionalBranch l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # loopStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # procedureCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Maybe [f (Expression l' l' f' f')] -> Statement (WirthySubsetOf l) l' f' f Source # repeatStatement :: forall f l' (f' :: Type -> Type). f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # returnStatement :: forall f l' (f' :: Type -> Type). Maybe (f (Expression l' l' f' f')) -> Statement (WirthySubsetOf l) l' f' f Source # whileStatement :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement (WirthySubsetOf l) l' f' f Source # conditionalBranch :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch (WirthySubsetOf l) l' f' f Source # caseAlternative :: forall f l' (f' :: Type -> Type). NonEmpty (f (CaseLabels l' l' f' f')) -> f (StatementSequence l' l' f' f') -> Case (WirthySubsetOf l) l' f' f Source # singleLabel :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> CaseLabels (WirthySubsetOf l) l' f' f Source # labelRange :: forall f l' (f' :: Type -> Type). f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels (WirthySubsetOf l) l' f' f Source # statementSequence :: forall f l' (f' :: Type -> Type). [f (Statement l' l' f' f')] -> StatementSequence (WirthySubsetOf l) l' f' f Source # add :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # subtract :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # and :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # or :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # divide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # integerDivide :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # modulo :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # multiply :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # functionCall :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression (WirthySubsetOf l) l' f' f Source # literal :: forall f l' (f' :: Type -> Type). f (Value l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # negative :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # positive :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # not :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # read :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # relation :: forall f l' (f' :: Type -> Type). RelOp -> f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression (WirthySubsetOf l) l' f' f Source # element :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> Element (WirthySubsetOf l) l' f' f Source # range :: forall f l' (f' :: Type -> Type). f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Element (WirthySubsetOf l) l' f' f Source # integer :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Integer -> Value (WirthySubsetOf l) l' f' f Source # nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Value (WirthySubsetOf l) l' f' f Source # real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Double -> Value (WirthySubsetOf l) l' f' f Source # string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value (WirthySubsetOf l) l' f' f Source # charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Int -> Value (WirthySubsetOf l) l' f' f Source # builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Text -> Value (WirthySubsetOf l) l' f' f Source # variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). QualIdent l' -> Designator (WirthySubsetOf l) l' f' f Source # field :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Ident -> Designator (WirthySubsetOf l) l' f' f Source # index :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> NonEmpty (f (Expression l' l' f' f')) -> Designator (WirthySubsetOf l) l' f' f Source # dereference :: forall f l' (f' :: Type -> Type). f (Designator l' l' f' f') -> Designator (WirthySubsetOf l) l' f' f Source # identDef :: Ident -> IdentDef (WirthySubsetOf l) Source # nonQualIdent :: Ident -> QualIdent (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Block (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Case (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type CaseLabels (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type ConditionalBranch (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Declaration (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Designator (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Element (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Expression (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type FPSection (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type FieldList (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type FormalParameters (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type IdentDef (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Import (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Module (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type ProcedureHeading (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type QualIdent (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Statement (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type StatementSequence (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Type (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type Value (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| type WithAlternative (WirthySubsetOf l) Source # | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in Language.Oberon.Abstract | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
newtype Maybe3 (f :: k -> k1 -> k2 -> Type) (a :: k) (b :: k1) (c :: k2) Source #
Instances
| Read (f a b c) => Read (Maybe3 f a b c) Source # | |
| Show (f a b c) => Show (Maybe3 f a b c) Source # | |
| Eq (f a b c) => Eq (Maybe3 f a b c) Source # | |
| Ord (f a b c) => Ord (Maybe3 f a b c) Source # | |
Defined in Language.Oberon.Abstract Methods compare :: Maybe3 f a b c -> Maybe3 f a b c -> Ordering # (<) :: Maybe3 f a b c -> Maybe3 f a b c -> Bool # (<=) :: Maybe3 f a b c -> Maybe3 f a b c -> Bool # (>) :: Maybe3 f a b c -> Maybe3 f a b c -> Bool # (>=) :: Maybe3 f a b c -> Maybe3 f a b c -> Bool # | |
Utilities
just3 :: forall {k1} {k2} {k3} {f} {a :: k1} {b :: k2} {c :: k3}. f a b c -> Maybe3 f a b c Source #