-- 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.3 -- | 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: -- -- 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: -- -- class Wirthy l => Modula2 l where { type Export l = x | x -> l; type Definition l = (d :: * -> (* -> *) -> (* -> *) -> *) | d -> l; type 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 LiftedRep) 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 LiftedRep) 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 = (,) (Down Int, ParsedLexemes, Down Int) -- | 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, Apply g, LexicalParsing (Parser g Text)) => GrammarBuilder (Modula2Grammar l NodeWrap) g Parser Text comment :: Apply g => Parser g Text Text whiteSpace :: Apply g => LexicalParsing (Parser g Text) => Parser g Text () wrap :: Apply g => 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 Rank2.Logistic (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 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.Oberon.Abstract.Expression λ GHC.Types.~ Language.Modula2.AST.Expression Language.Modula2.AST.Language, Language.Oberon.Abstract.QualIdent λ GHC.Types.~ Language.Modula2.AST.QualIdent Language.Modula2.AST.Language, Language.Oberon.Abstract.QualIdent l GHC.Types.~ Language.Modula2.AST.QualIdent l, Language.Oberon.Abstract.Element l l GHC.Types.~ Language.Oberon.AST.Element l l, Language.Oberon.Abstract.Value l l GHC.Types.~ Language.Oberon.AST.Value l l, λ GHC.Types.~ Language.Modula2.AST.Language, 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.AST.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') -- | 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 AddressedIdent l = (d :: * -> (* -> *) -> (* -> *) -> *) | d -> l; type 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 ConstantFold type Environment l = Map QualIdent l Maybe Value l l Placed 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.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 (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.Expression λ GHC.Types.~ Language.Modula2.ISO.AST.Expression Language.Modula2.ISO.AST.Language, Language.Oberon.Abstract.QualIdent λ GHC.Types.~ Language.Modula2.AST.QualIdent Language.Modula2.ISO.AST.Language, 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, Apply g, 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, Apply g, LexicalParsing (Parser g Text)) => GrammarBuilder (ISOGrammar l) g Parser Text reservedWords :: [Text] 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) 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 Rank2.Logistic (Language.Modula2.ISO.Grammar.ISOMixin l f) -- | 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