{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances,
OverloadedStrings, StandaloneDeriving, TemplateHaskell, TypeFamilies, TypeOperators #-}
{-# OPTIONS_GHC -Wno-simplifiable-class-constraints #-}
module Language.Oberon.AST (module Language.Oberon.AST, RelOp(..)) where
import Control.Applicative (ZipList(ZipList, getZipList))
import Control.Monad (forM, mapM)
import Data.Data (Data, Typeable)
import qualified Data.Kind as K (Type)
import Data.List.NonEmpty (NonEmpty((:|)))
import Data.Text (Text)
import qualified Transformation
import qualified Transformation.Shallow as Shallow
import qualified Transformation.Shallow.TH
import qualified Transformation.Deep.TH
import qualified Transformation.AG as AG
import qualified Rank2.TH
import qualified Language.Oberon.Abstract as Abstract
import Language.Oberon.Abstract (RelOp(..))
data Language = Language deriving (Typeable Language
Typeable Language =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language)
-> (Language -> Constr)
-> (Language -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language))
-> ((forall b. Data b => b -> b) -> Language -> Language)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r)
-> (forall u. (forall d. Data d => d -> u) -> Language -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Language -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language)
-> Data Language
Language -> Constr
Language -> DataType
(forall b. Data b => b -> b) -> Language -> Language
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
forall u. (forall d. Data d => d -> u) -> Language -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Language -> c Language
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Language
$ctoConstr :: Language -> Constr
toConstr :: Language -> Constr
$cdataTypeOf :: Language -> DataType
dataTypeOf :: Language -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Language)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Language)
$cgmapT :: (forall b. Data b => b -> b) -> Language -> Language
gmapT :: (forall b. Data b => b -> b) -> Language -> Language
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Language -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Language -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Language -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Language -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Language -> m Language
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Language -> m Language
Data, Typeable)
instance Abstract.Wirthy Language where
type Module Language = Module Language
type Declaration Language = Declaration Language
type Type Language = Type Language
type Statement Language = Statement Language
type Expression Language = Expression Language
type Designator Language = Designator Language
type Value Language = Value Language
type Import Language = Import Language
type FieldList Language = FieldList Language
type ProcedureHeading Language = ProcedureHeading Language
type FormalParameters Language = FormalParameters Language
type FPSection Language = FPSection Language
type Block Language = Block Language
type StatementSequence Language = StatementSequence Language
type Case Language = Case Language
type CaseLabels Language = CaseLabels Language
type ConditionalBranch Language = ConditionalBranch Language
type Element Language = Element Language
type IdentDef Language = IdentDef Language
type QualIdent Language = QualIdent Language
constantDeclaration :: forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> f (ConstExpression l' l' f' f') -> Declaration Language l' f' f
constantDeclaration = IdentDef l'
-> f (Expression l' l' f' f') -> Declaration Language l' f' f
IdentDef l'
-> f (Expression l' l' f' f') -> Declaration Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
IdentDef l -> f (ConstExpression l l f' f') -> Declaration λ l f' f
ConstantDeclaration
typeDeclaration :: forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l' -> f (Type l' l' f' f') -> Declaration Language l' f' f
typeDeclaration = IdentDef l' -> f (Type l' l' f' f') -> Declaration Language l' f' f
IdentDef l' -> f (Type l' l' f' f') -> Declaration Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
IdentDef l -> f (Type l l f' f') -> Declaration λ l f' f
TypeDeclaration
variableDeclaration :: forall l' (f :: * -> *) (f' :: * -> *).
IdentList l'
-> f (Type l' l' f' f') -> Declaration Language l' f' f
variableDeclaration = NonEmpty (IdentDef l')
-> f (Type l' l' f' f') -> Declaration Language l' f' f
NonEmpty (IdentDef l')
-> f (Type l' l' f' f') -> Declaration Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
IdentList l -> f (Type l l f' f') -> Declaration λ l f' f
VariableDeclaration
procedureDeclaration :: forall (f :: * -> *) l' (f' :: * -> *).
f (ProcedureHeading l' l' f' f')
-> f (Block l' l' f' f') -> Declaration Language l' f' f
procedureDeclaration = f (ProcedureHeading l' l' f' f')
-> f (Block l' l' f' f') -> Declaration Language l' f' f
f (ProcedureHeading l' l' f' f')
-> f (Block l' l' f' f') -> Declaration Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (ProcedureHeading l l f' f')
-> f (Block l l f' f') -> Declaration λ l f' f
ProcedureDeclaration
formalParameters :: forall (f :: * -> *) l' (f' :: * -> *).
[f (FPSection l' l' f' f')]
-> Maybe (ReturnType l') -> FormalParameters Language l' f' f
formalParameters = ZipList (f (FPSection l' l' f' f'))
-> Maybe (QualIdent l') -> FormalParameters Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
ZipList (f (FPSection l l f' f'))
-> Maybe (ReturnType l) -> FormalParameters λ l f' f
FormalParameters (ZipList (f (FPSection l' l' f' f'))
-> Maybe (QualIdent l') -> FormalParameters Language l' f' f)
-> ([f (FPSection l' l' f' f')]
-> ZipList (f (FPSection l' l' f' f')))
-> [f (FPSection l' l' f' f')]
-> Maybe (QualIdent l')
-> FormalParameters Language l' f' f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [f (FPSection l' l' f' f')] -> ZipList (f (FPSection l' l' f' f'))
forall a. [a] -> ZipList a
ZipList
fpSection :: forall (f :: * -> *) l' (f' :: * -> *).
Bool
-> [Ident] -> f (Type l' l' f' f') -> FPSection Language l' f' f
fpSection = Bool
-> [Ident] -> f (Type l' l' f' f') -> FPSection Language l' f' f
Bool
-> [Ident] -> f (Type l' l' f' f') -> FPSection Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Bool -> [Ident] -> f (Type l l f' f') -> FPSection λ l f' f
FPSection
block :: forall (f :: * -> *) l' (f' :: * -> *).
[f (Declaration l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block Language l' f' f
block = ZipList (f (Declaration l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
ZipList (f (Declaration l l f' f'))
-> Maybe (f (StatementSequence l l f' f')) -> Block λ l f' f
Block (ZipList (f (Declaration l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block Language l' f' f)
-> ([f (Declaration l' l' f' f')]
-> ZipList (f (Declaration l' l' f' f')))
-> [f (Declaration l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block Language l' f' f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [f (Declaration l' l' f' f')]
-> ZipList (f (Declaration l' l' f' f'))
forall a. [a] -> ZipList a
ZipList
fieldList :: forall l' (f :: * -> *) (f' :: * -> *).
NonEmpty (IdentDef l')
-> f (Type l' l' f' f') -> FieldList Language l' f' f
fieldList = NonEmpty (IdentDef l')
-> f (Type l' l' f' f') -> FieldList Language l' f' f
NonEmpty (IdentDef l')
-> f (Type l' l' f' f') -> FieldList Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
IdentList l -> f (Type l l f' f') -> FieldList λ l f' f
FieldList
pointerType :: forall (f :: * -> *) l' (f' :: * -> *).
f (Type l' l' f' f') -> Type Language l' f' f
pointerType = f (Type l' l' f' f') -> Type Language l' f' f
f (Type l' l' f' f') -> Type Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Type l l f' f') -> Type λ l f' f
PointerType
procedureType :: forall (f :: * -> *) l' (f' :: * -> *).
Maybe (f (FormalParameters l' l' f' f')) -> Type Language l' f' f
procedureType = Maybe (f (FormalParameters l' l' f' f')) -> Type Language l' f' f
Maybe (f (FormalParameters l' l' f' f')) -> Type Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Maybe (f (FormalParameters l l f' f')) -> Type λ l f' f
ProcedureType
typeReference :: forall l' (f' :: * -> *) (f :: * -> *).
QualIdent l' -> Type Language l' f' f
typeReference = QualIdent l' -> Type Language l' f' f
QualIdent l' -> Type Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
QualIdent l -> Type λ l f' f
TypeReference
assignment :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
assignment = f (Designator l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
f (Designator l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f')
-> f (Expression l l f' f') -> Statement λ l f' f
Assignment
caseStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> [f (Case l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
caseStatement f (Expression l' l' f' f')
scrutinee [f (Case l' l' f' f')]
cases = f (Expression l' l' f' f')
-> ZipList (f (Case l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> ZipList (f (Case l l f' f'))
-> Maybe (f (StatementSequence l l f' f'))
-> Statement λ l f' f
CaseStatement f (Expression l' l' f' f')
scrutinee ([f (Case l' l' f' f')] -> ZipList (f (Case l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (Case l' l' f' f')]
cases)
emptyStatement :: forall l' (f' :: * -> *) (f :: * -> *). Statement Language l' f' f
emptyStatement = Statement Language l' f' f
Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Statement λ l f' f
EmptyStatement
exitStatement :: forall l' (f' :: * -> *) (f :: * -> *). Statement Language l' f' f
exitStatement = Statement Language l' f' f
Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Statement λ l f' f
Exit
ifStatement :: forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (ConditionalBranch l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
ifStatement (f (ConditionalBranch l' l' f' f')
branch :| [f (ConditionalBranch l' l' f' f')]
branches) = f (ConditionalBranch l' l' f' f')
-> ZipList (f (ConditionalBranch l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (ConditionalBranch l l f' f')
-> ZipList (f (ConditionalBranch l l f' f'))
-> Maybe (f (StatementSequence l l f' f'))
-> Statement λ l f' f
If f (ConditionalBranch l' l' f' f')
branch ([f (ConditionalBranch l' l' f' f')]
-> ZipList (f (ConditionalBranch l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (ConditionalBranch l' l' f' f')]
branches)
loopStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (StatementSequence l' l' f' f') -> Statement Language l' f' f
loopStatement = f (StatementSequence l' l' f' f') -> Statement Language l' f' f
f (StatementSequence l' l' f' f') -> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (StatementSequence l l f' f') -> Statement λ l f' f
Loop
procedureCall :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> Maybe [f (Expression l' l' f' f')] -> Statement Language l' f' f
procedureCall f (Designator l' l' f' f')
proc Maybe [f (Expression l' l' f' f')]
args = f (Designator l' l' f' f')
-> Maybe (ZipList (f (Expression l' l' f' f')))
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f')
-> Maybe (ZipList (f (Expression l l f' f'))) -> Statement λ l f' f
ProcedureCall f (Designator l' l' f' f')
proc ([f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f'))
forall a. [a] -> ZipList a
ZipList ([f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f')))
-> Maybe [f (Expression l' l' f' f')]
-> Maybe (ZipList (f (Expression l' l' f' f')))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [f (Expression l' l' f' f')]
args)
repeatStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (StatementSequence l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
repeatStatement = f (StatementSequence l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
f (StatementSequence l' l' f' f')
-> f (Expression l' l' f' f') -> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (StatementSequence l l f' f')
-> f (Expression l l f' f') -> Statement λ l f' f
Repeat
returnStatement :: forall (f :: * -> *) l' (f' :: * -> *).
Maybe (f (Expression l' l' f' f')) -> Statement Language l' f' f
returnStatement = Maybe (f (Expression l' l' f' f')) -> Statement Language l' f' f
Maybe (f (Expression l' l' f' f')) -> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Maybe (f (Expression l l f' f')) -> Statement λ l f' f
Return
whileStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f') -> Statement Language l' f' f
whileStatement = f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f') -> Statement Language l' f' f
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f') -> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (StatementSequence l l f' f') -> Statement λ l f' f
While
conditionalBranch :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> ConditionalBranch Language l' f' f
conditionalBranch = f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> ConditionalBranch Language l' f' f
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f')
-> ConditionalBranch Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (StatementSequence l l f' f') -> ConditionalBranch λ l f' f
ConditionalBranch
caseAlternative :: forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (CaseLabels l' l' f' f'))
-> f (StatementSequence l' l' f' f') -> Case Language l' f' f
caseAlternative (f (CaseLabels l' l' f' f')
c :| [f (CaseLabels l' l' f' f')]
cs) = f (CaseLabels l' l' f' f')
-> ZipList (f (CaseLabels l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Case Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (CaseLabels l l f' f')
-> ZipList (f (CaseLabels l l f' f'))
-> f (StatementSequence l l f' f')
-> Case λ l f' f
Case f (CaseLabels l' l' f' f')
c ([f (CaseLabels l' l' f' f')]
-> ZipList (f (CaseLabels l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (CaseLabels l' l' f' f')]
cs)
labelRange :: forall (f :: * -> *) l' (f' :: * -> *).
f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f') -> CaseLabels Language l' f' f
labelRange = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> CaseLabels Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> CaseLabels Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (ConstExpression l l f' f')
-> f (ConstExpression l l f' f') -> CaseLabels λ l f' f
LabelRange
singleLabel :: forall (f :: * -> *) l' (f' :: * -> *).
f (ConstExpression l' l' f' f') -> CaseLabels Language l' f' f
singleLabel = f (Expression l' l' f' f') -> CaseLabels Language l' f' f
f (Expression l' l' f' f') -> CaseLabels Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (ConstExpression l l f' f') -> CaseLabels λ l f' f
SingleLabel
statementSequence :: forall (f :: * -> *) l' (f' :: * -> *).
[f (Statement l' l' f' f')] -> StatementSequence Language l' f' f
statementSequence = ZipList (f (Statement l' l' f' f'))
-> StatementSequence Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
ZipList (f (Statement l l f' f')) -> StatementSequence λ l f' f
StatementSequence (ZipList (f (Statement l' l' f' f'))
-> StatementSequence Language l' f' f)
-> ([f (Statement l' l' f' f')]
-> ZipList (f (Statement l' l' f' f')))
-> [f (Statement l' l' f' f')]
-> StatementSequence Language l' f' f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [f (Statement l' l' f' f')] -> ZipList (f (Statement l' l' f' f'))
forall a. [a] -> ZipList a
ZipList
add :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
add = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Add
and :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
and = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
And
divide :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
divide = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Divide
functionCall :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> [f (Expression l' l' f' f')] -> Expression Language l' f' f
functionCall f (Designator l' l' f' f')
fun [f (Expression l' l' f' f')]
args = f (Designator l' l' f' f')
-> ZipList (f (Expression l' l' f' f'))
-> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f')
-> ZipList (f (Expression l l f' f')) -> Expression λ l f' f
FunctionCall f (Designator l' l' f' f')
fun ([f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (Expression l' l' f' f')]
args)
integerDivide :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
integerDivide = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
IntegerDivide
literal :: forall (f :: * -> *) l' (f' :: * -> *).
f (Value l' l' f' f') -> Expression Language l' f' f
literal = f (Value l' l' f' f') -> Expression Language l' f' f
f (Value l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Value l l f' f') -> Expression λ l f' f
Literal
modulo :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
modulo = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Modulo
multiply :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
multiply = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Multiply
negative :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression Language l' f' f
negative = f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f') -> Expression λ l f' f
Negative
not :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression Language l' f' f
not = f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f') -> Expression λ l f' f
Not
or :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
or = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Or
positive :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression Language l' f' f
positive = f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f') -> Expression λ l f' f
Positive
read :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Expression Language l' f' f
read = f (Designator l' l' f' f') -> Expression Language l' f' f
f (Designator l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f') -> Expression λ l f' f
Read
relation :: forall (f :: * -> *) l' (f' :: * -> *).
RelOp
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression Language l' f' f
relation = RelOp
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression Language l' f' f
RelOp
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
RelOp
-> f (Expression l l f' f')
-> f (Expression l l f' f')
-> Expression λ l f' f
Relation
subtract :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
subtract = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Expression λ l f' f
Subtract
element :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Element Language l' f' f
element = f (Expression l' l' f' f') -> Element Language l' f' f
f (Expression l' l' f' f') -> Element Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f') -> Element λ l f' f
Element
range :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Element Language l' f' f
range = f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Element Language l' f' f
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Element Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f')
-> f (Expression l l f' f') -> Element λ l f' f
Range
builtin :: forall l' (f' :: * -> *) (f :: * -> *).
Ident -> Value Language l' f' f
builtin = Ident -> Value Language l' f' f
Ident -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Ident -> Value λ l f' f
Builtin
charCode :: forall l' (f' :: * -> *) (f :: * -> *).
Int -> Value Language l' f' f
charCode = Int -> Value Language l' f' f
Int -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Int -> Value λ l f' f
CharCode
false :: forall l' (f' :: * -> *) (f :: * -> *). Value Language l' f' f
false = Bool -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Bool -> Value λ l f' f
Boolean Bool
False
integer :: forall l' (f' :: * -> *) (f :: * -> *).
Integer -> Value Language l' f' f
integer = Integer -> Value Language l' f' f
Integer -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Integer -> Value λ l f' f
Integer
nil :: forall l' (f' :: * -> *) (f :: * -> *). Value Language l' f' f
nil = Value Language l' f' f
Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Value λ l f' f
Nil
real :: forall l' (f' :: * -> *) (f :: * -> *).
Double -> Value Language l' f' f
real = Double -> Value Language l' f' f
Double -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Double -> Value λ l f' f
Real
string :: forall l' (f' :: * -> *) (f :: * -> *).
Ident -> Value Language l' f' f
string = Ident -> Value Language l' f' f
Ident -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Ident -> Value λ l f' f
String
true :: forall l' (f' :: * -> *) (f :: * -> *). Value Language l' f' f
true = Bool -> Value Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *). Bool -> Value λ l f' f
Boolean Bool
True
variable :: forall l' (f' :: * -> *) (f :: * -> *).
QualIdent l' -> Designator Language l' f' f
variable = QualIdent l' -> Designator Language l' f' f
QualIdent l' -> Designator Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
QualIdent l -> Designator λ l f' f
Variable
field :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Ident -> Designator Language l' f' f
field = f (Designator l' l' f' f') -> Ident -> Designator Language l' f' f
f (Designator l' l' f' f') -> Ident -> Designator Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f') -> Ident -> Designator λ l f' f
Field
index :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> NonEmpty (f (Expression l' l' f' f'))
-> Designator Language l' f' f
index f (Designator l' l' f' f')
array (f (Expression l' l' f' f')
i :| [f (Expression l' l' f' f')]
is) = f (Designator l' l' f' f')
-> f (Expression l' l' f' f')
-> ZipList (f (Expression l' l' f' f'))
-> Designator Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f')
-> f (Expression l l f' f')
-> ZipList (f (Expression l l f' f'))
-> Designator λ l f' f
Index f (Designator l' l' f' f')
array f (Expression l' l' f' f')
i ([f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (Expression l' l' f' f')]
is)
dereference :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Designator Language l' f' f
dereference = f (Designator l' l' f' f') -> Designator Language l' f' f
f (Designator l' l' f' f') -> Designator Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f') -> Designator λ l f' f
Dereference
identDef :: Ident -> IdentDef Language
identDef = (Ident -> AccessMode -> IdentDef Language)
-> AccessMode -> Ident -> IdentDef Language
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ident -> AccessMode -> IdentDef Language
forall l. Ident -> AccessMode -> IdentDef l
IdentDef AccessMode
PrivateOnly
nonQualIdent :: Ident -> QualIdent Language
nonQualIdent = Ident -> QualIdent Language
Ident -> QualIdent Language
forall l. Ident -> QualIdent l
NonQualIdent
instance Abstract.CoWirthy Language where
type TargetClass Language = Abstract.Oberon2
coDeclaration :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Declaration Language l'' f' f -> Declaration l' l'' f' f
coDeclaration (ConstantDeclaration IdentDef l''
name f (ConstExpression l'' l'' f' f')
value) = IdentDef l''
-> f (ConstExpression l'' l'' f' f') -> Declaration l' l'' f' f
forall l l' (f :: * -> *) (f' :: * -> *).
Wirthy l =>
IdentDef l'
-> f (ConstExpression l' l' f' f') -> Declaration l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> f (ConstExpression l' l' f' f') -> Declaration l' l' f' f
Abstract.constantDeclaration IdentDef l''
name f (ConstExpression l'' l'' f' f')
value
coDeclaration (TypeDeclaration IdentDef l''
name f (Type l'' l'' f' f')
ty) = IdentDef l'' -> f (Type l'' l'' f' f') -> Declaration l' l'' f' f
forall l l' (f :: * -> *) (f' :: * -> *).
Wirthy l =>
IdentDef l' -> f (Type l' l' f' f') -> Declaration l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l' -> f (Type l' l' f' f') -> Declaration l' l' f' f
Abstract.typeDeclaration IdentDef l''
name f (Type l'' l'' f' f')
ty
coDeclaration (VariableDeclaration IdentList l''
name f (Type l'' l'' f' f')
ty) = IdentList l'' -> f (Type l'' l'' f' f') -> Declaration l' l'' f' f
forall l l' (f :: * -> *) (f' :: * -> *).
Wirthy l =>
IdentList l' -> f (Type l' l' f' f') -> Declaration l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
IdentList l' -> f (Type l' l' f' f') -> Declaration l' l' f' f
Abstract.variableDeclaration IdentList l''
name f (Type l'' l'' f' f')
ty
coDeclaration (ProcedureDeclaration f (ProcedureHeading l'' l'' f' f')
heading f (Block l'' l'' f' f')
body) = f (ProcedureHeading l'' l'' f' f')
-> f (Block l'' l'' f' f') -> Declaration l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (ProcedureHeading l' l' f' f')
-> f (Block l' l' f' f') -> Declaration l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (ProcedureHeading l' l' f' f')
-> f (Block l' l' f' f') -> Declaration l' l' f' f
Abstract.procedureDeclaration f (ProcedureHeading l'' l'' f' f')
heading f (Block l'' l'' f' f')
body
coDeclaration (ForwardDeclaration IdentDef l''
name Maybe (f (FormalParameters l'' l'' f' f'))
params) = IdentDef l''
-> Maybe (f (FormalParameters l'' l'' f' f'))
-> Declaration l' l'' f' f
forall l l' (f :: * -> *) (f' :: * -> *).
Oberon l =>
IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> Declaration l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> Declaration l' l' f' f
Abstract.forwardDeclaration IdentDef l''
name Maybe (f (FormalParameters l'' l'' f' f'))
params
coType :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Type Language l'' f' f -> Type l' l'' f' f
coType (TypeReference QualIdent l''
q) = QualIdent l'' -> Type l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
QualIdent l' -> Type l l' f' f
forall l' (f' :: * -> *) (f :: * -> *).
QualIdent l' -> Type l' l' f' f
Abstract.typeReference QualIdent l''
q
coType (ProcedureType Maybe (f (FormalParameters l'' l'' f' f'))
params) = Maybe (f (FormalParameters l'' l'' f' f')) -> Type l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
Maybe (f (FormalParameters l' l' f' f')) -> Type l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
Maybe (f (FormalParameters l' l' f' f')) -> Type l' l' f' f
Abstract.procedureType Maybe (f (FormalParameters l'' l'' f' f'))
params
coType (PointerType f (Type l'' l'' f' f')
destination) = f (Type l'' l'' f' f') -> Type l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Type l' l' f' f') -> Type l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Type l' l' f' f') -> Type l' l' f' f
Abstract.pointerType f (Type l'' l'' f' f')
destination
coType (ArrayType ZipList (f (ConstExpression l'' l'' f' f'))
dimensions f (Type l'' l'' f' f')
itemType) = [f (ConstExpression l'' l'' f' f')]
-> f (Type l'' l'' f' f') -> Type l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon l =>
[f (ConstExpression l' l' f' f')]
-> f (Type l' l' f' f') -> Type l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
[f (ConstExpression l' l' f' f')]
-> f (Type l' l' f' f') -> Type l' l' f' f
Abstract.arrayType (ZipList (f (ConstExpression l'' l'' f' f'))
-> [f (ConstExpression l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (ConstExpression l'' l'' f' f'))
dimensions) f (Type l'' l'' f' f')
itemType
coType (RecordType Maybe (QualIdent l'')
baseType ZipList (f (FieldList l'' l'' f' f'))
fields) = Maybe (QualIdent l'')
-> [f (FieldList l'' l'' f' f')] -> Type l' l'' f' f
forall l l' (f :: * -> *) (f' :: * -> *).
Oberon l =>
Maybe (BaseType l')
-> [f (FieldList l' l' f' f')] -> Type l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (BaseType l')
-> [f (FieldList l' l' f' f')] -> Type l' l' f' f
Abstract.recordType Maybe (QualIdent l'')
baseType (ZipList (f (FieldList l'' l'' f' f'))
-> [f (FieldList l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (FieldList l'' l'' f' f'))
fields)
coStatement :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Statement Language l'' f' f -> Statement l' l'' f' f
coStatement Statement Language l'' f' f
Statement Language l'' f' f
EmptyStatement = Statement l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Statement l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Statement l' l' f' f
Abstract.emptyStatement
coStatement (Assignment f (Designator l'' l'' f' f')
destination f (Expression l'' l'' f' f')
expression) = f (Designator l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f')
-> f (Expression l' l' f' f') -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> f (Expression l' l' f' f') -> Statement l' l' f' f
Abstract.assignment f (Designator l'' l'' f' f')
destination f (Expression l'' l'' f' f')
expression
coStatement (ProcedureCall f (Designator l'' l'' f' f')
procedure Maybe (ZipList (f (Expression l'' l'' f' f')))
parameters) = f (Designator l'' l'' f' f')
-> Maybe [f (Expression l'' l'' f' f')] -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f')
-> Maybe [f (Expression l' l' f' f')] -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> Maybe [f (Expression l' l' f' f')] -> Statement l' l' f' f
Abstract.procedureCall f (Designator l'' l'' f' f')
procedure (Maybe [f (Expression l'' l'' f' f')] -> Statement l' l'' f' f)
-> Maybe [f (Expression l'' l'' f' f')] -> Statement l' l'' f' f
forall a b. (a -> b) -> a -> b
$ ZipList (f (Expression l'' l'' f' f'))
-> [f (Expression l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList (ZipList (f (Expression l'' l'' f' f'))
-> [f (Expression l'' l'' f' f')])
-> Maybe (ZipList (f (Expression l'' l'' f' f')))
-> Maybe [f (Expression l'' l'' f' f')]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (ZipList (f (Expression l'' l'' f' f')))
parameters
coStatement (If f (ConditionalBranch l'' l'' f' f')
branch ZipList (f (ConditionalBranch l'' l'' f' f'))
elsifs Maybe (f (StatementSequence l'' l'' f' f'))
fallback) = NonEmpty (f (ConditionalBranch l'' l'' f' f'))
-> Maybe (f (StatementSequence l'' l'' f' f'))
-> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
NonEmpty (f (ConditionalBranch l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (ConditionalBranch l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement l' l' f' f
Abstract.ifStatement (f (ConditionalBranch l'' l'' f' f')
branch f (ConditionalBranch l'' l'' f' f')
-> [f (ConditionalBranch l'' l'' f' f')]
-> NonEmpty (f (ConditionalBranch l'' l'' f' f'))
forall a. a -> [a] -> NonEmpty a
:| ZipList (f (ConditionalBranch l'' l'' f' f'))
-> [f (ConditionalBranch l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (ConditionalBranch l'' l'' f' f'))
elsifs) Maybe (f (StatementSequence l'' l'' f' f'))
fallback
coStatement (CaseStatement f (Expression l'' l'' f' f')
scrutinee ZipList (f (Case l'' l'' f' f'))
cases Maybe (f (StatementSequence l'' l'' f' f'))
fallback) = f (Expression l'' l'' f' f')
-> [f (Case l'' l'' f' f')]
-> Maybe (f (StatementSequence l'' l'' f' f'))
-> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
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
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> [f (Case l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement l' l' f' f
Abstract.caseStatement f (Expression l'' l'' f' f')
scrutinee (ZipList (f (Case l'' l'' f' f')) -> [f (Case l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (Case l'' l'' f' f'))
cases) Maybe (f (StatementSequence l'' l'' f' f'))
fallback
coStatement (While f (Expression l'' l'' f' f')
condition f (StatementSequence l'' l'' f' f')
body) = f (Expression l'' l'' f' f')
-> f (StatementSequence l'' l'' f' f') -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f') -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (StatementSequence l' l' f' f') -> Statement l' l' f' f
Abstract.whileStatement f (Expression l'' l'' f' f')
condition f (StatementSequence l'' l'' f' f')
body
coStatement (Repeat f (StatementSequence l'' l'' f' f')
body f (Expression l'' l'' f' f')
condition) = f (StatementSequence l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (StatementSequence l' l' f' f')
-> f (Expression l' l' f' f') -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (StatementSequence l' l' f' f')
-> f (Expression l' l' f' f') -> Statement l' l' f' f
Abstract.repeatStatement f (StatementSequence l'' l'' f' f')
body f (Expression l'' l'' f' f')
condition
coStatement (For Ident
index f (Expression l'' l'' f' f')
from f (Expression l'' l'' f' f')
to Maybe (f (Expression l'' l'' f' f'))
by f (StatementSequence l'' l'' f' f')
body) = 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
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon2 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
forall (f :: * -> *) l' (f' :: * -> *).
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
Abstract.forStatement Ident
index f (Expression l'' l'' f' f')
from f (Expression l'' l'' f' f')
to Maybe (f (Expression l'' l'' f' f'))
by f (StatementSequence l'' l'' f' f')
body
coStatement (Loop f (StatementSequence l'' l'' f' f')
body) = f (StatementSequence l'' l'' f' f') -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (StatementSequence l' l' f' f') -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (StatementSequence l' l' f' f') -> Statement l' l' f' f
Abstract.loopStatement f (StatementSequence l'' l'' f' f')
body
coStatement (With f (WithAlternative l'' l'' f' f')
alternative ZipList (f (WithAlternative l'' l'' f' f'))
alternatives Maybe (f (StatementSequence l'' l'' f' f'))
fallback) =
NonEmpty (f (WithAlternative l'' l'' f' f'))
-> Maybe (f (StatementSequence l'' l'' f' f'))
-> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon2 l =>
NonEmpty (f (WithAlternative l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f')) -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (WithAlternative l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement l' l' f' f
Abstract.variantWithStatement (f (WithAlternative l'' l'' f' f')
alternative f (WithAlternative l'' l'' f' f')
-> [f (WithAlternative l'' l'' f' f')]
-> NonEmpty (f (WithAlternative l'' l'' f' f'))
forall a. a -> [a] -> NonEmpty a
:| ZipList (f (WithAlternative l'' l'' f' f'))
-> [f (WithAlternative l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (WithAlternative l'' l'' f' f'))
alternatives) Maybe (f (StatementSequence l'' l'' f' f'))
fallback
coStatement Statement Language l'' f' f
Statement Language l'' f' f
Exit = Statement l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Statement l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Statement l' l' f' f
Abstract.exitStatement
coStatement (Return Maybe (f (Expression l'' l'' f' f'))
result) = Maybe (f (Expression l'' l'' f' f')) -> Statement l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
Maybe (f (Expression l' l' f' f')) -> Statement l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
Maybe (f (Expression l' l' f' f')) -> Statement l' l' f' f
Abstract.returnStatement Maybe (f (Expression l'' l'' f' f'))
result
coExpression :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Expression Language l'' f' f -> Expression l' l'' f' f
coExpression (Relation RelOp
op f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = RelOp
-> f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f')
-> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
RelOp
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
RelOp
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Expression l' l' f' f
Abstract.relation RelOp
op f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (IsA f (Expression l'' l'' f' f')
scrutinee QualIdent l''
typeName) = f (Expression l'' l'' f' f')
-> QualIdent l'' -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon l =>
f (Expression l' l' f' f') -> QualIdent l' -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> QualIdent l' -> Expression l' l' f' f
Abstract.is f (Expression l'' l'' f' f')
scrutinee QualIdent l''
typeName
coExpression (Positive f (Expression l'' l'' f' f')
e) = f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.positive f (Expression l'' l'' f' f')
e
coExpression (Negative f (Expression l'' l'' f' f')
e) = f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.negative f (Expression l'' l'' f' f')
e
coExpression (Add f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.add f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Subtract f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.subtract f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Or f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.or f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Multiply f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.multiply f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Divide f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.divide f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (IntegerDivide f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.integerDivide f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Modulo f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.modulo f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (And f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right) = f (Expression l'' l'' f' f')
-> f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.and f (Expression l'' l'' f' f')
left f (Expression l'' l'' f' f')
right
coExpression (Set ZipList (f (Element l'' l'' f' f'))
elements) = [f (Element l'' l'' f' f')] -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon l =>
[f (Element l' l' f' f')] -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
[f (Element l' l' f' f')] -> Expression l' l' f' f
Abstract.set (ZipList (f (Element l'' l'' f' f')) -> [f (Element l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (Element l'' l'' f' f'))
elements)
coExpression (Read f (Designator l'' l'' f' f')
var) = f (Designator l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Expression l' l' f' f
Abstract.read f (Designator l'' l'' f' f')
var
coExpression (FunctionCall f (Designator l'' l'' f' f')
function ZipList (f (Expression l'' l'' f' f'))
parameters) = f (Designator l'' l'' f' f')
-> [f (Expression l'' l'' f' f')] -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> [f (Expression l' l' f' f')] -> Expression l' l' f' f
Abstract.functionCall f (Designator l'' l'' f' f')
function ([f (Expression l'' l'' f' f')] -> Expression l' l'' f' f)
-> [f (Expression l'' l'' f' f')] -> Expression l' l'' f' f
forall a b. (a -> b) -> a -> b
$ ZipList (f (Expression l'' l'' f' f'))
-> [f (Expression l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (Expression l'' l'' f' f'))
parameters
coExpression (Not f (Expression l'' l'' f' f')
e) = f (Expression l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Expression l' l' f' f
Abstract.not f (Expression l'' l'' f' f')
e
coExpression (Literal f (Value l'' l'' f' f')
value) = f (Value l'' l'' f' f') -> Expression l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Value l' l' f' f') -> Expression l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Value l' l' f' f') -> Expression l' l' f' f
Abstract.literal f (Value l'' l'' f' f')
value
coValue :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Value Language l'' f' f -> Value l' l'' f' f
coValue Value Language l'' f' f
Value Language l'' f' f
Nil = Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Value l' l' f' f
Abstract.nil
coValue (Boolean Bool
False) = Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Value l' l' f' f
Abstract.false
coValue (Boolean Bool
True) = Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Value l' l' f' f
Abstract.true
coValue (Builtin Ident
name) = Ident -> Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Ident -> Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Ident -> Value l' l' f' f
Abstract.builtin Ident
name
coValue (Integer Integer
n) = Integer -> Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Integer -> Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Integer -> Value l' l' f' f
Abstract.integer Integer
n
coValue (Real Double
r) = Double -> Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Double -> Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Double -> Value l' l' f' f
Abstract.real Double
r
coValue (String Ident
s) = Ident -> Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Ident -> Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Ident -> Value l' l' f' f
Abstract.string Ident
s
coValue (CharCode Int
c) = Int -> Value l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
Int -> Value l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Int -> Value l' l' f' f
Abstract.charCode Int
c
coDesignator :: forall l' l'' (f' :: * -> *) (f :: * -> *).
TargetClass Language l' =>
Designator Language l'' f' f -> Designator l' l'' f' f
coDesignator (Variable QualIdent l''
q) = QualIdent l'' -> Designator l' l'' f' f
forall l l' (f' :: * -> *) (f :: * -> *).
Wirthy l =>
QualIdent l' -> Designator l l' f' f
forall l' (f' :: * -> *) (f :: * -> *).
QualIdent l' -> Designator l' l' f' f
Abstract.variable QualIdent l''
q
coDesignator (Field f (Designator l'' l'' f' f')
record Ident
name) = f (Designator l'' l'' f' f') -> Ident -> Designator l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f') -> Ident -> Designator l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Ident -> Designator l' l' f' f
Abstract.field f (Designator l'' l'' f' f')
record Ident
name
coDesignator (Index f (Designator l'' l'' f' f')
array f (Expression l'' l'' f' f')
index ZipList (f (Expression l'' l'' f' f'))
indexes) = f (Designator l'' l'' f' f')
-> NonEmpty (f (Expression l'' l'' f' f'))
-> Designator l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f')
-> NonEmpty (f (Expression l' l' f' f')) -> Designator l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> NonEmpty (f (Expression l' l' f' f')) -> Designator l' l' f' f
Abstract.index f (Designator l'' l'' f' f')
array (f (Expression l'' l'' f' f')
index f (Expression l'' l'' f' f')
-> [f (Expression l'' l'' f' f')]
-> NonEmpty (f (Expression l'' l'' f' f'))
forall a. a -> [a] -> NonEmpty a
:| ZipList (f (Expression l'' l'' f' f'))
-> [f (Expression l'' l'' f' f')]
forall a. ZipList a -> [a]
getZipList ZipList (f (Expression l'' l'' f' f'))
indexes)
coDesignator (TypeGuard f (Designator l'' l'' f' f')
scrutinee QualIdent l''
typeName) = f (Designator l'' l'' f' f')
-> QualIdent l'' -> Designator l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Oberon l =>
f (Designator l' l' f' f') -> QualIdent l' -> Designator l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> QualIdent l' -> Designator l' l' f' f
Abstract.typeGuard f (Designator l'' l'' f' f')
scrutinee QualIdent l''
typeName
coDesignator (Dereference f (Designator l'' l'' f' f')
pointer) = f (Designator l'' l'' f' f') -> Designator l' l'' f' f
forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Designator l' l' f' f') -> Designator l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f') -> Designator l' l' f' f
Abstract.dereference f (Designator l'' l'' f' f')
pointer
instance Abstract.Nameable Language where
getProcedureName :: forall l' (f' :: * -> *) (f :: * -> *).
Nameable l' =>
ProcedureHeading Language l' f' f -> Ident
getProcedureName (ProcedureHeading Bool
_ IdentDef l'
iddef Maybe (f (FormalParameters l' l' f' f'))
_) = IdentDef l' -> Ident
forall l. Nameable l => IdentDef l -> Ident
Abstract.getIdentDefName IdentDef l'
iddef
getProcedureName (TypeBoundHeading Bool
_ Ident
_ Ident
_ Bool
_ IdentDef l'
iddef Maybe (f (FormalParameters l' l' f' f'))
_) = IdentDef l' -> Ident
forall l. Nameable l => IdentDef l -> Ident
Abstract.getIdentDefName IdentDef l'
iddef
getIdentDefName :: IdentDef Language -> Ident
getIdentDefName (IdentDef Ident
name AccessMode
_) = Ident
name
getNonQualIdentName :: QualIdent Language -> Maybe Ident
getNonQualIdentName (NonQualIdent Ident
name) = Ident -> Maybe Ident
forall a. a -> Maybe a
Just Ident
name
getNonQualIdentName QualIdent Language
_ = Maybe Ident
forall a. Maybe a
Nothing
isNamedVar :: Abstract.Nameable l => Ident -> Maybe (Designator Language l f f) -> Bool
isNamedVar :: forall l (f :: * -> *).
Nameable l =>
Ident -> Maybe (Designator Language l f f) -> Bool
isNamedVar Ident
name (Just (Variable QualIdent l
q)) | QualIdent l -> Maybe Ident
forall l. Nameable l => QualIdent l -> Maybe Ident
Abstract.getNonQualIdentName QualIdent l
q Maybe Ident -> Maybe Ident -> Bool
forall a. Eq a => a -> a -> Bool
== Ident -> Maybe Ident
forall a. a -> Maybe a
Just Ident
name = Bool
True
isNamedVar Ident
_ Maybe (Designator Language l f f)
_ = Bool
False
instance Abstract.Oberon Language where
type WithAlternative Language = WithAlternative Language
moduleUnit :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> [Import Language]
-> f (Block l' l' f' f')
-> Module Language l' f' f
moduleUnit = Ident
-> [Import l'] -> f (Block l' l' f' f') -> Module Language l' f' f
Ident
-> [Import Language]
-> f (Block l' l' f' f')
-> Module Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Ident -> [Import l'] -> f (Block l l f' f') -> Module λ l f' f
Module
moduleImport :: Maybe Ident -> Ident -> Import Language
moduleImport = (,)
exported :: Ident -> IdentDef Language
exported = (Ident -> AccessMode -> IdentDef Language)
-> AccessMode -> Ident -> IdentDef Language
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ident -> AccessMode -> IdentDef Language
forall l. Ident -> AccessMode -> IdentDef l
IdentDef AccessMode
Exported
qualIdent :: Ident -> Ident -> QualIdent Language
qualIdent = Ident -> Ident -> QualIdent Language
Ident -> Ident -> QualIdent Language
forall l. Ident -> Ident -> QualIdent l
QualIdent
getQualIdentNames :: QualIdent Language -> Maybe (Ident, Ident)
getQualIdentNames (QualIdent Ident
moduleName Ident
name) = (Ident, Ident) -> Maybe (Ident, Ident)
forall a. a -> Maybe a
Just (Ident
moduleName, Ident
name)
getQualIdentNames QualIdent Language
_ = Maybe (Ident, Ident)
forall a. Maybe a
Nothing
arrayType :: forall (f :: * -> *) l' (f' :: * -> *).
[f (ConstExpression l' l' f' f')]
-> f (Type l' l' f' f') -> Type Language l' f' f
arrayType = ZipList (f (Expression l' l' f' f'))
-> f (Type l' l' f' f') -> Type Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
ZipList (f (ConstExpression l l f' f'))
-> f (Type l l f' f') -> Type λ l f' f
ArrayType (ZipList (f (Expression l' l' f' f'))
-> f (Type l' l' f' f') -> Type Language l' f' f)
-> ([f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f')))
-> [f (Expression l' l' f' f')]
-> f (Type l' l' f' f')
-> Type Language l' f' f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [f (Expression l' l' f' f')]
-> ZipList (f (Expression l' l' f' f'))
forall a. [a] -> ZipList a
ZipList
recordType :: forall l' (f :: * -> *) (f' :: * -> *).
Maybe (BaseType l')
-> [f (FieldList l' l' f' f')] -> Type Language l' f' f
recordType Maybe (BaseType l')
base [f (FieldList l' l' f' f')]
fields = Maybe (BaseType l')
-> ZipList (f (FieldList l' l' f' f')) -> Type Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Maybe (QualIdent l)
-> ZipList (f (FieldList l l f' f')) -> Type λ l f' f
RecordType Maybe (BaseType l')
base ([f (FieldList l' l' f' f')] -> ZipList (f (FieldList l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (FieldList l' l' f' f')]
fields)
procedureHeading :: forall l' (f :: * -> *) (f' :: * -> *).
Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
procedureHeading = Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Bool
-> IdentDef l
-> Maybe (f (FormalParameters l l f' f'))
-> ProcedureHeading λ l f' f
ProcedureHeading
forwardDeclaration :: forall l' (f :: * -> *) (f' :: * -> *).
IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> Declaration Language l' f' f
forwardDeclaration = IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> Declaration Language l' f' f
IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> Declaration Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
IdentDef l
-> Maybe (f (FormalParameters l l f' f')) -> Declaration λ l f' f
ForwardDeclaration
withStatement :: forall (f :: * -> *) l' (f' :: * -> *).
f (WithAlternative l' l' f' f') -> Statement Language l' f' f
withStatement f (WithAlternative l' l' f' f')
alt = f (WithAlternative l' l' f' f')
-> ZipList (f (WithAlternative l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (WithAlternative l l f' f')
-> ZipList (f (WithAlternative l l f' f'))
-> Maybe (f (StatementSequence l l f' f'))
-> Statement λ l f' f
With f (WithAlternative l' l' f' f')
alt ([f (WithAlternative l' l' f' f')]
-> ZipList (f (WithAlternative l' l' f' f'))
forall a. [a] -> ZipList a
ZipList []) Maybe (f (StatementSequence l' l' f' f'))
forall a. Maybe a
Nothing
withAlternative :: forall l' (f :: * -> *) (f' :: * -> *).
QualIdent l'
-> QualIdent l'
-> f (StatementSequence l' l' f' f')
-> WithAlternative Language l' f' f
withAlternative = QualIdent l'
-> QualIdent l'
-> f (StatementSequence l' l' f' f')
-> WithAlternative Language l' f' f
QualIdent l'
-> QualIdent l'
-> f (StatementSequence l' l' f' f')
-> WithAlternative Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
QualIdent l
-> QualIdent l
-> f (StatementSequence l l f' f')
-> WithAlternative λ l f' f
WithAlternative
is :: forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> QualIdent l' -> Expression Language l' f' f
is = f (Expression l' l' f' f')
-> QualIdent l' -> Expression Language l' f' f
f (Expression l' l' f' f')
-> QualIdent l' -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Expression l l f' f') -> QualIdent l -> Expression λ l f' f
IsA
set :: forall (f :: * -> *) l' (f' :: * -> *).
[f (Element l' l' f' f')] -> Expression Language l' f' f
set = ZipList (f (Element l' l' f' f')) -> Expression Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
ZipList (f (Element l l f' f')) -> Expression λ l f' f
Set (ZipList (f (Element l' l' f' f')) -> Expression Language l' f' f)
-> ([f (Element l' l' f' f')] -> ZipList (f (Element l' l' f' f')))
-> [f (Element l' l' f' f')]
-> Expression Language l' f' f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [f (Element l' l' f' f')] -> ZipList (f (Element l' l' f' f'))
forall a. [a] -> ZipList a
ZipList
typeGuard :: forall (f :: * -> *) l' (f' :: * -> *).
f (Designator l' l' f' f')
-> QualIdent l' -> Designator Language l' f' f
typeGuard = f (Designator l' l' f' f')
-> QualIdent l' -> Designator Language l' f' f
f (Designator l' l' f' f')
-> QualIdent l' -> Designator Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (Designator l l f' f') -> QualIdent l -> Designator λ l f' f
TypeGuard
instance Abstract.Oberon2 Language where
readOnly :: Ident -> IdentDef Language
readOnly = (Ident -> AccessMode -> IdentDef Language)
-> AccessMode -> Ident -> IdentDef Language
forall a b c. (a -> b -> c) -> b -> a -> c
flip Ident -> AccessMode -> IdentDef Language
forall l. Ident -> AccessMode -> IdentDef l
IdentDef AccessMode
ReadOnly
typeBoundHeading :: forall l' (f :: * -> *) (f' :: * -> *).
Bool
-> Ident
-> Ident
-> Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
typeBoundHeading = Bool
-> Ident
-> Ident
-> Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
Bool
-> Ident
-> Ident
-> Bool
-> IdentDef l'
-> Maybe (f (FormalParameters l' l' f' f'))
-> ProcedureHeading Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
Bool
-> Ident
-> Ident
-> Bool
-> IdentDef l
-> Maybe (f (FormalParameters l l f' f'))
-> ProcedureHeading λ l f' f
TypeBoundHeading
forStatement :: forall (f :: * -> *) l' (f' :: * -> *).
Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement Language l' f' f
forStatement = Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement Language l' f' f
Ident
-> f (Expression l' l' f' f')
-> f (Expression l' l' f' f')
-> Maybe (f (Expression l' l' f' f'))
-> f (StatementSequence l' l' f' f')
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
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
For
variantWithStatement :: forall (f :: * -> *) l' (f' :: * -> *).
NonEmpty (f (WithAlternative l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
variantWithStatement (f (WithAlternative l' l' f' f')
variant :| [f (WithAlternative l' l' f' f')]
variants) = f (WithAlternative l' l' f' f')
-> ZipList (f (WithAlternative l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement Language l' f' f
forall λ l (f' :: * -> *) (f :: * -> *).
f (WithAlternative l l f' f')
-> ZipList (f (WithAlternative l l f' f'))
-> Maybe (f (StatementSequence l l f' f'))
-> Statement λ l f' f
With f (WithAlternative l' l' f' f')
variant ([f (WithAlternative l' l' f' f')]
-> ZipList (f (WithAlternative l' l' f' f'))
forall a. [a] -> ZipList a
ZipList [f (WithAlternative l' l' f' f')]
variants)
data Module λ l f' f = Module Ident [Import l] (f (Abstract.Block l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.Import l),
Data (f (Abstract.Block l l f' f'))) =>
Data (Module λ l f' f)
deriving instance (Show (Abstract.Import l), Show (f (Abstract.Block l l f' f'))) => Show (Module λ l f' f)
type Ident = Text
type Import l = (Maybe Ident, Ident)
data Declaration λ l f' f = ConstantDeclaration (Abstract.IdentDef l) (f (Abstract.ConstExpression l l f' f'))
| TypeDeclaration (Abstract.IdentDef l) (f (Abstract.Type l l f' f'))
| VariableDeclaration (Abstract.IdentList l) (f (Abstract.Type l l f' f'))
| ProcedureDeclaration (f (Abstract.ProcedureHeading l l f' f'))
(f (Abstract.Block l l f' f'))
| ForwardDeclaration (Abstract.IdentDef l) (Maybe (f (Abstract.FormalParameters l l f' f')))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f',
Data (f (Abstract.Type l l f' f')), Data (f (Abstract.ConstExpression l l f' f')),
Data (f (Abstract.FormalParameters l l f' f')), Data (f (Abstract.ProcedureHeading l l f' f')),
Data (f (Abstract.Block l l f' f')), Data (Abstract.IdentDef l)) => Data (Declaration λ l f' f)
deriving instance (Show (f (Abstract.Type l l f' f')), Show (f (Abstract.ConstExpression l l f' f')),
Show (f (Abstract.FormalParameters l l f' f')), Show (f (Abstract.ProcedureHeading l l f' f')),
Show (f (Abstract.Block l l f' f')), Show (Abstract.IdentDef l)) => Show (Declaration λ l f' f)
data QualIdent l = QualIdent Ident Ident
| NonQualIdent Ident
deriving (Typeable (QualIdent l)
Typeable (QualIdent l) =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualIdent l -> c (QualIdent l))
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualIdent l))
-> (QualIdent l -> Constr)
-> (QualIdent l -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (QualIdent l)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualIdent l)))
-> ((forall b. Data b => b -> b) -> QualIdent l -> QualIdent l)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r)
-> (forall u. (forall d. Data d => d -> u) -> QualIdent l -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> QualIdent l -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l))
-> Data (QualIdent l)
QualIdent l -> Constr
QualIdent l -> DataType
(forall b. Data b => b -> b) -> QualIdent l -> QualIdent l
forall l. Data l => Typeable (QualIdent l)
forall l. Data l => QualIdent l -> Constr
forall l. Data l => QualIdent l -> DataType
forall l.
Data l =>
(forall b. Data b => b -> b) -> QualIdent l -> QualIdent l
forall l u.
Data l =>
Int -> (forall d. Data d => d -> u) -> QualIdent l -> u
forall l u.
Data l =>
(forall d. Data d => d -> u) -> QualIdent l -> [u]
forall l r r'.
Data l =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
forall l r r'.
Data l =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
forall l (m :: * -> *).
(Data l, Monad m) =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
forall l (c :: * -> *).
Data l =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualIdent l)
forall l (c :: * -> *).
Data l =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualIdent l -> c (QualIdent l)
forall l (t :: * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (QualIdent l))
forall l (t :: * -> * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualIdent l))
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> QualIdent l -> u
forall u. (forall d. Data d => d -> u) -> QualIdent l -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualIdent l)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualIdent l -> c (QualIdent l)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (QualIdent l))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualIdent l))
$cgfoldl :: forall l (c :: * -> *).
Data l =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualIdent l -> c (QualIdent l)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> QualIdent l -> c (QualIdent l)
$cgunfold :: forall l (c :: * -> *).
Data l =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualIdent l)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (QualIdent l)
$ctoConstr :: forall l. Data l => QualIdent l -> Constr
toConstr :: QualIdent l -> Constr
$cdataTypeOf :: forall l. Data l => QualIdent l -> DataType
dataTypeOf :: QualIdent l -> DataType
$cdataCast1 :: forall l (t :: * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (QualIdent l))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (QualIdent l))
$cdataCast2 :: forall l (t :: * -> * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualIdent l))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (QualIdent l))
$cgmapT :: forall l.
Data l =>
(forall b. Data b => b -> b) -> QualIdent l -> QualIdent l
gmapT :: (forall b. Data b => b -> b) -> QualIdent l -> QualIdent l
$cgmapQl :: forall l r r'.
Data l =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
$cgmapQr :: forall l r r'.
Data l =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> QualIdent l -> r
$cgmapQ :: forall l u.
Data l =>
(forall d. Data d => d -> u) -> QualIdent l -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> QualIdent l -> [u]
$cgmapQi :: forall l u.
Data l =>
Int -> (forall d. Data d => d -> u) -> QualIdent l -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> QualIdent l -> u
$cgmapM :: forall l (m :: * -> *).
(Data l, Monad m) =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
$cgmapMp :: forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
$cgmapMo :: forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> QualIdent l -> m (QualIdent l)
Data, QualIdent l -> QualIdent l -> Bool
(QualIdent l -> QualIdent l -> Bool)
-> (QualIdent l -> QualIdent l -> Bool) -> Eq (QualIdent l)
forall l. QualIdent l -> QualIdent l -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall l. QualIdent l -> QualIdent l -> Bool
== :: QualIdent l -> QualIdent l -> Bool
$c/= :: forall l. QualIdent l -> QualIdent l -> Bool
/= :: QualIdent l -> QualIdent l -> Bool
Eq, Eq (QualIdent l)
Eq (QualIdent l) =>
(QualIdent l -> QualIdent l -> Ordering)
-> (QualIdent l -> QualIdent l -> Bool)
-> (QualIdent l -> QualIdent l -> Bool)
-> (QualIdent l -> QualIdent l -> Bool)
-> (QualIdent l -> QualIdent l -> Bool)
-> (QualIdent l -> QualIdent l -> QualIdent l)
-> (QualIdent l -> QualIdent l -> QualIdent l)
-> Ord (QualIdent l)
QualIdent l -> QualIdent l -> Bool
QualIdent l -> QualIdent l -> Ordering
QualIdent l -> QualIdent l -> QualIdent l
forall l. Eq (QualIdent l)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall l. QualIdent l -> QualIdent l -> Bool
forall l. QualIdent l -> QualIdent l -> Ordering
forall l. QualIdent l -> QualIdent l -> QualIdent l
$ccompare :: forall l. QualIdent l -> QualIdent l -> Ordering
compare :: QualIdent l -> QualIdent l -> Ordering
$c< :: forall l. QualIdent l -> QualIdent l -> Bool
< :: QualIdent l -> QualIdent l -> Bool
$c<= :: forall l. QualIdent l -> QualIdent l -> Bool
<= :: QualIdent l -> QualIdent l -> Bool
$c> :: forall l. QualIdent l -> QualIdent l -> Bool
> :: QualIdent l -> QualIdent l -> Bool
$c>= :: forall l. QualIdent l -> QualIdent l -> Bool
>= :: QualIdent l -> QualIdent l -> Bool
$cmax :: forall l. QualIdent l -> QualIdent l -> QualIdent l
max :: QualIdent l -> QualIdent l -> QualIdent l
$cmin :: forall l. QualIdent l -> QualIdent l -> QualIdent l
min :: QualIdent l -> QualIdent l -> QualIdent l
Ord, Int -> QualIdent l -> ShowS
[QualIdent l] -> ShowS
QualIdent l -> String
(Int -> QualIdent l -> ShowS)
-> (QualIdent l -> String)
-> ([QualIdent l] -> ShowS)
-> Show (QualIdent l)
forall l. Int -> QualIdent l -> ShowS
forall l. [QualIdent l] -> ShowS
forall l. QualIdent l -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall l. Int -> QualIdent l -> ShowS
showsPrec :: Int -> QualIdent l -> ShowS
$cshow :: forall l. QualIdent l -> String
show :: QualIdent l -> String
$cshowList :: forall l. [QualIdent l] -> ShowS
showList :: [QualIdent l] -> ShowS
Show)
data IdentDef l = IdentDef Ident AccessMode
deriving (Typeable (IdentDef l)
Typeable (IdentDef l) =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IdentDef l -> c (IdentDef l))
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IdentDef l))
-> (IdentDef l -> Constr)
-> (IdentDef l -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (IdentDef l)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (IdentDef l)))
-> ((forall b. Data b => b -> b) -> IdentDef l -> IdentDef l)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r)
-> (forall u. (forall d. Data d => d -> u) -> IdentDef l -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> IdentDef l -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l))
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l))
-> Data (IdentDef l)
IdentDef l -> Constr
IdentDef l -> DataType
(forall b. Data b => b -> b) -> IdentDef l -> IdentDef l
forall l. Data l => Typeable (IdentDef l)
forall l. Data l => IdentDef l -> Constr
forall l. Data l => IdentDef l -> DataType
forall l.
Data l =>
(forall b. Data b => b -> b) -> IdentDef l -> IdentDef l
forall l u.
Data l =>
Int -> (forall d. Data d => d -> u) -> IdentDef l -> u
forall l u.
Data l =>
(forall d. Data d => d -> u) -> IdentDef l -> [u]
forall l r r'.
Data l =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
forall l r r'.
Data l =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
forall l (m :: * -> *).
(Data l, Monad m) =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
forall l (c :: * -> *).
Data l =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IdentDef l)
forall l (c :: * -> *).
Data l =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IdentDef l -> c (IdentDef l)
forall l (t :: * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (IdentDef l))
forall l (t :: * -> * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (IdentDef l))
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> IdentDef l -> u
forall u. (forall d. Data d => d -> u) -> IdentDef l -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IdentDef l)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IdentDef l -> c (IdentDef l)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (IdentDef l))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (IdentDef l))
$cgfoldl :: forall l (c :: * -> *).
Data l =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IdentDef l -> c (IdentDef l)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> IdentDef l -> c (IdentDef l)
$cgunfold :: forall l (c :: * -> *).
Data l =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IdentDef l)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (IdentDef l)
$ctoConstr :: forall l. Data l => IdentDef l -> Constr
toConstr :: IdentDef l -> Constr
$cdataTypeOf :: forall l. Data l => IdentDef l -> DataType
dataTypeOf :: IdentDef l -> DataType
$cdataCast1 :: forall l (t :: * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (IdentDef l))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (IdentDef l))
$cdataCast2 :: forall l (t :: * -> * -> *) (c :: * -> *).
(Data l, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (IdentDef l))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (IdentDef l))
$cgmapT :: forall l.
Data l =>
(forall b. Data b => b -> b) -> IdentDef l -> IdentDef l
gmapT :: (forall b. Data b => b -> b) -> IdentDef l -> IdentDef l
$cgmapQl :: forall l r r'.
Data l =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
$cgmapQr :: forall l r r'.
Data l =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> IdentDef l -> r
$cgmapQ :: forall l u.
Data l =>
(forall d. Data d => d -> u) -> IdentDef l -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> IdentDef l -> [u]
$cgmapQi :: forall l u.
Data l =>
Int -> (forall d. Data d => d -> u) -> IdentDef l -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> IdentDef l -> u
$cgmapM :: forall l (m :: * -> *).
(Data l, Monad m) =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
$cgmapMp :: forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
$cgmapMo :: forall l (m :: * -> *).
(Data l, MonadPlus m) =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> IdentDef l -> m (IdentDef l)
Data, IdentDef l -> IdentDef l -> Bool
(IdentDef l -> IdentDef l -> Bool)
-> (IdentDef l -> IdentDef l -> Bool) -> Eq (IdentDef l)
forall l. IdentDef l -> IdentDef l -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall l. IdentDef l -> IdentDef l -> Bool
== :: IdentDef l -> IdentDef l -> Bool
$c/= :: forall l. IdentDef l -> IdentDef l -> Bool
/= :: IdentDef l -> IdentDef l -> Bool
Eq, Eq (IdentDef l)
Eq (IdentDef l) =>
(IdentDef l -> IdentDef l -> Ordering)
-> (IdentDef l -> IdentDef l -> Bool)
-> (IdentDef l -> IdentDef l -> Bool)
-> (IdentDef l -> IdentDef l -> Bool)
-> (IdentDef l -> IdentDef l -> Bool)
-> (IdentDef l -> IdentDef l -> IdentDef l)
-> (IdentDef l -> IdentDef l -> IdentDef l)
-> Ord (IdentDef l)
IdentDef l -> IdentDef l -> Bool
IdentDef l -> IdentDef l -> Ordering
IdentDef l -> IdentDef l -> IdentDef l
forall l. Eq (IdentDef l)
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall l. IdentDef l -> IdentDef l -> Bool
forall l. IdentDef l -> IdentDef l -> Ordering
forall l. IdentDef l -> IdentDef l -> IdentDef l
$ccompare :: forall l. IdentDef l -> IdentDef l -> Ordering
compare :: IdentDef l -> IdentDef l -> Ordering
$c< :: forall l. IdentDef l -> IdentDef l -> Bool
< :: IdentDef l -> IdentDef l -> Bool
$c<= :: forall l. IdentDef l -> IdentDef l -> Bool
<= :: IdentDef l -> IdentDef l -> Bool
$c> :: forall l. IdentDef l -> IdentDef l -> Bool
> :: IdentDef l -> IdentDef l -> Bool
$c>= :: forall l. IdentDef l -> IdentDef l -> Bool
>= :: IdentDef l -> IdentDef l -> Bool
$cmax :: forall l. IdentDef l -> IdentDef l -> IdentDef l
max :: IdentDef l -> IdentDef l -> IdentDef l
$cmin :: forall l. IdentDef l -> IdentDef l -> IdentDef l
min :: IdentDef l -> IdentDef l -> IdentDef l
Ord, Int -> IdentDef l -> ShowS
[IdentDef l] -> ShowS
IdentDef l -> String
(Int -> IdentDef l -> ShowS)
-> (IdentDef l -> String)
-> ([IdentDef l] -> ShowS)
-> Show (IdentDef l)
forall l. Int -> IdentDef l -> ShowS
forall l. [IdentDef l] -> ShowS
forall l. IdentDef l -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall l. Int -> IdentDef l -> ShowS
showsPrec :: Int -> IdentDef l -> ShowS
$cshow :: forall l. IdentDef l -> String
show :: IdentDef l -> String
$cshowList :: forall l. [IdentDef l] -> ShowS
showList :: [IdentDef l] -> ShowS
Show)
data AccessMode = Exported | ReadOnly | PrivateOnly
deriving (Typeable AccessMode
Typeable AccessMode =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AccessMode -> c AccessMode)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AccessMode)
-> (AccessMode -> Constr)
-> (AccessMode -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AccessMode))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c AccessMode))
-> ((forall b. Data b => b -> b) -> AccessMode -> AccessMode)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r)
-> (forall u. (forall d. Data d => d -> u) -> AccessMode -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> AccessMode -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode)
-> Data AccessMode
AccessMode -> Constr
AccessMode -> DataType
(forall b. Data b => b -> b) -> AccessMode -> AccessMode
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> AccessMode -> u
forall u. (forall d. Data d => d -> u) -> AccessMode -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AccessMode
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AccessMode -> c AccessMode
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AccessMode)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AccessMode)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AccessMode -> c AccessMode
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AccessMode -> c AccessMode
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AccessMode
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AccessMode
$ctoConstr :: AccessMode -> Constr
toConstr :: AccessMode -> Constr
$cdataTypeOf :: AccessMode -> DataType
dataTypeOf :: AccessMode -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AccessMode)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AccessMode)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AccessMode)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AccessMode)
$cgmapT :: (forall b. Data b => b -> b) -> AccessMode -> AccessMode
gmapT :: (forall b. Data b => b -> b) -> AccessMode -> AccessMode
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AccessMode -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> AccessMode -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> AccessMode -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AccessMode -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AccessMode -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AccessMode -> m AccessMode
Data, AccessMode -> AccessMode -> Bool
(AccessMode -> AccessMode -> Bool)
-> (AccessMode -> AccessMode -> Bool) -> Eq AccessMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccessMode -> AccessMode -> Bool
== :: AccessMode -> AccessMode -> Bool
$c/= :: AccessMode -> AccessMode -> Bool
/= :: AccessMode -> AccessMode -> Bool
Eq, Eq AccessMode
Eq AccessMode =>
(AccessMode -> AccessMode -> Ordering)
-> (AccessMode -> AccessMode -> Bool)
-> (AccessMode -> AccessMode -> Bool)
-> (AccessMode -> AccessMode -> Bool)
-> (AccessMode -> AccessMode -> Bool)
-> (AccessMode -> AccessMode -> AccessMode)
-> (AccessMode -> AccessMode -> AccessMode)
-> Ord AccessMode
AccessMode -> AccessMode -> Bool
AccessMode -> AccessMode -> Ordering
AccessMode -> AccessMode -> AccessMode
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: AccessMode -> AccessMode -> Ordering
compare :: AccessMode -> AccessMode -> Ordering
$c< :: AccessMode -> AccessMode -> Bool
< :: AccessMode -> AccessMode -> Bool
$c<= :: AccessMode -> AccessMode -> Bool
<= :: AccessMode -> AccessMode -> Bool
$c> :: AccessMode -> AccessMode -> Bool
> :: AccessMode -> AccessMode -> Bool
$c>= :: AccessMode -> AccessMode -> Bool
>= :: AccessMode -> AccessMode -> Bool
$cmax :: AccessMode -> AccessMode -> AccessMode
max :: AccessMode -> AccessMode -> AccessMode
$cmin :: AccessMode -> AccessMode -> AccessMode
min :: AccessMode -> AccessMode -> AccessMode
Ord, Int -> AccessMode -> ShowS
[AccessMode] -> ShowS
AccessMode -> String
(Int -> AccessMode -> ShowS)
-> (AccessMode -> String)
-> ([AccessMode] -> ShowS)
-> Show AccessMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AccessMode -> ShowS
showsPrec :: Int -> AccessMode -> ShowS
$cshow :: AccessMode -> String
show :: AccessMode -> String
$cshowList :: [AccessMode] -> ShowS
showList :: [AccessMode] -> ShowS
Show)
data Expression λ l f' f = Relation RelOp (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| IsA (f (Abstract.Expression l l f' f')) (Abstract.QualIdent l)
| Positive (f (Abstract.Expression l l f' f'))
| Negative (f (Abstract.Expression l l f' f'))
| Add (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Subtract (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Or (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Multiply (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Divide (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| IntegerDivide (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Modulo (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| And (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
| Set (ZipList (f (Abstract.Element l l f' f')))
| Read (f (Abstract.Designator l l f' f'))
| FunctionCall (f (Abstract.Designator l l f' f')) (ZipList (f (Abstract.Expression l l f' f')))
| Not (f (Abstract.Expression l l f' f'))
| Literal (f (Abstract.Value l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f',
Data (Abstract.QualIdent l), Data (f (Abstract.Value l l f' f')),
Data (f (Abstract.Designator l l f' f')), Data (f (Abstract.Element l l f' f')),
Data (f (Abstract.Expression l l f' f'))) =>
Data (Expression λ l f' f)
deriving instance (Show (Abstract.QualIdent l), Show (f (Abstract.Value l l f' f')), Show (f (Abstract.Designator l l f' f')),
Show (f (Abstract.Element l l f' f')), Show (f (Abstract.Expression l l f' f'))) =>
Show (Expression λ l f' f)
deriving instance (Eq (Abstract.QualIdent l), Eq (f (Abstract.Value l l f' f')),
Eq (f (Abstract.Designator l l f' f')), Eq (f (Abstract.Element l l f' f')),
Eq (f (Abstract.Expression l l f' f'))) => Eq (Expression λ l f' f)
data Element λ l f' f = Element (f (Abstract.Expression l l f' f'))
| Range (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (f (Abstract.Expression l l f' f'))) =>
Data (Element λ l f' f)
deriving instance Show (f (Abstract.Expression l l f' f')) => Show (Element λ l f' f)
deriving instance Eq (f (Abstract.Expression l l f' f')) => Eq (Element λ l f' f)
data Value λ l (f' :: K.Type -> K.Type) (f :: K.Type -> K.Type)
= Boolean Bool
| Builtin Text
| CharCode Int
| Integer Integer
| Nil
| Real Double
| String Text
deriving (Value λ l f' f -> Value λ l f' f -> Bool
(Value λ l f' f -> Value λ l f' f -> Bool)
-> (Value λ l f' f -> Value λ l f' f -> Bool)
-> Eq (Value λ l f' f)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall λ l (f' :: * -> *) (f :: * -> *).
Value λ l f' f -> Value λ l f' f -> Bool
$c== :: forall λ l (f' :: * -> *) (f :: * -> *).
Value λ l f' f -> Value λ l f' f -> Bool
== :: Value λ l f' f -> Value λ l f' f -> Bool
$c/= :: forall λ l (f' :: * -> *) (f :: * -> *).
Value λ l f' f -> Value λ l f' f -> Bool
/= :: Value λ l f' f -> Value λ l f' f -> Bool
Eq, Int -> Value λ l f' f -> ShowS
[Value λ l f' f] -> ShowS
Value λ l f' f -> String
(Int -> Value λ l f' f -> ShowS)
-> (Value λ l f' f -> String)
-> ([Value λ l f' f] -> ShowS)
-> Show (Value λ l f' f)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall λ l (f' :: * -> *) (f :: * -> *).
Int -> Value λ l f' f -> ShowS
forall λ l (f' :: * -> *) (f :: * -> *). [Value λ l f' f] -> ShowS
forall λ l (f' :: * -> *) (f :: * -> *). Value λ l f' f -> String
$cshowsPrec :: forall λ l (f' :: * -> *) (f :: * -> *).
Int -> Value λ l f' f -> ShowS
showsPrec :: Int -> Value λ l f' f -> ShowS
$cshow :: forall λ l (f' :: * -> *) (f :: * -> *). Value λ l f' f -> String
show :: Value λ l f' f -> String
$cshowList :: forall λ l (f' :: * -> *) (f :: * -> *). [Value λ l f' f] -> ShowS
showList :: [Value λ l f' f] -> ShowS
Show)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f') => Data (Value λ l f' f)
data Designator λ l f' f = Variable (Abstract.QualIdent l)
| Field (f (Abstract.Designator l l f' f')) Ident
| Index (f (Abstract.Designator l l f' f'))
(f (Abstract.Expression l l f' f')) (ZipList (f (Abstract.Expression l l f' f')))
| TypeGuard (f (Abstract.Designator l l f' f')) (Abstract.QualIdent l)
| Dereference (f (Abstract.Designator l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.QualIdent l),
Data (f (Abstract.Designator l l f' f')), Data (f (Abstract.Expression l l f' f'))) =>
Data (Designator λ l f' f)
deriving instance (Show (Abstract.QualIdent l), Show (f (Abstract.Designator l l f' f')),
Show (f (Abstract.Expression l l f' f'))) => Show (Designator λ l f' f)
deriving instance (Eq (Abstract.QualIdent l), Eq (f (Abstract.Designator l l f' f')),
Eq (f (Abstract.Expression l l f' f'))) => Eq (Designator λ l f' f)
data Type λ l f' f = TypeReference (Abstract.QualIdent l)
| ArrayType (ZipList (f (Abstract.ConstExpression l l f' f'))) (f (Abstract.Type l l f' f'))
| RecordType (Maybe (Abstract.BaseType l)) (ZipList (f (Abstract.FieldList l l f' f')))
| PointerType (f (Abstract.Type l l f' f'))
| ProcedureType (Maybe (f (Abstract.FormalParameters l l f' f')))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.QualIdent l), Data (f (Abstract.Type l l f' f')),
Data (f (Abstract.ConstExpression l l f' f')), Data (f (Abstract.FormalParameters l l f' f')),
Data (f (Abstract.FieldList l l f' f'))) =>
Data (Type λ l f' f)
deriving instance (Show (Abstract.QualIdent l), Show (f (Abstract.Type l l f' f')),
Show (f (Abstract.ConstExpression l l f' f')), Show (f (Abstract.FormalParameters l l f' f')),
Show (f (Abstract.FieldList l l f' f'))) =>
Show (Type λ l f' f)
data FieldList λ l f' f = FieldList (Abstract.IdentList l) (f (Abstract.Type l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.IdentDef l), Data (f (Abstract.Type l l f' f')),
Data (f (Abstract.Expression l l f' f'))) => Data (FieldList λ l f' f)
deriving instance (Show (Abstract.IdentDef l), Show (f (Abstract.Type l l f' f')), Show (f (Abstract.Expression l l f' f'))) =>
Show (FieldList λ l f' f)
data ProcedureHeading λ l f' f =
ProcedureHeading Bool (Abstract.IdentDef l) (Maybe (f (Abstract.FormalParameters l l f' f')))
| TypeBoundHeading Bool Ident Ident Bool (Abstract.IdentDef l) (Maybe (f (Abstract.FormalParameters l l f' f')))
data FormalParameters λ l f' f = FormalParameters (ZipList (f (Abstract.FPSection l l f' f'))) (Maybe (Abstract.ReturnType l))
data FPSection λ l f' f = FPSection Bool [Ident] (f (Abstract.Type l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.IdentDef l),
Data (f (Abstract.FormalParameters l l f' f'))) => Data (ProcedureHeading λ l f' f)
deriving instance (Show (Abstract.IdentDef l), Show (f (Abstract.FormalParameters l l f' f'))) =>
Show (ProcedureHeading λ l f' f)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.ReturnType l),
Data (f (Abstract.FPSection l l f' f')), Data (f (Abstract.Expression l l f' f'))) =>
Data (FormalParameters λ l f' f)
deriving instance (Show (f (Abstract.FPSection l l f' f')), Show (Abstract.ReturnType l),
Show (f (Abstract.Expression l l f' f'))) => Show (FormalParameters λ l f' f)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (f (Abstract.Type l l f' f')),
Data (f (Abstract.Expression l l f' f'))) => Data (FPSection λ l f' f)
deriving instance (Show (f (Abstract.Type l l f' f')), Show (f (Abstract.Expression l l f' f'))) => Show (FPSection λ l f' f)
data Block λ l f' f = Block (ZipList (f (Abstract.Declaration l l f' f'))) (Maybe (f (Abstract.StatementSequence l l f' f')))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (f (Abstract.Declaration l l f' f')),
Data (f (Abstract.Designator l l f' f')), Data (f (Abstract.Expression l l f' f')),
Data (f (Abstract.StatementSequence l l f' f'))) =>
Data (Block λ l f' f)
deriving instance (Show (f (Abstract.Declaration l l f' f')), Show (f (Abstract.Designator l l f' f')),
Show (f (Abstract.Expression l l f' f')), Show (f (Abstract.StatementSequence l l f' f'))) =>
Show (Block λ l f' f)
newtype StatementSequence λ l f' f = StatementSequence (ZipList (f (Abstract.Statement l l f' f')))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (f (Abstract.Statement l l f' f'))) =>
Data (StatementSequence λ l f' f)
deriving instance Show (f (Abstract.Statement l l f' f')) => Show (StatementSequence λ l f' f)
data Statement λ l f' f = EmptyStatement
| Assignment (f (Abstract.Designator l l f' f')) (f (Abstract.Expression l l f' f'))
| ProcedureCall (f (Abstract.Designator l l f' f')) (Maybe (ZipList (f (Abstract.Expression l l f' f'))))
| If (f (Abstract.ConditionalBranch l l f' f'))
(ZipList (f (Abstract.ConditionalBranch l l f' f')))
(Maybe (f (Abstract.StatementSequence l l f' f')))
| CaseStatement (f (Abstract.Expression l l f' f'))
(ZipList (f (Abstract.Case l l f' f')))
(Maybe (f (Abstract.StatementSequence l l f' f')))
| While (f (Abstract.Expression l l f' f')) (f (Abstract.StatementSequence l l f' f'))
| Repeat (f (Abstract.StatementSequence l l f' f')) (f (Abstract.Expression l l f' f'))
| For Ident (f (Abstract.Expression l l f' f')) (f (Abstract.Expression l l f' f'))
(Maybe (f (Abstract.Expression l l f' f'))) (f (Abstract.StatementSequence l l f' f'))
| Loop (f (Abstract.StatementSequence l l f' f'))
| With (f (Abstract.WithAlternative l l f' f'))
(ZipList (f (Abstract.WithAlternative l l f' f')))
(Maybe (f (Abstract.StatementSequence l l f' f')))
| Exit
| Return (Maybe (f (Abstract.Expression l l f' f')))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f',
Data (f (Abstract.Designator l l f' f')), Data (f (Abstract.Expression l l f' f')),
Data (f (Abstract.Case l l f' f')), Data (f (Abstract.WithAlternative l l f' f')),
Data (f (Abstract.ConditionalBranch l l f' f')),
Data (f (Abstract.StatementSequence l l f' f'))) => Data (Statement λ l f' f)
deriving instance (Show (f (Abstract.Designator l l f' f')), Show (f (Abstract.Expression l l f' f')),
Show (f (Abstract.Case l l f' f')), Show (f (Abstract.WithAlternative l l f' f')),
Show (f (Abstract.ConditionalBranch l l f' f')),
Show (f (Abstract.StatementSequence l l f' f'))) => Show (Statement λ l f' f)
data WithAlternative λ l f' f = WithAlternative (Abstract.QualIdent l) (Abstract.QualIdent l)
(f (Abstract.StatementSequence l l f' f'))
data Case λ l f' f = Case (f (Abstract.CaseLabels l l f' f')) (ZipList (f (Abstract.CaseLabels l l f' f')))
(f (Abstract.StatementSequence l l f' f'))
data CaseLabels λ l f' f = SingleLabel (f (Abstract.ConstExpression l l f' f'))
| LabelRange (f (Abstract.ConstExpression l l f' f')) (f (Abstract.ConstExpression l l f' f'))
data ConditionalBranch λ l f' f =
ConditionalBranch (f (Abstract.Expression l l f' f')) (f (Abstract.StatementSequence l l f' f'))
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (Abstract.QualIdent l),
Data (f (Abstract.Designator l l f' f')), Data (f (Abstract.StatementSequence l l f' f'))) =>
Data (WithAlternative λ l f' f)
deriving instance (Show (Abstract.QualIdent l), Show (f (Abstract.StatementSequence l l f' f'))) =>
Show (WithAlternative λ l f' f)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f',
Data (f (Abstract.CaseLabels l l f' f')), Data (f (Abstract.StatementSequence l l f' f'))) =>
Data (Case λ l f' f)
deriving instance (Show (f (Abstract.CaseLabels l l f' f')), Show (f (Abstract.StatementSequence l l f' f'))) =>
Show (Case λ l f' f)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f',
Data (f (Abstract.Expression l l f' f')), Data (f (Abstract.StatementSequence l l f' f'))) =>
Data (ConditionalBranch λ l f' f)
deriving instance (Show (f (Abstract.Expression l l f' f')), Show (f (Abstract.StatementSequence l l f' f'))) =>
Show (ConditionalBranch λ l f' f)
deriving instance (Typeable λ, Typeable l, Typeable f, Typeable f', Data (f (Abstract.ConstExpression l l f' f'))) =>
Data (CaseLabels λ l f' f)
deriving instance Show (f (Abstract.ConstExpression l l f' f')) => Show (CaseLabels λ l f' f)
$