-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Parser, pretty-printer, and more for the Modula-2 programming language
--
-- The library and the executable supports two versions of the Modula-2
-- programming language: as described by the orginal language report and
-- as standardized by the ISO.
@package language-Modula2
@version 0.1
-- | Finally Tagless Abstract Syntax Tree definitions for the programming
-- language Modula-2
module Language.Modula2.Abstract
type Ident = Text
type IdentList l = NonEmpty IdentDef l
type BaseType l = QualIdent l
type ConstExpression l = Expression l
-- | Module priority
type Priority l = ConstExpression l
-- | 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 l represents the language of the constructs
-- built by the methods,
-- - l' is the language of the child node constructs,
-- - f' wraps all descendant nodes, except
-- - f wraps all direct children of the node.
--
class Wirthy l where {
type family Module l = (m :: Type -> Type -> Type -> Type -> Type -> Type) | m -> l;
type family Declaration l = (d :: Type -> Type -> Type -> Type -> Type -> Type) | d -> l;
type family Type l = (t :: Type -> Type -> Type -> Type -> Type -> Type) | t -> l;
type family Statement l = (s :: Type -> Type -> Type -> Type -> Type -> Type) | s -> l;
type family Expression l = (e :: Type -> Type -> Type -> Type -> Type -> Type) | e -> l;
type family Designator l = (d :: Type -> Type -> Type -> Type -> Type -> Type) | d -> l;
type family Value l = (v :: Type -> Type -> Type -> Type -> Type -> Type) | v -> l;
type family FieldList l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family ProcedureHeading l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family FormalParameters l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family FPSection l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family Block l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family StatementSequence l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family Case l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family CaseLabels l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family ConditionalBranch l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family Element l = (x :: Type -> Type -> Type -> Type -> Type -> Type) | x -> l;
type family Import l = (x :: Type) | x -> l;
type family IdentDef l = (x :: Type) | x -> l;
type family QualIdent l = (x :: Type) | x -> l;
}
constantDeclaration :: forall l' f (f' :: Type -> Type). Wirthy l => IdentDef l' -> f (ConstExpression l' l' f' f') -> Declaration l l' f' f
typeDeclaration :: forall l' f (f' :: Type -> Type). Wirthy l => IdentDef l' -> f (Type l' l' f' f') -> Declaration l l' f' f
variableDeclaration :: forall l' f (f' :: Type -> Type). Wirthy l => IdentList l' -> f (Type l' l' f' f') -> Declaration l l' f' f
procedureDeclaration :: forall f l' (f' :: Type -> Type). Wirthy l => f (ProcedureHeading l' l' f' f') -> f (Block l' l' f' f') -> Declaration l l' f' f
formalParameters :: forall f l' (f' :: Type -> Type). Wirthy l => [f (FPSection l' l' f' f')] -> Maybe (ReturnType l') -> FormalParameters l l' f' f
fpSection :: forall f l' (f' :: Type -> Type). Wirthy l => Bool -> [Ident] -> f (Type l' l' f' f') -> FPSection l l' f' f
block :: forall f l' (f' :: Type -> Type). Wirthy l => [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). Wirthy l => NonEmpty (IdentDef l') -> f (Type l' l' f' f') -> FieldList l l' f' f
pointerType :: forall f l' (f' :: Type -> Type). Wirthy l => f (Type l' l' f' f') -> Type l l' f' f
procedureType :: forall f l' (f' :: Type -> Type). Wirthy l => Maybe (f (FormalParameters l' l' f' f')) -> Type l l' f' f
typeReference :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => QualIdent l' -> Type l l' f' f
assignment :: forall f l' (f' :: Type -> Type). Wirthy l => f (Designator l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f
caseStatement :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => Statement l l' f' f
exitStatement :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Statement l l' f' f
ifStatement :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => f (StatementSequence l' l' f' f') -> Statement l l' f' f
procedureCall :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => f (StatementSequence l' l' f' f') -> f (Expression l' l' f' f') -> Statement l l' f' f
returnStatement :: forall f l' (f' :: Type -> Type). Wirthy l => Maybe (f (Expression l' l' f' f')) -> Statement l l' f' f
whileStatement :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement l l' f' f
conditionalBranch :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (StatementSequence l' l' f' f') -> ConditionalBranch l l' f' f
caseAlternative :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f
labelRange :: forall f l' (f' :: Type -> Type). Wirthy l => f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> CaseLabels l l' f' f
statementSequence :: forall f l' (f' :: Type -> Type). Wirthy l => [f (Statement l' l' f' f')] -> StatementSequence l l' f' f
add :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
subtract :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
and :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
or :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
divide :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
integerDivide :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
modulo :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
multiply :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
functionCall :: forall f l' (f' :: Type -> Type). Wirthy l => f (Designator l' l' f' f') -> [f (Expression l' l' f' f')] -> Expression l l' f' f
literal :: forall f l' (f' :: Type -> Type). Wirthy l => f (Value l' l' f' f') -> Expression l l' f' f
negative :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> Expression l l' f' f
positive :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> Expression l l' f' f
not :: forall f l' (f' :: Type -> Type). Wirthy l => f (Expression l' l' f' f') -> Expression l l' f' f
read :: forall f l' (f' :: Type -> Type). Wirthy l => f (Designator l' l' f' f') -> Expression l l' f' f
relation :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => f (Expression l' l' f' f') -> Element l l' f' f
range :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => Integer -> Value l l' f' f
nil :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Value l l' f' f
false :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Value l l' f' f
true :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Value l l' f' f
real :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Double -> Value l l' f' f
string :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Text -> Value l l' f' f
charCode :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Int -> Value l l' f' f
builtin :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => Text -> Value l l' f' f
variable :: forall l' (f' :: Type -> Type) (f :: Type -> Type). Wirthy l => QualIdent l' -> Designator l l' f' f
field :: forall f l' (f' :: Type -> Type). Wirthy l => f (Designator l' l' f' f') -> Ident -> Designator l l' f' f
index :: forall f l' (f' :: Type -> Type). Wirthy l => 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). Wirthy l => f (Designator l' l' f' f') -> Designator l l' f' f
identDef :: Wirthy l => Ident -> IdentDef l
nonQualIdent :: Wirthy l => Ident -> QualIdent l
-- | An instance of this type can convert its own constructs to another
-- language that's an instance of TargetClass.
class Wirthy l => CoWirthy l where {
type family TargetClass l :: Type -> Constraint;
type TargetClass l = Wirthy;
}
coDeclaration :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Declaration l l'' f' f -> Declaration l' l'' f' f
coType :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Type l l'' f' f -> Type l' l'' f' f
coStatement :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Statement l l'' f' f -> Statement l' l'' f' f
coExpression :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Expression l l'' f' f -> Expression l' l'' f' f
coDesignator :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Designator l l'' f' f -> Designator l' l'' f' f
coValue :: forall l' l'' (f' :: Type -> Type) (f :: Type -> Type). (CoWirthy l, TargetClass l l') => Value l l'' f' f -> Value l' l'' f' f
-- | Ability to deconstruct named constructs and obtain their Ident.
class Wirthy l => Nameable l
getProcedureName :: forall l' (f' :: Type -> Type) (f :: Type -> Type). (Nameable l, Nameable l') => ProcedureHeading l l' f' f -> Ident
getIdentDefName :: Nameable l => IdentDef l -> Ident
getNonQualIdentName :: Nameable l => QualIdent l -> Maybe Ident
-- | The finally-tagless associated types and methods relevant to the
-- Modula-2 language. Every non-leaf node type has four type variables:
--
--
-- - type variable l represents the language of the constructs
-- built by the methods,
-- - l' is the language of the child node constructs,
-- - f' wraps all descendant nodes, except
-- - f wraps all direct children of the node.
--
class Wirthy l => Modula2 l where {
type family Export l = x | x -> l;
type family Definition l = (d :: * -> (* -> *) -> (* -> *) -> *) | d -> l;
type family Variant l = (v :: * -> (* -> *) -> (* -> *) -> *) | v -> l;
}
definitionModule :: Modula2 l => Ident -> [Import l'] -> Maybe (Export l') -> [f (Definition l' l' f' f')] -> Module l l' f' f
implementationModule :: Modula2 l => Ident -> Maybe (f (Priority l' l' f' f')) -> [Import l'] -> f (Block l' l' f' f') -> Module l l' f' f
programModule :: Modula2 l => Ident -> Maybe (f (Priority l' l' f' f')) -> [Import l'] -> f (Block l' l' f' f') -> Module l l' f' f
moduleExport :: Modula2 l => Bool -> NonEmpty Ident -> Export l
moduleImport :: Modula2 l => Maybe Ident -> NonEmpty Ident -> Import l
constantDefinition :: Modula2 l => IdentDef l' -> f (ConstExpression l' l' f' f') -> Definition l l' f' f
typeDefinition :: Modula2 l => IdentDef l' -> Maybe (f (Type l' l' f' f')) -> Definition l l' f' f
variableDefinition :: Modula2 l => IdentList l' -> f (Type l' l' f' f') -> Definition l l' f' f
procedureDefinition :: Modula2 l => f (ProcedureHeading l' l' f' f') -> Definition l l' f' f
moduleDeclaration :: Modula2 l => Ident -> Maybe (f (Priority l' l' f' f')) -> [Import l'] -> Maybe (Export l') -> f (Block l' l' f' f') -> Declaration l l' f' f
procedureHeading :: Modula2 l => Ident -> Maybe (f (FormalParameters l' l' f' f')) -> ProcedureHeading l l' f' f
caseFieldList :: Modula2 l => Maybe Ident -> QualIdent l' -> NonEmpty (f (Variant l' l' f' f')) -> [f (FieldList l' l' f' f')] -> FieldList l l' f' f
variant :: Modula2 l => NonEmpty (f (CaseLabels l' l' f' f')) -> [f (FieldList l' l' f' f')] -> Variant l l' f' f
enumeration :: Modula2 l => IdentList l' -> Type l l' f' f
subRange :: Modula2 l => Maybe (QualIdent l') -> f (ConstExpression l' l' f' f') -> f (ConstExpression l' l' f' f') -> Type l l' f' f
arrayType :: Modula2 l => [f (Type l' l' f' f')] -> f (Type l' l' f' f') -> Type l l' f' f
setType :: Modula2 l => f (Type l' l' f' f') -> Type l l' f' f
recordType :: Modula2 l => [f (FieldList l' l' f' f')] -> Type l l' f' f
withStatement :: Modula2 l => f (Designator l' l' f' f') -> f (StatementSequence l' l' f' f') -> Statement l l' f' f
forStatement :: Modula2 l => 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
set :: Modula2 l => Maybe (QualIdent l') -> [f (Element l' l' f' f')] -> Expression l l' f' f
qualIdent :: Modula2 l => [Ident] -> Ident -> QualIdent l
-- | Relational operators
data RelOp
Equal :: RelOp
Unequal :: RelOp
Less :: RelOp
LessOrEqual :: RelOp
Greater :: RelOp
GreaterOrEqual :: RelOp
In :: RelOp
-- | 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.
data WirthySubsetOf l
WirthySubsetOf :: l -> WirthySubsetOf l
-- | A modified Maybe with kind that fits the types associated with
-- Wirthy.
newtype Maybe3 (f :: k -> k1 -> k2 -> Type) (a :: k) (b :: k1) (c :: k2)
Maybe3 :: Maybe (f a b c) -> Maybe3 (f :: k -> k1 -> k2 -> Type) (a :: k) (b :: k1) (c :: k2)
-- | Smart Maybe3 constructor corresponding to Just
just3 :: forall k1 k2 k3 f (a :: k1) (b :: k2) (c :: k3). f a b c -> Maybe3 f a b c
-- | Smart Maybe3 destructor corresponding to maybe
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
-- | Smart Maybe3 constructor corresponding to Nothing
nothing3 :: forall k1 k2 k3 (f :: k1 -> k2 -> k3 -> Type) (a :: k1) (b :: k2) (c :: k3). Maybe3 f a b c
instance Language.Oberon.Abstract.Wirthy l => Language.Modula2.Abstract.Modula2 (Language.Oberon.Abstract.WirthySubsetOf l)
-- | Concrete data types for Modula-2 constructs that make up its Abstract
-- Syntax Tree. Every data type from this module is an instance of a type
-- family declared in Language.Modula2.Abstract. This way it can
-- be replaced by another data type for another language while leaving
-- other types to be reused.
module Language.Modula2.AST
data Statement λ l f' f
EmptyStatement :: Statement λ l f' f
Assignment :: f (Designator l l f' f') -> f (Expression l l f' f') -> Statement λ l f' f
ProcedureCall :: f (Designator l l f' f') -> Maybe (ZipList (f (Expression l l f' f'))) -> Statement λ l f' f
If :: f (ConditionalBranch l l f' f') -> ZipList (f (ConditionalBranch l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Statement λ l f' f
CaseStatement :: f (Expression l l f' f') -> ZipList (f (Case l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Statement λ l f' f
While :: f (Expression l l f' f') -> f (StatementSequence l l f' f') -> Statement λ l f' f
Repeat :: f (StatementSequence l l f' f') -> f (Expression l l f' f') -> Statement λ l f' f
For :: 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 f' f
Loop :: f (StatementSequence l l f' f') -> Statement λ l f' f
With :: f (Designator l l f' f') -> f (StatementSequence l l f' f') -> Statement λ l f' f
Exit :: Statement λ l f' f
Return :: Maybe (f (Expression l l f' f')) -> Statement λ l f' f
data ProcedureHeading λ l f' f
ProcedureHeading :: Ident -> Maybe (f (FormalParameters l l f' f')) -> ProcedureHeading λ l f' f
data Variant λ l f' f
Variant :: f (CaseLabels l l f' f') -> ZipList (f (CaseLabels l l f' f')) -> ZipList (f (FieldList l l f' f')) -> Variant λ l f' f
data FieldList λ l f' f
FieldList :: IdentList l -> f (Type l l f' f') -> FieldList λ l f' f
CaseFieldList :: Maybe Ident -> QualIdent l -> f (Variant l l f' f') -> ZipList (f (Variant l l f' f')) -> ZipList (f (FieldList l l f' f')) -> FieldList λ l f' f
data Type λ l f' f
TypeReference :: QualIdent l -> Type λ l f' f
ArrayType :: ZipList (f (Type l l f' f')) -> f (Type l l f' f') -> Type λ l f' f
EnumerationType :: IdentList l -> Type λ l f' f
SubrangeType :: Maybe (QualIdent l) -> f (ConstExpression l l f' f') -> f (ConstExpression l l f' f') -> Type λ l f' f
SetType :: f (Type l l f' f') -> Type λ l f' f
RecordType :: ZipList (f (FieldList l l f' f')) -> Type λ l f' f
PointerType :: f (Type l l f' f') -> Type λ l f' f
ProcedureType :: Maybe (f (FormalParameters l l f' f')) -> Type λ l f' f
data Designator λ l f' f
Variable :: QualIdent l -> Designator λ l f' f
Field :: f (Designator l l f' f') -> Ident -> Designator λ l f' f
Index :: f (Designator l l f' f') -> f (Expression l l f' f') -> ZipList (f (Expression l l f' f')) -> Designator λ l f' f
Dereference :: f (Designator l l f' f') -> Designator λ l f' f
data Expression λ l f' f
Relation :: RelOp -> f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Positive :: f (Expression l l f' f') -> Expression λ l f' f
Negative :: f (Expression l l f' f') -> Expression λ l f' f
Add :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Subtract :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Or :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Multiply :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Divide :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
IntegerDivide :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Modulo :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
And :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Set :: Maybe (QualIdent l) -> ZipList (f (Element l l f' f')) -> Expression λ l f' f
Read :: f (Designator l l f' f') -> Expression λ l f' f
FunctionCall :: f (Designator l l f' f') -> ZipList (f (Expression l l f' f')) -> Expression λ l f' f
Not :: f (Expression l l f' f') -> Expression λ l f' f
Literal :: f (Value l l f' f') -> Expression λ l f' f
data QualIdent l
QualIdent :: [Ident] -> Ident -> QualIdent l
data Declaration (full :: Bool) λ l (f' :: * -> *) (f :: * -> *)
[ConstantDeclaration] :: IdentDef l -> f (ConstExpression l l f' f') -> Declaration x λ l f' f
[TypeDeclaration] :: IdentDef l -> f (Type l l f' f') -> Declaration x λ l f' f
[OpaqueTypeDeclaration] :: IdentDef l -> Declaration False λ l f' f
[VariableDeclaration] :: IdentList l -> f (Type l l f' f') -> Declaration x λ l f' f
[ProcedureDeclaration] :: f (ProcedureHeading l l f' f') -> f (Block l l f' f') -> Declaration True λ l f' f
[ProcedureDefinition] :: f (ProcedureHeading l l f' f') -> Declaration False λ l f' f
[ModuleDeclaration] :: Ident -> Maybe (f (Priority l l f' f')) -> [Import l] -> Maybe (Export l) -> f (Block l l f' f') -> Declaration True λ l f' f
data Export λ
Export :: Bool -> NonEmpty Ident -> Export λ
data Import λ
Import :: Maybe Ident -> NonEmpty Ident -> Import λ
data Module λ l f' f
DefinitionModule :: Ident -> [Import l] -> Maybe (Export l) -> ZipList (f (Definition l l f' f')) -> Module λ l f' f
ImplementationModule :: Ident -> Maybe (f (Priority l l f' f')) -> [Import l] -> f (Block l l f' f') -> Module λ l f' f
ProgramModule :: Ident -> Maybe (f (Priority l l f' f')) -> [Import l] -> f (Block l l f' f') -> Module λ l f' f
newtype IdentDef l
IdentDef :: Ident -> IdentDef l
-- | Data type representing the Modula-2 language, as originally specified
-- by ''Report on the Programming Language Modula-2''.
data Language
Language :: Language
type Ident = Text
data Value λ l (f' :: Type -> Type) (f :: Type -> Type)
Boolean :: Bool -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
Builtin :: Text -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
CharCode :: Int -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
Integer :: Integer -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
Nil :: Value λ l (f' :: Type -> Type) (f :: Type -> Type)
Real :: Double -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
String :: Text -> Value λ l (f' :: Type -> Type) (f :: Type -> Type)
data Element λ l (f' :: Type -> Type) (f :: Type -> Type)
Element :: f (Expression l l f' f') -> Element λ l (f' :: Type -> Type) (f :: Type -> Type)
Range :: f (Expression l l f' f') -> f (Expression l l f' f') -> Element λ l (f' :: Type -> Type) (f :: Type -> Type)
data FormalParameters λ l (f' :: Type -> Type) (f :: Type -> Type)
FormalParameters :: ZipList (f (FPSection l l f' f')) -> Maybe (ReturnType l) -> FormalParameters λ l (f' :: Type -> Type) (f :: Type -> Type)
data FPSection λ l (f' :: Type -> Type) (f :: Type -> Type)
FPSection :: Bool -> [Ident] -> f (Type l l f' f') -> FPSection λ l (f' :: Type -> Type) (f :: Type -> Type)
data Block λ l (f' :: Type -> Type) (f :: Type -> Type)
Block :: ZipList (f (Declaration l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Block λ l (f' :: Type -> Type) (f :: Type -> Type)
newtype StatementSequence λ l (f' :: Type -> Type) (f :: Type -> Type)
StatementSequence :: ZipList (f (Statement l l f' f')) -> StatementSequence λ l (f' :: Type -> Type) (f :: Type -> Type)
data Case λ l (f' :: Type -> Type) (f :: Type -> Type)
Case :: f (CaseLabels l l f' f') -> ZipList (f (CaseLabels l l f' f')) -> f (StatementSequence l l f' f') -> Case λ l (f' :: Type -> Type) (f :: Type -> Type)
data CaseLabels λ l (f' :: Type -> Type) (f :: Type -> Type)
SingleLabel :: f (ConstExpression l l f' f') -> CaseLabels λ l (f' :: Type -> Type) (f :: Type -> Type)
LabelRange :: f (ConstExpression l l f' f') -> f (ConstExpression l l f' f') -> CaseLabels λ l (f' :: Type -> Type) (f :: Type -> Type)
data ConditionalBranch λ l (f' :: Type -> Type) (f :: Type -> Type)
ConditionalBranch :: f (Expression l l f' f') -> f (StatementSequence l l f' f') -> ConditionalBranch λ l (f' :: Type -> Type) (f :: Type -> Type)
-- | Relational operators
data RelOp
Equal :: RelOp
Unequal :: RelOp
Less :: RelOp
LessOrEqual :: RelOp
Greater :: RelOp
GreaterOrEqual :: RelOp
In :: RelOp
instance Rank2.Apply (Language.Modula2.AST.Module λ l f')
instance Rank2.Apply (Language.Modula2.AST.Declaration full λ l f')
instance Rank2.Apply (Language.Modula2.AST.Type λ l f')
instance Rank2.Apply (Language.Modula2.AST.Statement λ l f')
instance Rank2.Apply (Language.Modula2.AST.Expression λ l f')
instance Rank2.Apply (Language.Modula2.AST.Designator λ l f')
instance Rank2.Apply (Language.Modula2.AST.FieldList λ l f')
instance Rank2.Apply (Language.Modula2.AST.Variant λ l f')
instance Rank2.Apply (Language.Modula2.AST.ProcedureHeading λ l f')
instance Rank2.Functor (Language.Modula2.AST.Module λ l f')
instance Rank2.Functor (Language.Modula2.AST.Declaration full λ l f')
instance Rank2.Functor (Language.Modula2.AST.Type λ l f')
instance Rank2.Functor (Language.Modula2.AST.Statement λ l f')
instance Rank2.Functor (Language.Modula2.AST.Expression λ l f')
instance Rank2.Functor (Language.Modula2.AST.Designator λ l f')
instance Rank2.Functor (Language.Modula2.AST.FieldList λ l f')
instance Rank2.Functor (Language.Modula2.AST.Variant λ l f')
instance Rank2.Functor (Language.Modula2.AST.ProcedureHeading λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Module λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Declaration full λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Type λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Statement λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Expression λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Designator λ l f')
instance Rank2.Foldable (Language.Modula2.AST.FieldList λ l f')
instance Rank2.Foldable (Language.Modula2.AST.Variant λ l f')
instance Rank2.Foldable (Language.Modula2.AST.ProcedureHeading λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Module λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Declaration full λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Type λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Statement λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Expression λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Designator λ l f')
instance Rank2.Traversable (Language.Modula2.AST.FieldList λ l f')
instance Rank2.Traversable (Language.Modula2.AST.Variant λ l f')
instance Rank2.Traversable (Language.Modula2.AST.ProcedureHeading λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Modula2.Abstract.Definition l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Module λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Modula2.Abstract.Definition l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Module λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Modula2.Abstract.Definition l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Module λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Designator λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Designator λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Designator λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.FieldList λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.FieldList λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Modula2.Abstract.Variant l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.FieldList λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.AST.ProcedureHeading λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.AST.ProcedureHeading λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.AST.ProcedureHeading λ l f')
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Modula2.Abstract.Definition l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Module λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Modula2.Abstract.Definition l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Module λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Modula2.Abstract.Definition l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Module λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Case l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Case l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Case l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Element l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Element l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Element l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Designator λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Designator λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Designator λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.FieldList λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.FieldList λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Variant l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.FieldList λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Functor t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.Variant λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.Variant λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.Variant λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Functor t (Language.Modula2.AST.ProcedureHeading λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Foldable t (Language.Modula2.AST.ProcedureHeading λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Traversable t (Language.Modula2.AST.ProcedureHeading λ l)
instance Data.Data.Data Language.Modula2.AST.Language
instance GHC.Show.Show (Language.Modula2.AST.IdentDef l)
instance GHC.Classes.Ord (Language.Modula2.AST.IdentDef l)
instance GHC.Classes.Eq (Language.Modula2.AST.IdentDef l)
instance Data.Data.Data l => Data.Data.Data (Language.Modula2.AST.IdentDef l)
instance GHC.Show.Show (Language.Modula2.AST.Import λ)
instance Data.Data.Data λ => Data.Data.Data (Language.Modula2.AST.Import λ)
instance GHC.Show.Show (Language.Modula2.AST.Export λ)
instance Data.Data.Data λ => Data.Data.Data (Language.Modula2.AST.Export λ)
instance GHC.Show.Show (Language.Modula2.AST.QualIdent l)
instance GHC.Classes.Ord (Language.Modula2.AST.QualIdent l)
instance GHC.Classes.Eq (Language.Modula2.AST.QualIdent l)
instance Data.Data.Data l => Data.Data.Data (Language.Modula2.AST.QualIdent l)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.Import l), Data.Data.Data (Language.Modula2.Abstract.Export l), Data.Data.Data (f (Language.Modula2.Abstract.Priority l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Declaration l l f' f')), Data.Data.Data (f (Language.Modula2.Abstract.Definition l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Block l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Module λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.Import l), GHC.Show.Show (Language.Modula2.Abstract.Export l), GHC.Show.Show (f (Language.Modula2.Abstract.Priority l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Declaration l l f' f')), GHC.Show.Show (f (Language.Modula2.Abstract.Definition l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Block l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Module λ l f' f)
instance (GHC.Show.Show (Language.Modula2.Abstract.Export l), GHC.Show.Show (Language.Oberon.Abstract.Import l), GHC.Show.Show (f (Language.Oberon.Abstract.Type l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConstExpression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FormalParameters l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ProcedureHeading l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Block l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Block l l f' f')), GHC.Show.Show (Language.Oberon.Abstract.IdentDef l)) => GHC.Show.Show (Language.Modula2.AST.Declaration λ x l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Element l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Value l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Expression λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Element l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Value l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Expression λ l f' f)
instance (GHC.Classes.Eq (Language.Oberon.Abstract.QualIdent l), GHC.Classes.Eq (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Element l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Value l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Classes.Eq (Language.Modula2.AST.Expression λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Designator λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Designator λ l f' f)
instance (GHC.Classes.Eq (Language.Oberon.Abstract.QualIdent l), GHC.Classes.Eq (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Classes.Eq (Language.Modula2.AST.Designator λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (Language.Oberon.Abstract.IdentList l), Data.Data.Data (f (Language.Oberon.Abstract.Type l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.ConstExpression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FormalParameters l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FieldList l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Type λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (Language.Oberon.Abstract.IdentList l), GHC.Show.Show (f (Language.Oberon.Abstract.Type l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConstExpression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FormalParameters l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FieldList l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Type λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (Language.Oberon.Abstract.IdentList l), Data.Data.Data (f (Language.Oberon.Abstract.Type l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f')), Data.Data.Data (f (Language.Modula2.Abstract.Variant l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FieldList l l f' f'))) => Data.Data.Data (Language.Modula2.AST.FieldList λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (Language.Oberon.Abstract.IdentList l), GHC.Show.Show (f (Language.Oberon.Abstract.Type l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f')), GHC.Show.Show (f (Language.Modula2.Abstract.Variant l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FieldList l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.FieldList λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.CaseLabels l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FieldList l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Variant λ l f' f)
instance (GHC.Show.Show (f (Language.Oberon.Abstract.CaseLabels l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FieldList l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Variant λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.FormalParameters l l f' f'))) => Data.Data.Data (Language.Modula2.AST.ProcedureHeading λ l f' f)
instance GHC.Show.Show (f (Language.Oberon.Abstract.FormalParameters l l f' f')) => GHC.Show.Show (Language.Modula2.AST.ProcedureHeading λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Case l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.ConditionalBranch l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => Data.Data.Data (Language.Modula2.AST.Statement λ l f' f)
instance (GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Case l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConditionalBranch l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => GHC.Show.Show (Language.Modula2.AST.Statement λ l f' f)
instance Language.Oberon.Abstract.Wirthy Language.Modula2.AST.Language
instance Language.Oberon.Abstract.CoWirthy Language.Modula2.AST.Language
instance Language.Modula2.Abstract.Modula2 Language.Modula2.AST.Language
instance Language.Oberon.Abstract.Nameable Language.Modula2.AST.Language
-- | Modula-2 grammar adapted from ''Report on the Programming Language
-- Modula-2''
module Language.Modula2.Grammar
type NodeWrap = (,) (Position, ParsedLexemes, Position)
-- | The names and types of all the Modula-2 grammar productions
data Modula2Grammar l f p
Modula2Grammar :: p Ident -> p (Value l l f f) -> p (Value l l f f) -> p (Value l l f f) -> p Text -> p Text -> p Text -> p Text -> p Text -> p (QualIdent l) -> p (Declaration l l f f) -> p (Definition l l f f) -> p (NodeWrap (ConstExpression l l f f)) -> p RelOp -> p (f (Expression l l f f) -> f (Expression l l f f) -> Expression l l f f) -> p (f (Expression l l f f) -> f (Expression l l f f) -> Expression l l f f) -> p (Expression l l f f) -> p (Element l l f f) -> p (Declaration l l f f) -> p (Definition l l f f) -> p (Type l l f f) -> p (Type l l f f) -> p (Type l l f f) -> p (IdentList l) -> p (Type l l f f) -> p (Type l l f f) -> p (Type l l f f) -> p [f (FieldList l l f f)] -> p (FieldList l l f f) -> p (Variant l l f f) -> p (NonEmpty (f (CaseLabels l l f f))) -> p (CaseLabels l l f f) -> p (Type l l f f) -> p (Type l l f f) -> p (Type l l f f) -> p (FormalParameters l l f f) -> p (Declaration l l f f) -> p (Definition l l f f) -> p (Designator l l f f) -> p (NonEmpty (f (Expression l l f f))) -> p (NodeWrap (Expression l l f f)) -> p (NodeWrap (Expression l l f f)) -> p (NodeWrap (Expression l l f f)) -> p (NodeWrap (Expression l l f f)) -> p [f (Expression l l f f)] -> p (Statement l l f f) -> p (Statement l l f f) -> p (Statement l l f f) -> p (NodeWrap (StatementSequence l l f f)) -> p (Statement l l f f) -> p (Statement l l f f) -> p (Case l l f f) -> p (Statement l l f f) -> p (Statement l l f f) -> p (Statement l l f f) -> p (Statement l l f f) -> p (Statement l l f f) -> p (Declaration l l f f) -> p (Ident, ProcedureHeading l l f f) -> p (Block l l f f) -> p [f (Declaration l l f f)] -> p (FormalParameters l l f f) -> p (FPSection l l f f) -> p (Type l l f f) -> p (Declaration l l f f) -> p (NodeWrap (Priority l l f f)) -> p (Export l) -> p (Import l) -> p (Module l l f f) -> p [f (Definition l l f f)] -> p (Module l l f f) -> p (NodeWrap (Module l l f f)) -> Modula2Grammar l f p
[ident] :: Modula2Grammar l f p -> p Ident
[number] :: Modula2Grammar l f p -> p (Value l l f f)
[integer] :: Modula2Grammar l f p -> p (Value l l f f)
[real] :: Modula2Grammar l f p -> p (Value l l f f)
[scaleFactor] :: Modula2Grammar l f p -> p Text
[hexDigit] :: Modula2Grammar l f p -> p Text
[digit] :: Modula2Grammar l f p -> p Text
[octalDigit] :: Modula2Grammar l f p -> p Text
[string_prod] :: Modula2Grammar l f p -> p Text
[qualident] :: Modula2Grammar l f p -> p (QualIdent l)
[constantDeclaration] :: Modula2Grammar l f p -> p (Declaration l l f f)
[constantDefinition] :: Modula2Grammar l f p -> p (Definition l l f f)
[constExpression] :: Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
[relation] :: Modula2Grammar l f p -> p RelOp
[addOperator] :: Modula2Grammar l f p -> p (f (Expression l l f f) -> f (Expression l l f f) -> Expression l l f f)
[mulOperator] :: Modula2Grammar l f p -> p (f (Expression l l f f) -> f (Expression l l f f) -> Expression l l f f)
[set] :: Modula2Grammar l f p -> p (Expression l l f f)
[element] :: Modula2Grammar l f p -> p (Element l l f f)
[typeDeclaration] :: Modula2Grammar l f p -> p (Declaration l l f f)
[typeDefinition] :: Modula2Grammar l f p -> p (Definition l l f f)
[type_prod] :: Modula2Grammar l f p -> p (Type l l f f)
[simpleType] :: Modula2Grammar l f p -> p (Type l l f f)
[enumeration] :: Modula2Grammar l f p -> p (Type l l f f)
[identList] :: Modula2Grammar l f p -> p (IdentList l)
[subrangeType] :: Modula2Grammar l f p -> p (Type l l f f)
[arrayType] :: Modula2Grammar l f p -> p (Type l l f f)
[recordType] :: Modula2Grammar l f p -> p (Type l l f f)
[fieldListSequence] :: Modula2Grammar l f p -> p [f (FieldList l l f f)]
[fieldList] :: Modula2Grammar l f p -> p (FieldList l l f f)
[variant] :: Modula2Grammar l f p -> p (Variant l l f f)
[caseLabelList] :: Modula2Grammar l f p -> p (NonEmpty (f (CaseLabels l l f f)))
[caseLabels] :: Modula2Grammar l f p -> p (CaseLabels l l f f)
[setType] :: Modula2Grammar l f p -> p (Type l l f f)
[pointerType] :: Modula2Grammar l f p -> p (Type l l f f)
[procedureType] :: Modula2Grammar l f p -> p (Type l l f f)
[formalTypeList] :: Modula2Grammar l f p -> p (FormalParameters l l f f)
[variableDeclaration] :: Modula2Grammar l f p -> p (Declaration l l f f)
[variableDefinition] :: Modula2Grammar l f p -> p (Definition l l f f)
[designator] :: Modula2Grammar l f p -> p (Designator l l f f)
[expList] :: Modula2Grammar l f p -> p (NonEmpty (f (Expression l l f f)))
[expression] :: Modula2Grammar l f p -> p (NodeWrap (Expression l l f f))
[simpleExpression] :: Modula2Grammar l f p -> p (NodeWrap (Expression l l f f))
[term] :: Modula2Grammar l f p -> p (NodeWrap (Expression l l f f))
[factor] :: Modula2Grammar l f p -> p (NodeWrap (Expression l l f f))
[actualParameters] :: Modula2Grammar l f p -> p [f (Expression l l f f)]
[statement] :: Modula2Grammar l f p -> p (Statement l l f f)
[assignment] :: Modula2Grammar l f p -> p (Statement l l f f)
[procedureCall] :: Modula2Grammar l f p -> p (Statement l l f f)
[statementSequence] :: Modula2Grammar l f p -> p (NodeWrap (StatementSequence l l f f))
[ifStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[caseStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[case_prod] :: Modula2Grammar l f p -> p (Case l l f f)
[whileStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[repeatStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[forStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[loopStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[withStatement] :: Modula2Grammar l f p -> p (Statement l l f f)
[procedureDeclaration] :: Modula2Grammar l f p -> p (Declaration l l f f)
[procedureHeading] :: Modula2Grammar l f p -> p (Ident, ProcedureHeading l l f f)
[block] :: Modula2Grammar l f p -> p (Block l l f f)
[declarationSequence] :: Modula2Grammar l f p -> p [f (Declaration l l f f)]
[formalParameters] :: Modula2Grammar l f p -> p (FormalParameters l l f f)
[fPSection] :: Modula2Grammar l f p -> p (FPSection l l f f)
[formalType] :: Modula2Grammar l f p -> p (Type l l f f)
[moduleDeclaration] :: Modula2Grammar l f p -> p (Declaration l l f f)
[priority] :: Modula2Grammar l f p -> p (NodeWrap (Priority l l f f))
[export] :: Modula2Grammar l f p -> p (Export l)
[import_prod] :: Modula2Grammar l f p -> p (Import l)
[definitionModule] :: Modula2Grammar l f p -> p (Module l l f f)
[definitionSequence] :: Modula2Grammar l f p -> p [f (Definition l l f f)]
[programModule] :: Modula2Grammar l f p -> p (Module l l f f)
[compilationUnit] :: Modula2Grammar l f p -> p (NodeWrap (Module l l f f))
type Parser = ParserT ((,) [[Lexeme]])
modula2grammar :: Grammar (Modula2Grammar Language NodeWrap) Parser Text
-- | All the productions of Modula-2 grammar
grammar :: forall l g. (Modula2 l, LexicalParsing (Parser g Text)) => GrammarBuilder (Modula2Grammar l NodeWrap) g Parser Text
comment :: Parser g Text Text
whiteSpace :: LexicalParsing (Parser g Text) => Parser g Text ()
wrap :: Parser g Text a -> Parser g Text (NodeWrap a)
moptional :: (Alternative f, Monoid (f a)) => f a -> f a
delimiter :: LexicalParsing (Parser g Text) => Text -> Parser g Text ()
operator :: LexicalParsing (Parser g Text) => Text -> Parser g Text ()
reservedWords :: [Text]
data Lexeme
WhiteSpace :: Text -> Lexeme
[lexemeText] :: Lexeme -> Text
Comment :: Text -> Lexeme
[lexemeText] :: Lexeme -> Text
Token :: TokenType -> Text -> Lexeme
[lexemeType] :: Lexeme -> TokenType
[lexemeText] :: Lexeme -> Text
newtype ParsedLexemes
Trailing :: [Lexeme] -> ParsedLexemes
instance Rank2.Functor (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.Apply (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.Applicative (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.Foldable (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.Traversable (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.Distributive (Language.Modula2.Grammar.Modula2Grammar l f)
instance Rank2.DistributiveTraversable (Language.Modula2.Grammar.Modula2Grammar l f)
instance Text.Parser.Token.TokenParsing (Language.Modula2.Grammar.Parser (Language.Modula2.Grammar.Modula2Grammar l f) Data.Text.Internal.Text)
instance Text.Grampa.Class.LexicalParsing (Language.Modula2.Grammar.Parser (Language.Modula2.Grammar.Modula2Grammar l f) Data.Text.Internal.Text)
-- | The main export of this module is the function foldConstants
-- that folds the constants in a Modula-2 AST using an attribute grammar.
-- Other exports are helper functions and attribute types that can be
-- reused for other languages or attribute grammars.
module Language.Modula2.ConstantFolder
-- | Fold the constants in the given collection of Modula-2 modules (a
-- Map of modules keyed by module name). It uses the constant
-- declarations from the modules as well as the given Environment
-- of predefined constants and functions.
--
-- Note that the Modula-2 Language satisfies all constraints in
-- the function's type signature.
foldConstants :: forall l. (Modula2 l, Nameable l, Ord (QualIdent l), Show (QualIdent l), Atts (Inherited (Auto ConstantFold)) (Block l l Sem Sem) ~ InhCF l, Atts (Inherited (Auto ConstantFold)) (Definition l l Sem Sem) ~ InhCF l, Atts (Inherited (Auto ConstantFold)) (Expression l l Sem Sem) ~ InhCF l, Atts (Synthesized (Auto ConstantFold)) (Block l l Sem Sem) ~ SynCFMod' l (Block l l), Atts (Synthesized (Auto ConstantFold)) (Block l l Placed Placed) ~ SynCFMod' l (Block l l), Atts (Synthesized (Auto ConstantFold)) (Definition l l Sem Sem) ~ SynCFMod' l (Definition l l), Atts (Synthesized (Auto ConstantFold)) (Definition l l Placed Placed) ~ SynCFMod' l (Definition l l), Atts (Synthesized (Auto ConstantFold)) (Expression l l Sem Sem) ~ SynCFExp l l, Atts (Synthesized (Auto ConstantFold)) (Expression l l Placed Placed) ~ SynCFExp l l, Functor (Auto ConstantFold) (Block l l), Functor (Auto ConstantFold) (Definition l l), Functor (Auto ConstantFold) (Expression l l)) => Environment l -> Module l l Placed Placed -> Module l l Placed Placed
data ConstantFold
type Sem = Semantics Auto ConstantFold
type Environment l = Map QualIdent l Maybe Value l l Placed Placed
data InhCF l
data SynCF a
SynCF :: Mapped Placed a -> SynCF a
[$sel:folded:SynCF] :: SynCF a -> Mapped Placed a
data SynCFDesignator l
SynCFDesignator :: Mapped Placed (Designator l l Placed Placed) -> Maybe (Placed (Value l l Placed Placed)) -> SynCFDesignator l
[$sel:folded:SynCFDesignator] :: SynCFDesignator l -> Mapped Placed (Designator l l Placed Placed)
[$sel:designatorValue:SynCFDesignator] :: SynCFDesignator l -> Maybe (Placed (Value l l Placed Placed))
data SynCFExp λ l
SynCFExp :: Mapped Placed (Expression λ l Placed Placed) -> Maybe (Placed (Value l l Placed Placed)) -> SynCFExp λ l
[$sel:folded:SynCFExp] :: SynCFExp λ l -> Mapped Placed (Expression λ l Placed Placed)
[$sel:foldedValue:SynCFExp] :: SynCFExp λ l -> Maybe (Placed (Value l l Placed Placed))
data SynCFMod l a
SynCFMod :: Environment l -> Mapped Placed a -> SynCFMod l a
[$sel:moduleEnv:SynCFMod] :: SynCFMod l a -> Environment l
[$sel:folded:SynCFMod] :: SynCFMod l a -> Mapped Placed a
type SynCFMod' l (node :: Type -> Type -> Type -> Type -> Type) = SynCFMod l node Placed Placed
foldBinaryArithmetic :: forall λ l f. (f ~ Placed, Value l ~ Value l, Wirthy λ, Pretty (Value l l Identity Identity)) => (Int, ParsedLexemes, Int) -> (f (Expression l l f f) -> f (Expression l l f f) -> Expression λ l f f) -> (forall n. Num n => n -> n -> n) -> SynCFExp l l -> SynCFExp l l -> SynCFExp λ l
foldBinaryBoolean :: forall λ l f. (f ~ Placed, Value l ~ Value l, Wirthy λ, Pretty (Value l l Identity Identity)) => (Int, ParsedLexemes, Int) -> (f (Expression l l f f) -> f (Expression l l f f) -> Expression λ l f f) -> (Bool -> Bool -> Bool) -> SynCFExp l l -> SynCFExp l l -> SynCFExp λ l
foldBinaryFractional :: forall λ l f. (f ~ Placed, Value l ~ Value l, Wirthy λ, Pretty (Value l l Identity Identity)) => (Int, ParsedLexemes, Int) -> (f (Expression l l f f) -> f (Expression l l f f) -> Expression λ l f f) -> (forall n. Fractional n => n -> n -> n) -> SynCFExp l l -> SynCFExp l l -> SynCFExp λ l
foldBinaryInteger :: forall λ l f. (f ~ Placed, Value l ~ Value l, Wirthy λ, Pretty (Value l l Identity Identity)) => (Int, ParsedLexemes, Int) -> (f (Expression l l f f) -> f (Expression l l f f) -> Expression λ l f f) -> (forall n. Integral n => n -> n -> n) -> SynCFExp l l -> SynCFExp l l -> SynCFExp λ l
maxCardinal :: Integer
maxInteger :: Integer
minInteger :: Integer
maxInt32 :: Integer
minInt32 :: Integer
maxSet :: Integer
minSet :: Integer
doubleSize :: Integer
floatSize :: Integer
intSize :: Integer
int32Size :: Integer
maxReal :: Double
minReal :: Double
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l)
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem)
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Module l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Module l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.ProcedureHeading l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.ProcedureHeading l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Type l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Type l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.FieldList l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.FieldList l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Statement l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Statement l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Variant l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Variant l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Type l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Type l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Type l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.FieldList l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.FieldList l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.FieldList l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.ProcedureHeading l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.ProcedureHeading l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.ProcedureHeading l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Statement l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Statement l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Statement l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Variant l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Variant l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Variant l l)
instance GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l) => Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ConstantFolder.Modules l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed
instance (Language.Modula2.Abstract.Modula2 l, Language.Oberon.Abstract.Nameable l, k GHC.Types.~ Language.Oberon.Abstract.QualIdent l, GHC.Classes.Ord k, GHC.Show.Show k, v GHC.Types.~ Language.Oberon.Abstract.Value l l Language.Modula2.ConstantFolder.Placed Language.Modula2.ConstantFolder.Placed, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Block l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Block l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Modula2.Abstract.Definition l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Modula2.Abstract.Definition l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Modula2.Abstract.Definition l l Language.Modula2.ConstantFolder.Placed Language.Modula2.ConstantFolder.Placed) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Modula2.Abstract.Definition l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Expression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp l l) => Transformation.AG.Generics.SynthesizedField "moduleEnv" (Data.Map.Internal.Map k (GHC.Maybe.Maybe v)) (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Module l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed
instance (Language.Modula2.Abstract.Modula2 l, Language.Oberon.Abstract.Nameable l, k GHC.Types.~ Language.Oberon.Abstract.QualIdent l, GHC.Classes.Ord k, v GHC.Types.~ Language.Oberon.Abstract.Value l l Language.Modula2.ConstantFolder.Placed Language.Modula2.ConstantFolder.Placed, Language.Modula2.Abstract.Export l GHC.Types.~ Language.Modula2.AST.Export l, Language.Oberon.Abstract.Value l GHC.Types.~ Language.Oberon.AST.Value l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Declaration l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Declaration l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Type l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.Type l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.ProcedureHeading l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.FormalParameters l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.FormalParameters l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Block l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Block l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.ConstExpression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp l l) => Transformation.AG.Generics.SynthesizedField "moduleEnv" (Data.Map.Internal.Map k (GHC.Maybe.Maybe v)) (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Declaration full l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed
instance (Language.Oberon.Abstract.Nameable l, GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l), Language.Modula2.Abstract.Modula2 λ, Language.Oberon.Abstract.Value l GHC.Types.~ Language.Oberon.AST.Value l, Language.Oberon.Abstract.QualIdent l GHC.Types.~ Language.Modula2.AST.QualIdent l, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.AST.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Expression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp l l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Element l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.Element l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Designator l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFDesignator l) => Transformation.AG.Generics.Synthesizer (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Expression λ l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed
instance (Language.Modula2.Abstract.Modula2 l, GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l), v GHC.Types.~ Language.Oberon.Abstract.Value l l Language.Modula2.ConstantFolder.Placed Language.Modula2.ConstantFolder.Placed, Transformation.AG.Atts (Transformation.AG.Inherited (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Expression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.InhCF l, Transformation.AG.Atts (Transformation.AG.Inherited (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Designator l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.InhCF l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Expression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp λ l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Designator l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFDesignator l) => Transformation.AG.Generics.SynthesizedField "designatorValue" (GHC.Maybe.Maybe (Language.Modula2.ConstantFolder.Placed v)) (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.AST.Designator l l) Language.Oberon.ConstantFolder.Sem Language.Modula2.ConstantFolder.Placed
instance (Transformation.Transformation t, GHC.Base.Functor (Transformation.Domain t), Transformation.Deep.Functor t (Language.Modula2.AST.Module l l), Transformation.At t (Language.Modula2.AST.Module l l (Transformation.Codomain t) (Transformation.Codomain t))) => Transformation.Deep.Functor t (Language.Modula2.ConstantFolder.Modules l)
instance Rank2.Functor (Language.Modula2.ConstantFolder.Modules l f')
instance Rank2.Apply (Language.Modula2.ConstantFolder.Modules l f')
instance GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l) => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ConstantFolder.Modules l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem)
-- | ISO Modula-2 Finally Tagless Abstract Syntax Tree definitions
module Language.Modula2.ISO.Abstract
-- | The additional finally-tagless associated types and methods relevant
-- to the ISO Modula-2 language.
class Modula2 l => Modula2 l where {
type family AddressedIdent l = (d :: * -> (* -> *) -> (* -> *) -> *) | d -> l;
type family Item l = (i :: * -> (* -> *) -> (* -> *) -> *) | i -> l;
}
emptyVariant :: Modula2 l => Variant l l' f' f
addressedVariableDeclaration :: Modula2 l => NonEmpty (f (AddressedIdent l' l' f' f')) -> f (Type l' l' f' f') -> Declaration l l' f' f
forwardProcedureDeclaration :: Modula2 l => f (ProcedureHeading l' l' f' f') -> Declaration l l' f' f
exceptionHandlingBlock :: Modula2 l => [f (Declaration l' l' f' f')] -> Maybe (f (StatementSequence l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Maybe (f (StatementSequence l' l' f' f')) -> Block l l' f' f
addressedIdent :: Modula2 l => Ident -> f (ConstExpression l' l' f' f') -> AddressedIdent l l' f' f
unaddressedIdent :: Modula2 l => Ident -> AddressedIdent l l' f' f
packedSetType :: Modula2 l => f (Type l' l' f' f') -> Type l l' f' f
retryStatement :: Modula2 l => Statement l l' f' f
array :: Modula2 l => Maybe (QualIdent l') -> [f (Item l' l' f' f')] -> Expression l l' f' f
record :: Modula2 l => Maybe (QualIdent l') -> [f (Expression l' l' f' f')] -> Expression l l' f' f
remainder :: Modula2 l => f (Expression l' l' f' f') -> f (Expression l' l' f' f') -> Expression l l' f' f
single :: Modula2 l => f (Expression l' l' f' f') -> Item l l' f' f
repeated :: Modula2 l => f (Expression l' l' f' f') -> f (ConstExpression l' l' f' f') -> Item l l' f' f
instance Language.Oberon.Abstract.Wirthy l => Language.Modula2.ISO.Abstract.Modula2 (Language.Oberon.Abstract.WirthySubsetOf l)
-- | ISO Modula-2 Abstract Syntax Tree definitions
module Language.Modula2.ISO.AST
-- | Data type representing the Modula-2 language, as specified by the ISO
-- standard.
data Language
Language :: Language
data Declaration (full :: Bool) λ l (f' :: * -> *) (f :: * -> *)
[ConstantDeclaration] :: IdentDef l -> f (ConstExpression l l f' f') -> Declaration x λ l f' f
[TypeDeclaration] :: IdentDef l -> f (Type l l f' f') -> Declaration x λ l f' f
[OpaqueTypeDeclaration] :: IdentDef l -> Declaration False λ l f' f
[VariableDeclaration] :: IdentList l -> f (Type l l f' f') -> Declaration x λ l f' f
[AddressedVariableDeclaration] :: f (AddressedIdent l l f' f') -> ZipList (f (AddressedIdent l l f' f')) -> f (Type l l f' f') -> Declaration True λ l f' f
[ProcedureDeclaration] :: f (ProcedureHeading l l f' f') -> f (Block l l f' f') -> Declaration True λ l f' f
[ProcedureDefinition] :: f (ProcedureHeading l l f' f') -> Declaration False λ l f' f
[ForwardProcedureDeclaration] :: f (ProcedureHeading l l f' f') -> Declaration True λ l f' f
[ModuleDeclaration] :: Ident -> Maybe (f (Priority l l f' f')) -> [Import l] -> Maybe (Export l) -> f (Block l l f' f') -> Declaration True λ l f' f
data AddressedIdent λ l f' f
AddressedIdent :: Ident -> f (ConstExpression l l f' f') -> AddressedIdent λ l f' f
UnaddressedIdent :: Ident -> AddressedIdent λ l f' f
data Type λ l f' f
TypeReference :: QualIdent l -> Type λ l f' f
ArrayType :: ZipList (f (Type l l f' f')) -> f (Type l l f' f') -> Type λ l f' f
EnumerationType :: IdentList l -> Type λ l f' f
SubrangeType :: Maybe (QualIdent l) -> f (ConstExpression l l f' f') -> f (ConstExpression l l f' f') -> Type λ l f' f
SetType :: f (Type l l f' f') -> Type λ l f' f
PackedSetType :: f (Type l l f' f') -> Type λ l f' f
RecordType :: ZipList (f (FieldList l l f' f')) -> Type λ l f' f
PointerType :: f (Type l l f' f') -> Type λ l f' f
ProcedureType :: Maybe (f (FormalParameters l l f' f')) -> Type λ l f' f
data Expression λ l f' f
Relation :: RelOp -> f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Positive :: f (Expression l l f' f') -> Expression λ l f' f
Negative :: f (Expression l l f' f') -> Expression λ l f' f
Add :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Subtract :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Or :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Multiply :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Divide :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
IntegerDivide :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Modulo :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Remainder :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
And :: f (Expression l l f' f') -> f (Expression l l f' f') -> Expression λ l f' f
Array :: Maybe (QualIdent l) -> [f (Item l l f' f')] -> Expression λ l f' f
Record :: Maybe (QualIdent l) -> [f (Expression l l f' f')] -> Expression λ l f' f
Set :: Maybe (QualIdent l) -> ZipList (f (Element l l f' f')) -> Expression λ l f' f
Read :: f (Designator l l f' f') -> Expression λ l f' f
FunctionCall :: f (Designator l l f' f') -> ZipList (f (Expression l l f' f')) -> Expression λ l f' f
Not :: f (Expression l l f' f') -> Expression λ l f' f
Literal :: f (Value l l f' f') -> Expression λ l f' f
data Item λ l f' f
Single :: f (Expression l l f' f') -> Item λ l f' f
Repeated :: f (Expression l l f' f') -> f (ConstExpression l l f' f') -> Item λ l f' f
data Variant λ l f' f
Variant :: f (CaseLabels l l f' f') -> ZipList (f (CaseLabels l l f' f')) -> ZipList (f (FieldList l l f' f')) -> Variant λ l f' f
EmptyVariant :: Variant λ l f' f
data Block λ l f' f
Block :: ZipList (f (Declaration l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Block λ l f' f
ExceptionHandlingBlock :: ZipList (f (Declaration l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Block λ l f' f
data Statement λ l f' f
EmptyStatement :: Statement λ l f' f
Assignment :: f (Designator l l f' f') -> f (Expression l l f' f') -> Statement λ l f' f
ProcedureCall :: f (Designator l l f' f') -> Maybe (ZipList (f (Expression l l f' f'))) -> Statement λ l f' f
If :: f (ConditionalBranch l l f' f') -> ZipList (f (ConditionalBranch l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Statement λ l f' f
CaseStatement :: f (Expression l l f' f') -> ZipList (f (Case l l f' f')) -> Maybe (f (StatementSequence l l f' f')) -> Statement λ l f' f
While :: f (Expression l l f' f') -> f (StatementSequence l l f' f') -> Statement λ l f' f
Repeat :: f (StatementSequence l l f' f') -> f (Expression l l f' f') -> Statement λ l f' f
For :: 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 f' f
Loop :: f (StatementSequence l l f' f') -> Statement λ l f' f
With :: f (Designator l l f' f') -> f (StatementSequence l l f' f') -> Statement λ l f' f
Exit :: Statement λ l f' f
Return :: Maybe (f (Expression l l f' f')) -> Statement λ l f' f
RetryStatement :: Statement λ l f' f
instance Rank2.Apply (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Block λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Declaration full λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Type λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Statement λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Expression λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Item λ l f')
instance Rank2.Apply (Language.Modula2.ISO.AST.Variant λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Block λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Declaration full λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Expression λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Item λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Statement λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Type λ l f')
instance Rank2.Functor (Language.Modula2.ISO.AST.Variant λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Block λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Declaration full λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Expression λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Item λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Statement λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Type λ l f')
instance Rank2.Foldable (Language.Modula2.ISO.AST.Variant λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Block λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Declaration full λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Expression λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Item λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Statement λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Type λ l f')
instance Rank2.Traversable (Language.Modula2.ISO.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.AddressedIdent λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Block λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Block λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Declaration l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Block λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Oberon.Abstract.ProcedureHeading l l f' f'), Transformation.At t (Language.Modula2.Abstract.Priority l l f' f'), Transformation.At t (Language.Oberon.Abstract.Block l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Declaration full λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.Item l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.Item l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Modula2.ISO.Abstract.Item l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Element l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Value l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Expression λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Item λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Item λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Item λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConditionalBranch l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Case l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Designator l l f' f'), Transformation.At t (Language.Oberon.Abstract.StatementSequence l l f' f'), Transformation.At t (Language.Oberon.Abstract.Expression l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Statement λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.ConstExpression l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f'), Transformation.At t (Language.Oberon.Abstract.Type l l f' f'), Transformation.At t (Language.Oberon.Abstract.FormalParameters l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Type λ l f')
instance (Transformation.Transformation t, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Functor t (Language.Modula2.ISO.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Foldable t (Language.Modula2.ISO.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.CaseLabels l l f' f'), Transformation.At t (Language.Oberon.Abstract.FieldList l l f' f')) => Transformation.Shallow.Traversable t (Language.Modula2.ISO.AST.Variant λ l f')
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.AddressedIdent λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.AddressedIdent λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.AddressedIdent λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Block λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Block λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Declaration l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Block λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Functor t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Functor t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Foldable t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Foldable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Traversable t (Language.Modula2.ISO.Abstract.AddressedIdent l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.Full.Traversable t (Language.Modula2.Abstract.Priority l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Block l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Declaration full λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Modula2.ISO.Abstract.Item l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Element l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Modula2.ISO.Abstract.Item l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Element l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Modula2.ISO.Abstract.Item l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Element l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Value l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Expression λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Item λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Item λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Item λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Case l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Functor t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Case l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConditionalBranch l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Case l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Designator l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.StatementSequence l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Expression l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Statement λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Functor t (Language.Oberon.Abstract.Type l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.ConstExpression l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FieldList l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.Type l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FormalParameters l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Type λ l)
instance (Transformation.Transformation t, Transformation.Full.Functor t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Functor t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Functor t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Functor t (Language.Modula2.ISO.AST.Variant λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Const.Const m, GHC.Base.Monoid m, Transformation.Full.Foldable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Foldable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Foldable t (Language.Modula2.ISO.AST.Variant λ l)
instance (Transformation.Transformation t, Transformation.Codomain t GHC.Types.~ Data.Functor.Compose.Compose m f, GHC.Base.Applicative m, Transformation.Full.Traversable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.CaseLabels l l), Transformation.Full.Traversable t (Language.Oberon.Abstract.FieldList l l)) => Transformation.Deep.Traversable t (Language.Modula2.ISO.AST.Variant λ l)
instance Data.Data.Data Language.Modula2.ISO.AST.Language
instance (GHC.Show.Show (Language.Modula2.Abstract.Export l), GHC.Show.Show (Language.Oberon.Abstract.Import l), GHC.Show.Show (f (Language.Modula2.ISO.Abstract.AddressedIdent l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Type l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConstExpression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FormalParameters l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ProcedureHeading l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Block l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Block l l f' f')), GHC.Show.Show (Language.Oberon.Abstract.IdentDef l)) => GHC.Show.Show (Language.Modula2.ISO.AST.Declaration x λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.ConstExpression l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.AddressedIdent λ l f' f)
instance GHC.Show.Show (f (Language.Oberon.Abstract.ConstExpression l l f' f')) => GHC.Show.Show (Language.Modula2.ISO.AST.AddressedIdent λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (Language.Oberon.Abstract.IdentList l), Data.Data.Data (f (Language.Oberon.Abstract.Type l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.ConstExpression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FormalParameters l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FieldList l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Type λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (Language.Oberon.Abstract.IdentList l), GHC.Show.Show (f (Language.Oberon.Abstract.Type l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConstExpression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FormalParameters l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FieldList l l f' f'))) => GHC.Show.Show (Language.Modula2.ISO.AST.Type λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (Language.Oberon.Abstract.QualIdent l), Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Element l l f' f')), Data.Data.Data (f (Language.Modula2.ISO.Abstract.Item l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Value l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Expression λ l f' f)
instance (GHC.Show.Show (Language.Oberon.Abstract.QualIdent l), GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Element l l f' f')), GHC.Show.Show (f (Language.Modula2.ISO.Abstract.Item l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Value l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Show.Show (Language.Modula2.ISO.AST.Expression λ l f' f)
instance (GHC.Classes.Eq (Language.Oberon.Abstract.QualIdent l), GHC.Classes.Eq (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Element l l f' f')), GHC.Classes.Eq (f (Language.Modula2.ISO.Abstract.Item l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Value l l f' f')), GHC.Classes.Eq (f (Language.Oberon.Abstract.Expression l l f' f'))) => GHC.Classes.Eq (Language.Modula2.ISO.AST.Expression λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Item λ l f' f)
instance GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f')) => GHC.Show.Show (Language.Modula2.ISO.AST.Item λ l f' f)
instance GHC.Classes.Eq (f (Language.Oberon.Abstract.Expression l l f' f')) => GHC.Classes.Eq (Language.Modula2.ISO.AST.Item λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.CaseLabels l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.FieldList l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Variant λ l f' f)
instance (GHC.Show.Show (f (Language.Oberon.Abstract.CaseLabels l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.FieldList l l f' f'))) => GHC.Show.Show (Language.Modula2.ISO.AST.Variant λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.Declaration l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Block λ l f' f)
instance (GHC.Show.Show (f (Language.Oberon.Abstract.Declaration l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => GHC.Show.Show (Language.Modula2.ISO.AST.Block λ l f' f)
instance (Data.Typeable.Internal.Typeable λ, Data.Typeable.Internal.Typeable l, Data.Typeable.Internal.Typeable f, Data.Typeable.Internal.Typeable f', Data.Data.Data (f (Language.Oberon.Abstract.Designator l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Expression l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.Case l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.ConditionalBranch l l f' f')), Data.Data.Data (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => Data.Data.Data (Language.Modula2.ISO.AST.Statement λ l f' f)
instance (GHC.Show.Show (f (Language.Oberon.Abstract.Designator l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Expression l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.Case l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.ConditionalBranch l l f' f')), GHC.Show.Show (f (Language.Oberon.Abstract.StatementSequence l l f' f'))) => GHC.Show.Show (Language.Modula2.ISO.AST.Statement λ l f' f)
instance Language.Oberon.Abstract.Wirthy Language.Modula2.ISO.AST.Language
instance Language.Oberon.Abstract.CoWirthy Language.Modula2.ISO.AST.Language
instance Language.Modula2.Abstract.Modula2 Language.Modula2.ISO.AST.Language
instance Language.Modula2.ISO.Abstract.Modula2 Language.Modula2.ISO.AST.Language
instance Language.Oberon.Abstract.Nameable Language.Modula2.ISO.AST.Language
-- | The main export of this module is the function foldConstants
-- that folds the constants in an ISO Modula-2 AST using an attribute
-- grammar. Other exports are helper functions and attribute types that
-- can be reused for other languages or attribute grammars.
module Language.Modula2.ISO.ConstantFolder
-- | Fold the constants in the given collection of Modula-2 modules (a
-- Map of modules keyed by module name). It uses the constant
-- declarations from the modules as well as the given Environment
-- of predefined constants and functions.
--
-- Note that the ISO Modula-2 Language satisfies all constraints
-- in the function's type signature.
foldConstants :: forall l. (Modula2 l, Nameable l, Ord (QualIdent l), Show (QualIdent l), Atts (Inherited (Auto ConstantFold)) (Block l l Sem Sem) ~ InhCF l, Atts (Inherited (Auto ConstantFold)) (Definition l l Sem Sem) ~ InhCF l, Atts (Inherited (Auto ConstantFold)) (Expression l l Sem Sem) ~ InhCF l, Atts (Synthesized (Auto ConstantFold)) (Block l l Sem Sem) ~ SynCFMod' l (Block l l), Atts (Synthesized (Auto ConstantFold)) (Block l l Placed Placed) ~ SynCFMod' l (Block l l), Atts (Synthesized (Auto ConstantFold)) (Definition l l Sem Sem) ~ SynCFMod' l (Definition l l), Atts (Synthesized (Auto ConstantFold)) (Definition l l Placed Placed) ~ SynCFMod' l (Definition l l), Atts (Synthesized (Auto ConstantFold)) (Expression l l Sem Sem) ~ SynCFExp l l, Atts (Synthesized (Auto ConstantFold)) (Expression l l Placed Placed) ~ SynCFExp l l, Functor (Auto ConstantFold) (Block l l), Functor (Auto ConstantFold) (Definition l l), Functor (Auto ConstantFold) (Expression l l)) => Environment l -> Module l l Placed Placed -> Module l l Placed Placed
data InhCF l
data SynCF a
SynCF :: Mapped Placed a -> SynCF a
[$sel:folded:SynCF] :: SynCF a -> Mapped Placed a
data SynCFDesignator l
SynCFDesignator :: Mapped Placed (Designator l l Placed Placed) -> Maybe (Placed (Value l l Placed Placed)) -> SynCFDesignator l
[$sel:folded:SynCFDesignator] :: SynCFDesignator l -> Mapped Placed (Designator l l Placed Placed)
[$sel:designatorValue:SynCFDesignator] :: SynCFDesignator l -> Maybe (Placed (Value l l Placed Placed))
data SynCFExp λ l
SynCFExp :: Mapped Placed (Expression λ l Placed Placed) -> Maybe (Placed (Value l l Placed Placed)) -> SynCFExp λ l
[$sel:folded:SynCFExp] :: SynCFExp λ l -> Mapped Placed (Expression λ l Placed Placed)
[$sel:foldedValue:SynCFExp] :: SynCFExp λ l -> Maybe (Placed (Value l l Placed Placed))
type SynCFMod' l (node :: Type -> Type -> Type -> Type -> Type) = SynCFMod l node Placed Placed
type Environment l = Map QualIdent l Maybe Value l l Placed Placed
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l)
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem)
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.AddressedIdent l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.AddressedIdent l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Type l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Type l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Statement l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Statement l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Item l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Item l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Variant l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Variant l l (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.AG.Semantics (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.AddressedIdent l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.AddressedIdent l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.AddressedIdent l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Type l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Type l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Type l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Statement l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Statement l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Statement l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Item l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Item l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Item l l)
instance (Transformation.Deep.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Variant l l), Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Variant l l (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Transformation.Codomain (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)))) => Transformation.Full.Functor (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Variant l l)
instance (Transformation.Transformation t, GHC.Base.Functor (Transformation.Domain t), Transformation.Deep.Functor t (Language.Modula2.AST.Module l l), Transformation.At t (Language.Modula2.AST.Module l l (Transformation.Codomain t) (Transformation.Codomain t))) => Transformation.Deep.Functor t (Language.Modula2.ISO.ConstantFolder.Modules l)
instance Rank2.Functor (Language.Modula2.ISO.ConstantFolder.Modules l f')
instance Rank2.Apply (Language.Modula2.ISO.ConstantFolder.Modules l f')
instance GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l) => Transformation.AG.Attribution (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.ConstantFolder.Modules l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed
instance GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l) => Transformation.At (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.ConstantFolder.Modules l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem)
instance (Language.Oberon.Abstract.Nameable l, GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Declaration l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Declaration l l), Transformation.AG.Atts (Transformation.AG.Inherited (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.StatementSequence l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.InhCF l, Transformation.AG.Atts (Transformation.AG.Inherited (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Declaration l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.InhCF l) => Transformation.AG.Generics.Bequether (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed
instance (Language.Oberon.Abstract.Nameable l, k GHC.Types.~ Language.Oberon.Abstract.QualIdent l, v GHC.Types.~ Language.Oberon.Abstract.Value l l Language.Oberon.ConstantFolder.Placed Language.Oberon.ConstantFolder.Placed, GHC.Classes.Ord k, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Declaration l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Declaration l l)) => Transformation.AG.Generics.SynthesizedField "moduleEnv" (Data.Map.Internal.Map k (GHC.Maybe.Maybe v)) (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Block l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed
instance (Language.Modula2.ISO.Abstract.Modula2 l, Language.Oberon.Abstract.Nameable l, k GHC.Types.~ Language.Oberon.Abstract.QualIdent l, GHC.Classes.Ord k, v GHC.Types.~ Language.Oberon.Abstract.Value l l Language.Oberon.ConstantFolder.Placed Language.Oberon.ConstantFolder.Placed, Language.Modula2.Abstract.Export l GHC.Types.~ Language.Modula2.AST.Export l, Language.Oberon.Abstract.Value l GHC.Types.~ Language.Oberon.AST.Value l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Declaration l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Declaration l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Type l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.Type l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.ProcedureHeading l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.ProcedureHeading l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.FormalParameters l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.FormalParameters l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Block l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFMod' l (Language.Oberon.Abstract.Block l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.ConstExpression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp l l) => Transformation.AG.Generics.SynthesizedField "moduleEnv" (Data.Map.Internal.Map k (GHC.Maybe.Maybe v)) (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Declaration full l l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed
instance (Language.Oberon.Abstract.Nameable l, GHC.Classes.Ord (Language.Oberon.Abstract.QualIdent l), Language.Oberon.Abstract.QualIdent l GHC.Types.~ Language.Modula2.AST.QualIdent l, Language.Oberon.Abstract.Value l GHC.Types.~ Language.Oberon.AST.Value l, λ GHC.Types.~ Language.Modula2.ISO.AST.Language, GHC.Types.Coercible (Language.Oberon.Abstract.QualIdent Language.Modula2.AST.Language) (Language.Modula2.AST.QualIdent l), GHC.Types.Coercible (Language.Oberon.Abstract.Value Language.Modula2.AST.Language Language.Modula2.AST.Language) (Language.Oberon.AST.Value l l), Language.Oberon.ConstantFolder.InhCF l GHC.Types.~ Language.Oberon.ConstantFolder.InhCF λ, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.AST.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Expression l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFExp l l, Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Element l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Oberon.Abstract.Element l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Modula2.ISO.Abstract.Item l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCF' (Language.Modula2.ISO.Abstract.Item l l), Transformation.AG.Atts (Transformation.AG.Synthesized (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold)) (Language.Oberon.Abstract.Designator l l Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Sem) GHC.Types.~ Language.Oberon.ConstantFolder.SynCFDesignator l) => Transformation.AG.Generics.Synthesizer (Transformation.AG.Generics.Auto Language.Oberon.ConstantFolder.ConstantFold) (Language.Modula2.ISO.AST.Expression λ l) Language.Oberon.ConstantFolder.Sem Language.Oberon.ConstantFolder.Placed
-- | Modula-2 grammar adapted from the ISO specification of the language.
module Language.Modula2.ISO.Grammar
type Parser = Parser
-- | The names and types of all the new grammar productions in the ISO
-- specification
data ISOMixin l f p
ISOMixin :: p (f (ConstExpression l l f f)) -> p (Type l l f f) -> p (Block l l f f) -> p (NonEmpty (f (AddressedIdent l l f f))) -> p (Statement l l f f) -> p (Expression l l f f) -> p (Expression l l f f) -> p [f (Item l l f f)] -> p [f (Expression l l f f)] -> p [f (Element l l f f)] -> p (Item l l f f) -> p (f (Expression l l f f)) -> ISOMixin l f p
[machineAddress] :: ISOMixin l f p -> p (f (ConstExpression l l f f))
[packedSetType] :: ISOMixin l f p -> p (Type l l f f)
[moduleBody] :: ISOMixin l f p -> p (Block l l f f)
[variableIdentifierList] :: ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
[retryStatement] :: ISOMixin l f p -> p (Statement l l f f)
[arrayConstructor] :: ISOMixin l f p -> p (Expression l l f f)
[recordConstructor] :: ISOMixin l f p -> p (Expression l l f f)
[arrayConstructedValue] :: ISOMixin l f p -> p [f (Item l l f f)]
[recordConstructedValue] :: ISOMixin l f p -> p [f (Expression l l f f)]
[setConstructedValue] :: ISOMixin l f p -> p [f (Element l l f f)]
[arrayPart] :: ISOMixin l f p -> p (Item l l f f)
[structureComponent] :: ISOMixin l f p -> p (f (Expression l l f f))
-- | The new grammar productions in the ISO specification
isoMixin :: (Modula2 l, LexicalParsing (Parser g Text)) => Modula2Grammar l NodeWrap (Parser g Text) -> ISOMixin l NodeWrap (Parser g Text) -> ISOMixin l NodeWrap (Parser g Text)
type ISOGrammar l = Product (ISOMixin l NodeWrap) (Modula2Grammar l NodeWrap)
modula2ISOgrammar :: Grammar (ISOGrammar Language) Parser Text
-- | All the productions of the ISO Modula-2 grammar
isoGrammar :: forall l g. (Modula2 l, LexicalParsing (Parser g Text)) => GrammarBuilder (ISOGrammar l) g Parser Text
reservedWords :: [Text]
instance Rank2.Functor (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.Apply (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.Applicative (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.Foldable (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.Traversable (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.Distributive (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Rank2.DistributiveTraversable (Language.Modula2.ISO.Grammar.ISOMixin l f)
instance Text.Parser.Token.TokenParsing (Language.Modula2.ISO.Grammar.Parser (Language.Modula2.ISO.Grammar.ISOGrammar l) Data.Text.Internal.Text)
instance Text.Grampa.Class.LexicalParsing (Language.Modula2.ISO.Grammar.Parser (Language.Modula2.ISO.Grammar.ISOGrammar l) Data.Text.Internal.Text)
-- | This module exports the instances of the Pretty type class
-- necessary for printing of a Modula-2 abstract syntax tree.
module Language.Modula2.Pretty
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Priority l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Export l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Import l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Definition l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Block l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Module λ l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Import l)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Export l)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.IdentDef l)
instance (Language.Oberon.Abstract.Nameable l, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Export l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Import l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ProcedureHeading l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Block l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Declaration 'GHC.Types.False Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Language.Oberon.Abstract.Nameable l, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Export l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Import l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ProcedureHeading l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Block l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Declaration 'GHC.Types.True Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Element l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Expression Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Element l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Modula2.AST.Expression Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity))
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.AST.Value Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Designator Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConstExpression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.BaseType l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Type Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.QualIdent l)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Variant l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.FieldList Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.CaseLabels l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Variant λ l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.ProcedureHeading l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConstExpression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Case l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConditionalBranch l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.WithAlternative l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.StatementSequence l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Statement Language.Modula2.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Language.Oberon.Abstract.Oberon Language.Modula2.AST.Language
-- | This module exports the instances of the Pretty type class
-- necessary for printing of an ISO Modula-2 abstract syntax tree.
module Language.Modula2.ISO.Pretty
instance (Language.Oberon.Abstract.Nameable l, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Export l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Import l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ProcedureHeading l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Block l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Declaration 'GHC.Types.False Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Language.Oberon.Abstract.Nameable l, Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Export l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Import l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.Abstract.AddressedIdent l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ProcedureHeading l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Block l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Declaration 'GHC.Types.True Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConstExpression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.AddressedIdent l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FormalParameters l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConstExpression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.BaseType l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Type Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.IdentDef l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Type l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.Abstract.Variant l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.FieldList Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.CaseLabels l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.FieldList l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Variant λ l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Declaration l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.StatementSequence l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Block λ l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConstExpression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Case l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.ConditionalBranch l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.WithAlternative l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.StatementSequence l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Statement Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Element l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.Abstract.Item l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Expression Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.AST.Value Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.AST.Item Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Value l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Element l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.ISO.Abstract.Item l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Pretty.Precedence (Language.Modula2.ISO.AST.Expression Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity))
instance (Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.QualIdent l), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Designator l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity), Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Oberon.Abstract.Expression l l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)) => Data.Text.Prettyprint.Doc.Internal.Pretty (Language.Modula2.AST.Designator Language.Modula2.ISO.AST.Language l Data.Functor.Identity.Identity Data.Functor.Identity.Identity)
instance Language.Oberon.Abstract.Oberon Language.Modula2.ISO.AST.Language
-- | The programming language Modula-2
module Language.Modula2
-- | Parse the given text of a single module.
parseModule :: Version l -> Text -> ParseResults Text [Placed (Module l l Placed Placed)]
-- | Parse the given text of a single module and fold constants inside it.
parseAndSimplifyModule :: (Modula2 l, Nameable l, Functor (Auto ConstantFold) (Expression l l)) => Version l -> Text -> ParseResults Text [Placed (Module l l Placed Placed)]
-- | Replace the stored positions of the given node with offset from the
-- start of the given source text
resolvePosition :: Text -> NodeWrap a -> Placed a
-- | Replace the stored positions in the entire tree with offsets from the
-- start of the given source text
resolvePositions :: (p ~ NodeWrap, q ~ Placed, Functor (Map p q) g) => Text -> p (g p p) -> q (g q q)
-- | Every node in a parsed and resolved AST is wrapped with this functor
type Placed = (,) (Int, ParsedLexemes, Int)
data Version l
-- | the version specified by Niklaus Wirth's ''Report on the Programming
-- Language Modula-2''
[Report] :: Version Language
-- | the version specified by the ISO standard
[ISO] :: Version Language
-- | The language version in existential container
data SomeVersion
[SomeVersion] :: Version l -> SomeVersion
instance GHC.Show.Show (Language.Modula2.Version l)
instance GHC.Show.Show Language.Modula2.SomeVersion