{-| Module : Language.CSharp.Syntax Description : Abstract syntax tree of C#. This module contains the abstract syntax tree of C#. -} module Language.CSharp.Syntax where -- | A compilation unit is the top level definition of a C# program. data CompilationUnit = CompilationUnit [Using] [Declaration] deriving (Show) -- | A using declaration appears within a compilation unit to indicate which -- namespace to include. data Using = Using Name Bool deriving (Show) -- | A declaration appears within a compilation unit introducing a namespace, -- or a type declaration. data Declaration -- | A namespace declaration. = NamespaceDeclaration [GlobalAttributeSection] Name [Declaration] -- | A type declaration. | TypeDeclaration TypeDeclaration deriving (Show) -- | A type declaration appears withing a compilation unit, a namespace, or -- another type declaration. A type declaration introduces a new type which can -- be either a class, struct, enum, interface or delegate. data TypeDeclaration -- | A class declaration containing its attributes, modifiers, identifier, -- type parameters, the types it inherits from, the type parameter constaints -- and its body. = ClassTypeDeclaration [AttributeSection] [Modifier] Identifier [TypeParameter] [TypeName] [TypeParameterConstraintClause] ClassBody -- | A struct declaration containing its attributes, modifiers, identifier, -- type parameters, the types it inherits from, the type parameter constraints -- and its body. | StructTypeDeclaration [AttributeSection] [Modifier] Identifier [TypeParameter] [TypeName] [TypeParameterConstraintClause] StructBody -- | An enum declaration containing its attributes, modifiers, identifier, -- the type it inherits from and its body. | EnumTypeDeclaration [AttributeSection] [Modifier] Identifier (Maybe IntegralType) EnumBody -- | An interface declaration containing its attributes, modifiers, identifier, -- the type parameters, the types it inherits from, the type parameter constraints -- and its body. | InterfaceTypeDeclaration [AttributeSection] [Modifier] Identifier [VariantTypeParameter] [TypeName] [TypeParameterConstraintClause] InterfaceBody -- | A delegate declaration containing its attributes, modifiers, return type, -- identifier, type parameters, formal parameters and type parameter constraints. | DelegateTypeDeclaration [AttributeSection] [Modifier] (Maybe Type) Identifier [VariantTypeParameter] FormalParams [TypeParameterConstraintClause] deriving (Show) -- | A class body appears within a class type declaration. newtype ClassBody = ClassBody [MemberDeclaration] deriving (Show) -- | A struct body appears within a struct type declaration. newtype StructBody = StructBody [MemberDeclaration] deriving (Show) -- | An enum body appears within an enum type declaration. newtype EnumBody = EnumBody [EnumMemberDeclaration] deriving (Show) -- | An enum member declaration appears within an enum body. data EnumMemberDeclaration -- | An enum member declaration containing the identifier and its value. = EnumMemberDeclaration Identifier (Maybe Expression) deriving (Show) -- | An interface body appears within an interface type declaration. newtype InterfaceBody = InterfaceBody [InterfaceMemberDeclaration] deriving (Show) -- | An interface member declaration appears within an interface body. data InterfaceMemberDeclaration -- | A method declaration containing its attributes, modifiers, return type -- identifier, type parameters, formal parameters and type parameter constraints. = InterfaceMethodMemberDeclaration [AttributeSection] [Modifier] (Maybe Type) Identifier [TypeParameter] FormalParams [TypeParameterConstraintClause] -- | A property declaration containing its attributes, modifiers, type -- identifier and accessor(s). At least one accessor is defined and they can -- appear in any order. | InterfacePropertyMemberDeclaration [AttributeSection] [Modifier] Type Identifier (Maybe InterfaceAccessor) (Maybe InterfaceAccessor) -- | An event declaration containing its attributes, modifiers, type and identifier. | InterfaceEventMemberDeclaration [AttributeSection] [Modifier] Type Identifier -- | An indexer declaration containing its attributes, modifiers, type, -- formal parameters and accessor(s). At least one accessor is defined and -- they can appear in any order. | InterfaceIndexerMemberDeclaration [AttributeSection] [Modifier] Type FormalParams (Maybe InterfaceAccessor) (Maybe InterfaceAccessor) deriving (Show) -- | A member declaration appears within a class- or struct body. data MemberDeclaration -- | A field declaration containing its attributes, modifiers, type and declarator(s). = FieldMemberDeclaration [AttributeSection] [Modifier] Type [VariableDeclarator] -- | A method declaration containing its attributes, modifiers, return type -- name, type parameters, formal parameters, type parameter constraints and -- body. | MethodMemberDeclaration [AttributeSection] [Modifier] (Maybe Type) Name [TypeParameter] FormalParams [TypeParameterConstraintClause] MethodBody -- | A property declaration containing its attributes, modifiers, type, -- name and body. | PropertyMemberDeclaration [AttributeSection] [Modifier] Type Name PropertyBody -- | An event declaration containing its attributes, modifiers, type and -- declarator(s). | EventVariableMemberDeclaration [AttributeSection] [Modifier] Type [VariableDeclarator] -- | An event declaration containing its attributes, modifiers, type, name -- and accessors. The accessors can appear in any order. | EventAccessorMemberDeclaration [AttributeSection] [Modifier] Type Name EventAccessor EventAccessor -- | An indexer declaration containing its attributes, modifiers, declarator -- and body. | IndexerMemberDeclaration [AttributeSection] [Modifier] IndexerDeclarator IndexerBody -- | An operator declaration containing its attributes, modifiers, declarator -- and body. | OperatorMemberDeclaration [AttributeSection] [Modifier] OperatorDeclarator OperatorBody -- | A constructor declaration containing its attributes, identifier, formal -- parameters, the base/this constructor call and body. | ConstructorMemberDeclaration [AttributeSection] [Modifier] Identifier FormalParams (Maybe ConstructorInitializer) ConstructorBody -- | A destructor declaration containing its attributes, modifiers, identifier -- and body. | DestructorMemberDeclaration [AttributeSection] [Modifier] Identifier DestructorBody -- | A nested type declaration. | TypeMemberDeclaration TypeDeclaration deriving (Show) -- | A property accessor appears within an property declaration of an interface -- declaration. data InterfaceAccessor = GetInterfaceAccessor [AttributeSection] | SetInterfaceAccessor [AttributeSection] deriving (Show) -- | An event acessor appears within an event declaration. data EventAccessor -- | An add event accessor containing its attributes and statements. = AddEventAccessor [AttributeSection] [Statement] -- | A remove event accessor containing its attributes and statements. | RemoveEventAccessor [AttributeSection] [Statement] deriving (Show) -- | A constructor initializer appears within a constructor declaration. data ConstructorInitializer = ConstructorBaseCall [Argument] | ConstructorThisCall [Argument] deriving (Show) -- | An argument appears within any kind of method invocation. data Argument -- | An argument containing its identifier and expression. = Argument (Maybe Identifier) Expression -- | A ref argument containing its identifier and expression. | RefArgument (Maybe Identifier) Expression -- | An out argument containing its identifier and expression. | OutArgument (Maybe Identifier) Expression deriving (Show) -- | An operator declarator appears within a operator declaration. data OperatorDeclarator -- | An unary operator declaration containing its return type, operator, and -- formal parameter type and identifier. = UnaryOperatorDeclarator Type OverloadableUnaryOperator Type Identifier -- | A binary operator declaration containing its return type, operator, -- first formal parameter type and identifier, and second formal parameter -- type and identifier. | BinaryOperatorDeclarator Type BinaryOperator Type Identifier Type Identifier -- | An implicit conversion declarator containing its return type, and -- formal parameter type and identifier. | ImplicitConversionOperatorDeclarator Type Type Identifier -- | An explicit conversion declarator containing its return type, and -- formal parameter type and identifier. | ExplicitConversionOperatorDeclarator Type Type Identifier deriving (Show) -- | An overloadable unary operator appears within a unary operator declarator. data OverloadableUnaryOperator = OverloadableUnaryPlus | OverloadableUnaryMinus | OverloadableUnaryNot | OverloadableUnaryBitwiseNot | OverloadableUnaryPlusPlus | OverloadableUnaryMinusMinus | OverloadableUnaryTrue | OverloadableUnaryFalse deriving (Show) -- | An operator body appears within a operator declaration. data OperatorBody -- | An operator body containing its statements. = OperatorStatementBody [Statement] -- | An operator body containing its expression. | OperatorExpressionBody Expression -- | An operator body without an implementation. | OperatorNoBody deriving (Show) -- | A constructor body appears within a constructor declaration. newtype ConstructorBody = ConstructorStatementBody [Statement] deriving (Show) -- | A destructor body appears within a destructor declaration. newtype DestructorBody = DestructorStatementBody [Statement] deriving (Show) -- | A indexer body appears within an indexer declaration. data IndexerBody -- | An indexer body containing its accessor(s). At least one accessor is -- defined and they can appear in any order. = IndexerAccessor (Maybe AccessorDeclaration) (Maybe AccessorDeclaration) -- | An indexer body containing its expression. | IndexerLambda Expression deriving (Show) -- | An indexer declarator appears within an indexer declaration. data IndexerDeclarator -- | An indexer declarator containing its return type and formal parameters. = IndexerDeclaratorThis Type FormalParams -- | An indexer declarator containing its return type, interface type and -- formal parameters. | IndexerDeclaratorInterface Type Type FormalParams deriving (Show) -- | A property body appears within a property declaration. data PropertyBody -- | A property body containing its accessor(s) and variable initializer. -- At least one accessor is defined an they can appear in any order. = PropertyBody (Maybe AccessorDeclaration) (Maybe AccessorDeclaration) (Maybe VariableInitializer) -- | A propety body containing its expression. | PropertyLambda Expression deriving (Show) -- | An accessor declaration appears within a property body. data AccessorDeclaration -- | A get propety declaration containing its attributes, modifiers and body. = GetAccessorDeclaration [AttributeSection] [Modifier] (Maybe [Statement]) -- | A set propety declaration containing its attributes, modifiers and body. | SetAccessorDeclaration [AttributeSection] [Modifier] (Maybe [Statement]) deriving (Show) -- | A method body appears within a method declaration. data MethodBody -- | An method body containing its statements. = MethodStatementBody [Statement] -- | An method body containing its expression. | MethodExpressionBody Expression -- | An method body without an implementation. | MethodNoBody deriving (Show) -------------------------------------------------------------------------------- -- Formal parameters. -------------------------------------------------------------------------------- -- | A formal parameters containing the formal parameters and a params array. data FormalParams = FormalParams [FormalParam] (Maybe ParamArray) deriving (Show) -- | A formal parameter containing its modifier ty identifier and default value. data FormalParam = FormalParam (Maybe ParameterModifier) Type Identifier (Maybe Expression) deriving (Show) -- | A formal params array containing its array type and identifier. data ParamArray = ParamArray ArrayType Identifier deriving (Show) -- | A formal parameter modifier. data ParameterModifier = RefParam | OutParam | ThisParam deriving (Show) -------------------------------------------------------------------------------- -- Statements. -------------------------------------------------------------------------------- -- | A statement. data Statement -- | A labeled statement containing its label and statement. = Labeled Identifier Statement -- | A declaration containing its variable declaration. | Declaration LocalVarDeclaration -- | A block statement. | Block [Statement] -- | An empty statement. | Empty -- | An expression statement. | ExpressionStatement Expression -- | An if then else statement containing its guard, true body and false body. | IfThenElse Expression Statement (Maybe Statement) -- | A switch statement containing its guard and switch blocks. | Switch Expression [SwitchBlock] -- | A while statement containing its guard and body. | While Expression Statement -- | A do while statement containing its body and guard. | Do Statement Expression -- | A for statement containing its initializer, guard, increment expression and body. | For (Maybe ForInitializer) (Maybe Expression) (Maybe [Expression]) Statement -- | A foreach statement containing its variable type name and expression, and body. | ForEach LocalVarType Identifier Expression Statement -- | A break statement. | Break -- | A continue statement. | Continue -- | A goto statement. | Goto GotoTarget -- | A return statement. | Return (Maybe Expression) -- | A throw statement. | Throw (Maybe Expression) -- | A try catch finally statement containing the try body, catches and finally body. | Try [Statement] [Catch] [Statement] -- | A checked statement. | CheckedStatement [Statement] -- | An unchecked statement. | UncheckedStatement [Statement] -- | A lock statement containing its locking object and body. | Lock Expression Statement -- | An using statement containing its resource and body. | UsingStatement ResourceAcquisition Statement -- | A yield statement containing its return expression. | Yield (Maybe Expression) deriving (Show) -- | A local variable declaration appears within a local declaration or for initializer. data LocalVarDeclaration -- | A local variable declaration containing its type and declarators. = LocalVarDeclaration LocalVarType [VariableDeclarator] deriving (Show) -- | A goto target appears within a goto statement. data GotoTarget = GotoLabel Identifier | GotoCase Expression | GotoDefault deriving (Show) -- | A switch block appears within a switch statement. data SwitchBlock -- | A labeled block containing its label and body. = LabeledBlock Expression [Statement] -- | A default block containing its body. | DefaultBlock [Statement] deriving (Show) -- | A resource acquisition appears within an using statement. data ResourceAcquisition -- | A resource acquisition containing its variable declarators. = ResourceAcquisitionVariable [VariableDeclarator] -- | A resource acquisition containing its expression. | ResourceAcquisitionExpression Expression deriving (Show) -- | A variable declarator containing its identifier and initializer. data VariableDeclarator = VariableDeclarator Identifier (Maybe VariableInitializer) deriving (Show) -- | A variable initializer. data VariableInitializer -- | A variable initializer containing its expression. = VariableInitializerExpression Expression -- | A variable initializer containing its array initializer. | VariableInitializerArray ArrayInitializer deriving (Show) -- | A local variable type. data LocalVarType = VarType Type | Var deriving (Show) -- | An array initializer containing its variable initializers. newtype ArrayInitializer = ArrayInitializer [VariableInitializer] deriving (Show) -- | A for initializer appears within a for statement. data ForInitializer -- | A for initializer containing its variable declaration. = ForInitializerDeclaration LocalVarDeclaration -- | A for initializer containing its expressions. | ForInitializerExpressions [Expression] deriving (Show) -- | A catch block appears within a try statement. data Catch -- | A catch block containing its exception specifier, exception filter and body. = Catch (Maybe ExceptionSpecifier) (Maybe Expression) [Statement] deriving (Show) -- | An exception specifier containing its type and identifier. data ExceptionSpecifier = ExceptionSpecifier Type (Maybe Identifier) deriving (Show) -------------------------------------------------------------------------------- -- Expressions -------------------------------------------------------------------------------- -- | An expression. data Expression -- | A literal. = Literal Literal -- | A named value containing its identifer and type arguments. | SimpleName Identifier [TypeArgument] -- | A parenthesized expression. | Parenthesized Expression -- | An assignment containing its left-hand side, operator and right-hand side.. | Assign Expression AssignmentOperator Expression -- | An member access. | MemberAccess MemberAccess -- | An method invocation containing its method and arguments. | Invocation Expression [Argument] -- | An element access containing its array and indices. | ElementAccess Expression [Expression] -- | A this access expression. | This -- | A base access expression. | Base -- | An object creation containing its type, arguments and initializer. -- e.g. @new Object(a, b)@. | ObjectCreationExpression Type [Argument] (Maybe ObjectCreationInitializer) -- | An object creation containing its type and initializer. -- e.g. @new Object { A = a, B = b }@. | ObjectCreationTypeInitializer Type ObjectCreationInitializer -- | An array creation containing its type, rank specifiers and initialier. | ArrayCreationExpression Type [Expression] [RankSpecifier] (Maybe ArrayCreationInitializer) -- | An array creation containing its type and intializer. | ArrayCreationTypeInitializer Type ArrayCreationInitializer -- | An array creation containing its rank specifier and initializer. | ArrayCreationRankInitializer RankSpecifier ArrayCreationInitializer -- | A sizeof expression. | Sizeof Type -- | A typeof expression. | Typeof TypeOfExpression -- | A checked expression. | Checked Expression -- | An unchecked expression. | Unchecked Expression -- | A default expression. | Default Type -- | A binary operator containing its operator, left expression and right expression. | BinaryOperator BinaryOperator Expression Expression -- | A conditional expression containing its guard, first expression and second -- expression, | Conditional Expression Expression Expression -- | A nameof expression. | Nameof NameofEntity -- | A delegate expression containing its signature and body. | Delegate (Maybe AnonymousFunctionSignature) [Statement] -- | A lambda expression containing its signature and body. | Lambda AnonymousFunctionSignature AnonymousFunctionBody -- | An unary @+@ expression. | UnaryPlus Expression -- | An unary @-@ expression. | UnaryMinus Expression -- | An unary @!@ expression. | UnaryNot Expression -- | An unary @~@ expression. | UnaryBitwiseNot Expression -- | An unary @++@ expression appearing in front of its expression. | UnaryPreIncrement Expression -- | An unary @--@ expression appearing in front of its expression. | UnaryPreDecrement Expression -- | An unary @++@ expression appearing after its expression. | UnaryPostIncrement Expression -- | An unary @--@ expression appearing after its expression. | UnaryPostDecrement Expression -- | A cast containing its target type and expression. | UnaryCast Type Expression -- | An await expression. | UnaryAwait Expression deriving (Show) -- | An anonymous function signature appears within a delegate- or lambda expression. data AnonymousFunctionSignature -- | An explicit anonymous function signature containing its formal parameters. = ExplicitAnonymousFunctionSignature [AnonymousFunctionParameter] -- | An implicit anonymous function signature containing its formal parameters. | ImplicitAnonymousFunctionSignature [Identifier] deriving (Show) -- | An anonymous function body appears within a lambda expression. data AnonymousFunctionBody -- | A anonymous function body containing its statements. = AnonymousFunctionStatementBody [Statement] -- | A anonymous function body containing its expression. | AnonymousFunctionExpressionBody Expression deriving (Show) -- | An anonymous function parameter containing its modifier, type and identifier. data AnonymousFunctionParameter = ExplicitAnonymousFunctionParameter (Maybe ParameterModifier) Type Identifier deriving (Show) -- | A nameof entity appears within a nameof expression. data NameofEntity -- | A nameof containing its identifier. = NameofIdentifier Identifier -- | A nameof this containing its identifier. | NameofThis Identifier -- | A nameof base containing its identifier. | NameofBase Identifier -- | A nameof containing its entity and identifier. | NameofEntity NameofEntity Identifier -- | A nameof containing its simple type and identifier. | NameofPredefinedType SimpleType Identifier deriving (Show) -- | A typeof expression containing its type where 'Data.Maybe.Nothing' represents -- void. newtype TypeOfExpression = TypeofType (Maybe Type) deriving (Show) -- | An array creation initializer appears withing an array creation expression. data ArrayCreationInitializer -- | An array creation initializer containing its values. = ArrayCreationInitializerExpression [Expression] -- | An array creation initializer containing its nested initializers. | ArrayCreationInitializerInitializers [ArrayCreationInitializer] deriving (Show) -- | An object creation initializer appears within an object creation expression. data ObjectCreationInitializer -- | An object initializer containing its member initializers. = ObjectInitializer [MemberInitializer] -- | A collection initializer containing its initializers. | CollectionInitializer ArrayCreationInitializer deriving (Show) -- | A member initializer containing its target and value. data MemberInitializer = MemberInitializer InitializerTarget InitializerValue deriving (Show) -- | An initialization target appears within a member initializer. data InitializerTarget -- | An initializer target containing its identifier. = InitializerTargetIdentifier Identifier -- | An initializer target containing its values. | InitializerTargetList [Argument] deriving (Show) -- | An initialization value appears within a member initializer. data InitializerValue -- | An initializer value containing its value. = InitializerValueExpression Expression -- | An initializer value containing its nested values. | InitializerValueInitializer ObjectCreationInitializer deriving (Show) -- | A member access appearing within an member access expression. data MemberAccess -- | A member access containing its expression, identifier and type arguments. = PrimaryMemberAccess Expression Identifier [TypeArgument] -- | A member access containing its simple type, identifier and type arguments. | PredefinedMemberAccess SimpleType Identifier [TypeArgument] -- | A member access containing its namespace, identifier, and identifier. | QualifiedMemberAccess Identifier Identifier Identifier deriving (Show) -- | A literal. data Literal = BooleanLit Bool | IntLit Integer | UIntLit Integer | LongLit Integer | ULongLit Integer | FloatLit Double | DoubleLit Double | DecimalLit Double | CharLit String | StringLit String -- | InterpolatedStringLit String | VerbatimStringLit String | NullLit deriving (Show) -- | An assignment operator. data AssignmentOperator = OpAssign | OpAssignPlus | OpAssignMinus | OpAssignMultiply | OpAssignDivide | OpAssignModulo | OpAssignBitwiseAnd | OpAssignBitwiseOr | OpAssignBitwiseXor | OpAssignBitwiseLeftShift | OpAssignBitwiseRightShift deriving (Show) -- | A binary operator. data BinaryOperator = BinaryPlus | BinaryMinus | BinaryMultiply | BinaryDivide | BinaryModulo | BinaryShiftLeft | BinaryShiftRight | BinaryEquals | BinaryNotEquals | BinaryLessThan | BinaryLessThanEqual | BinaryGreaterThan | BinaryGreaterThanEqual | BinaryBitwiseAnd | BinaryBitwiseXor | BinaryBitwiseOr | BinaryAnd | BinaryOr | BinaryIs | BinaryAs | BinaryNullCoalescing deriving (Show) -------------------------------------------------------------------------------- -- Type parameters. -------------------------------------------------------------------------------- -- | A type parameter containing its identifier. newtype TypeParameter = TypeParameter Identifier deriving (Show) -- | A type parameter constraint clause containing its type parameter and constraints. data TypeParameterConstraintClause = TypeParameterConstraintClause TypeParameter [TypeParameterConstraint] deriving (Show) -- | A variant type parameter containing its variance and identifier. data VariantTypeParameter = VariantTypeParameter (Maybe Variance) Identifier deriving (Show) -- | A variance appears within a variant type parameter. data Variance = VarianceIn | VarianceOut deriving (Show) -- | A type parameter constraint appears within a type parameter constraints clause. data TypeParameterConstraint -- | A type constraint containing its type. = TypeConstraint Type -- | A class constraint. | ClassConstraint -- | A struct constraint. | StructConstraint -- | A new() constraint. | NewConstraint deriving (Show) -- | A type argument containing its type. newtype TypeArgument = TypeArgument Type deriving (Show) -------------------------------------------------------------------------------- -- Type definitions. -------------------------------------------------------------------------------- -- | A type. data Type -- | A named type containing its name. = TypeNamed TypeName -- | An array type containing its array type. | TypeArray ArrayType -- | A simple type containing its simple type. | TypeSimple SimpleType -- | A dynamic type. | TypeDynamic -- | A nullable type containing its type. | TypeNullable Type deriving (Show) -- | A simple type can be one of the standard types. data SimpleType = IntegralType IntegralType | FloatingPointType FloatingPointType | Char | Bool | Object | String deriving (Show) -- | An intergral type. data IntegralType = SByte | Byte | Short | UShort | Int | UInt | Long | ULong deriving (Show) -- | A floating point type. data FloatingPointType = Float | Double | Decimal deriving (Show) -- | An array type containing its base type and rank specifiers. data ArrayType = ArrayType Type [RankSpecifier] deriving (Show) -- | A rank specifier containing the number of ranks. newtype RankSpecifier = RankSpecifier Int deriving (Show) -- | A type name. data TypeName -- | A type name containing its name and type arguments. = TypeName Name [TypeArgument] -- | A type alias containing its namespace, identifier and type arguments. | TypeAlias Identifier Identifier [TypeArgument] deriving (Show) -------------------------------------------------------------------------------- -- Attribute definitions. -------------------------------------------------------------------------------- -- | An attribute section containing the attribute target and attributes. data AttributeSection = AttributeSection (Maybe AttributeTarget) [Attribute] deriving (Show) -- | A global attribute section containing the attribute target and attributes. data GlobalAttributeSection = GlobalAttributeSection (Maybe GlobalAttributeTarget) [Attribute] deriving (Show) -- | A global attribute target appears within a global attribute section. data GlobalAttributeTarget = AttributeTargetAssembly | AttributeTargetModule deriving (Show) -- | An attribute target appears within a attribute section. data AttributeTarget = AttributeTargetField | AttributeTargetEvent | AttributeTargetMethod | AttributeTargetParam | AttributeTargetProperty | AttributeTargetReturn | AttributeTargetType deriving (Show) -- | An attribute containing its type name and attribute arguments. data Attribute = Attribute TypeName [AttributeArgument] deriving (Show) -- | An attribute argument appears within an attribute. data AttributeArgument -- | An expression attribute argument containing its expression. = AttributeArgumentExpression Expression -- | An named attribute argument containing its name and expression. | AttributeArgumentNamed Identifier Expression deriving (Show) -------------------------------------------------------------------------------- -- Auxiliary definitions. -------------------------------------------------------------------------------- -- | A modifier specifying properties of declarations on different levels. data Modifier = Public | Private | Internal | Protected | Abstract | Async | Const | Event | Extern | New | Override | Readonly | Sealed | Static | Unsafe | Virtual | Volatile | Partial deriving (Show) -- | An identifier. newtype Identifier = Identifier String deriving (Show) -- | A name is a sequence of identifiers chained with periods. newtype Name = Name [Identifier] deriving (Show)