packages feed

hydra-ext-0.17.0: src/main/haskell/Hydra/Csharp/Syntax.hs

-- Note: this is an automatically generated file. Do not edit.
-- | A C# syntax module based on the ANTLR grammar dated 02/07/2024 and available at:
-- |   https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/grammar

module Hydra.Csharp.Syntax where
import qualified Hydra.Core as Core
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
newtype Identifier =
  Identifier {
    unIdentifier :: String}
  deriving (Eq, Ord, Read, Show)
_Identifier = Core.Name "hydra.csharp.syntax.Identifier"
newtype Keyword =
  Keyword {
    unKeyword :: String}
  deriving (Eq, Ord, Read, Show)
_Keyword = Core.Name "hydra.csharp.syntax.Keyword"
data Literal =
  LiteralBoolean Bool |
  LiteralInteger IntegerLiteral |
  LiteralReal Double |
  LiteralCharacter String |
  LiteralString String |
  LiteralNull
  deriving (Eq, Ord, Read, Show)
_Literal = Core.Name "hydra.csharp.syntax.Literal"
_Literal_boolean = Core.Name "boolean"
_Literal_integer = Core.Name "integer"
_Literal_real = Core.Name "real"
_Literal_character = Core.Name "character"
_Literal_string = Core.Name "string"
_Literal_null = Core.Name "null"
data IntegerLiteral =
  IntegerLiteralDecimal String |
  IntegerLiteralHexadecimal String |
  IntegerLiteralBinary Integer
  deriving (Eq, Ord, Read, Show)
_IntegerLiteral = Core.Name "hydra.csharp.syntax.IntegerLiteral"
_IntegerLiteral_decimal = Core.Name "decimal"
_IntegerLiteral_hexadecimal = Core.Name "hexadecimal"
_IntegerLiteral_binary = Core.Name "binary"
newtype NamespaceName =
  NamespaceName {
    unNamespaceName :: NamespaceOrTypeName}
  deriving (Eq, Ord, Read, Show)
_NamespaceName = Core.Name "hydra.csharp.syntax.NamespaceName"
newtype TypeName =
  TypeName {
    unTypeName :: NamespaceOrTypeName}
  deriving (Eq, Ord, Read, Show)
_TypeName = Core.Name "hydra.csharp.syntax.TypeName"
data NamespaceOrTypeName =
  NamespaceOrTypeNameIdentifier IdentifierNamespaceOrTypeName |
  NamespaceOrTypeNameQualified QualifiedNamespaceOrTypeName |
  NamespaceOrTypeNameAlias QualifiedAliasMember
  deriving (Eq, Ord, Read, Show)
_NamespaceOrTypeName = Core.Name "hydra.csharp.syntax.NamespaceOrTypeName"
_NamespaceOrTypeName_identifier = Core.Name "identifier"
_NamespaceOrTypeName_qualified = Core.Name "qualified"
_NamespaceOrTypeName_alias = Core.Name "alias"
data IdentifierNamespaceOrTypeName =
  IdentifierNamespaceOrTypeName {
    identifierNamespaceOrTypeNameIdentifier :: Identifier,
    identifierNamespaceOrTypeNameArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_IdentifierNamespaceOrTypeName = Core.Name "hydra.csharp.syntax.IdentifierNamespaceOrTypeName"
_IdentifierNamespaceOrTypeName_identifier = Core.Name "identifier"
_IdentifierNamespaceOrTypeName_arguments = Core.Name "arguments"
data QualifiedNamespaceOrTypeName =
  QualifiedNamespaceOrTypeName {
    qualifiedNamespaceOrTypeNameNamespaceOrType :: NamespaceOrTypeName,
    qualifiedNamespaceOrTypeNameIdentifier :: Identifier,
    qualifiedNamespaceOrTypeNameArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_QualifiedNamespaceOrTypeName = Core.Name "hydra.csharp.syntax.QualifiedNamespaceOrTypeName"
_QualifiedNamespaceOrTypeName_namespaceOrType = Core.Name "namespaceOrType"
_QualifiedNamespaceOrTypeName_identifier = Core.Name "identifier"
_QualifiedNamespaceOrTypeName_arguments = Core.Name "arguments"
data Type =
  TypeReference ReferenceType |
  TypeValue ValueType |
  TypeParam TypeParameter |
  TypePointer PointerType
  deriving (Eq, Ord, Read, Show)
_Type = Core.Name "hydra.csharp.syntax.Type"
_Type_reference = Core.Name "reference"
_Type_value = Core.Name "value"
_Type_param = Core.Name "param"
_Type_pointer = Core.Name "pointer"
data ReferenceType =
  ReferenceTypeClass ClassType |
  ReferenceTypeInterface InterfaceType |
  ReferenceTypeArray ArrayType |
  ReferenceTypeDelegate DelegateType |
  ReferenceTypeDynamic
  deriving (Eq, Ord, Read, Show)
_ReferenceType = Core.Name "hydra.csharp.syntax.ReferenceType"
_ReferenceType_class = Core.Name "class"
_ReferenceType_interface = Core.Name "interface"
_ReferenceType_array = Core.Name "array"
_ReferenceType_delegate = Core.Name "delegate"
_ReferenceType_dynamic = Core.Name "dynamic"
data ClassType =
  ClassTypeTypeName TypeName |
  ClassTypeObject |
  ClassTypeString
  deriving (Eq, Ord, Read, Show)
_ClassType = Core.Name "hydra.csharp.syntax.ClassType"
_ClassType_typeName = Core.Name "typeName"
_ClassType_object = Core.Name "object"
_ClassType_string = Core.Name "string"
newtype InterfaceType =
  InterfaceType {
    unInterfaceType :: TypeName}
  deriving (Eq, Ord, Read, Show)
_InterfaceType = Core.Name "hydra.csharp.syntax.InterfaceType"
data ArrayType =
  ArrayType {
    arrayTypeType :: NonArrayType,
    arrayTypeRank :: [RankSpecifier]}
  deriving (Eq, Ord, Read, Show)
_ArrayType = Core.Name "hydra.csharp.syntax.ArrayType"
_ArrayType_type = Core.Name "type"
_ArrayType_rank = Core.Name "rank"
data NonArrayType =
  NonArrayTypeValue ValueType |
  NonArrayTypeClass ClassType |
  NonArrayTypeInterface InterfaceType |
  NonArrayTypeDelegate DelegateType |
  NonArrayTypeDynamic |
  NonArrayTypeParameter TypeParameter |
  NonArrayTypePointer PointerType
  deriving (Eq, Ord, Read, Show)
_NonArrayType = Core.Name "hydra.csharp.syntax.NonArrayType"
_NonArrayType_value = Core.Name "value"
_NonArrayType_class = Core.Name "class"
_NonArrayType_interface = Core.Name "interface"
_NonArrayType_delegate = Core.Name "delegate"
_NonArrayType_dynamic = Core.Name "dynamic"
_NonArrayType_parameter = Core.Name "parameter"
_NonArrayType_pointer = Core.Name "pointer"
newtype RankSpecifier =
  RankSpecifier {
    unRankSpecifier :: Int}
  deriving (Eq, Ord, Read, Show)
_RankSpecifier = Core.Name "hydra.csharp.syntax.RankSpecifier"
newtype DelegateType =
  DelegateType {
    unDelegateType :: TypeName}
  deriving (Eq, Ord, Read, Show)
_DelegateType = Core.Name "hydra.csharp.syntax.DelegateType"
data ValueType =
  ValueTypeNonNullable StructOrEnumType |
  ValueTypeNullable StructOrEnumType
  deriving (Eq, Ord, Read, Show)
_ValueType = Core.Name "hydra.csharp.syntax.ValueType"
_ValueType_nonNullable = Core.Name "nonNullable"
_ValueType_nullable = Core.Name "nullable"
data StructOrEnumType =
  StructOrEnumTypeStruct StructType |
  StructOrEnumTypeEnum EnumType
  deriving (Eq, Ord, Read, Show)
_StructOrEnumType = Core.Name "hydra.csharp.syntax.StructOrEnumType"
_StructOrEnumType_struct = Core.Name "struct"
_StructOrEnumType_enum = Core.Name "enum"
data StructType =
  StructTypeTypeName TypeName |
  StructTypeSimple SimpleType |
  StructTypeTuple TupleType
  deriving (Eq, Ord, Read, Show)
_StructType = Core.Name "hydra.csharp.syntax.StructType"
_StructType_typeName = Core.Name "typeName"
_StructType_simple = Core.Name "simple"
_StructType_tuple = Core.Name "tuple"
data SimpleType =
  SimpleTypeNumeric NumericType |
  SimpleTypeBool
  deriving (Eq, Ord, Read, Show)
_SimpleType = Core.Name "hydra.csharp.syntax.SimpleType"
_SimpleType_numeric = Core.Name "numeric"
_SimpleType_bool = Core.Name "bool"
data NumericType =
  NumericTypeIntegral IntegralType |
  NumericTypeFloatingPoint FloatingPointType |
  NumericTypeDecimal
  deriving (Eq, Ord, Read, Show)
_NumericType = Core.Name "hydra.csharp.syntax.NumericType"
_NumericType_integral = Core.Name "integral"
_NumericType_floatingPoint = Core.Name "floatingPoint"
_NumericType_decimal = Core.Name "decimal"
data IntegralType =
  IntegralTypeSbyte |
  IntegralTypeByte |
  IntegralTypeShort |
  IntegralTypeUshort |
  IntegralTypeInt |
  IntegralTypeUint |
  IntegralTypeLong |
  IntegralTypeUlong |
  IntegralTypeChar
  deriving (Eq, Ord, Read, Show)
_IntegralType = Core.Name "hydra.csharp.syntax.IntegralType"
_IntegralType_sbyte = Core.Name "sbyte"
_IntegralType_byte = Core.Name "byte"
_IntegralType_short = Core.Name "short"
_IntegralType_ushort = Core.Name "ushort"
_IntegralType_int = Core.Name "int"
_IntegralType_uint = Core.Name "uint"
_IntegralType_long = Core.Name "long"
_IntegralType_ulong = Core.Name "ulong"
_IntegralType_char = Core.Name "char"
data FloatingPointType =
  FloatingPointTypeFloat |
  FloatingPointTypeDouble
  deriving (Eq, Ord, Read, Show)
_FloatingPointType = Core.Name "hydra.csharp.syntax.FloatingPointType"
_FloatingPointType_float = Core.Name "float"
_FloatingPointType_double = Core.Name "double"
newtype TupleType =
  TupleType {
    unTupleType :: [TupleTypeElement]}
  deriving (Eq, Ord, Read, Show)
_TupleType = Core.Name "hydra.csharp.syntax.TupleType"
data TupleTypeElement =
  TupleTypeElement {
    tupleTypeElementType :: Type,
    tupleTypeElementIdentifier :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)
_TupleTypeElement = Core.Name "hydra.csharp.syntax.TupleTypeElement"
_TupleTypeElement_type = Core.Name "type"
_TupleTypeElement_identifier = Core.Name "identifier"
newtype EnumType =
  EnumType {
    unEnumType :: TypeName}
  deriving (Eq, Ord, Read, Show)
_EnumType = Core.Name "hydra.csharp.syntax.EnumType"
newtype TypeArgumentList =
  TypeArgumentList {
    unTypeArgumentList :: [Type]}
  deriving (Eq, Ord, Read, Show)
_TypeArgumentList = Core.Name "hydra.csharp.syntax.TypeArgumentList"
newtype TypeParameter =
  TypeParameter {
    unTypeParameter :: Identifier}
  deriving (Eq, Ord, Read, Show)
_TypeParameter = Core.Name "hydra.csharp.syntax.TypeParameter"
data UnmanagedType =
  UnmanagedTypeValue ValueType |
  UnmanagedTypePointer PointerType
  deriving (Eq, Ord, Read, Show)
_UnmanagedType = Core.Name "hydra.csharp.syntax.UnmanagedType"
_UnmanagedType_value = Core.Name "value"
_UnmanagedType_pointer = Core.Name "pointer"
newtype VariableReference =
  VariableReference {
    unVariableReference :: Expression}
  deriving (Eq, Ord, Read, Show)
_VariableReference = Core.Name "hydra.csharp.syntax.VariableReference"
data Pattern =
  PatternDeclaration DeclarationPattern |
  PatternConstant Expression |
  PatternVar Designation
  deriving (Eq, Ord, Read, Show)
_Pattern = Core.Name "hydra.csharp.syntax.Pattern"
_Pattern_declaration = Core.Name "declaration"
_Pattern_constant = Core.Name "constant"
_Pattern_var = Core.Name "var"
data DeclarationPattern =
  DeclarationPattern {
    declarationPatternType :: Type,
    declarationPatternDesignation :: Designation}
  deriving (Eq, Ord, Read, Show)
_DeclarationPattern = Core.Name "hydra.csharp.syntax.DeclarationPattern"
_DeclarationPattern_type = Core.Name "type"
_DeclarationPattern_designation = Core.Name "designation"
newtype Designation =
  Designation {
    unDesignation :: Identifier}
  deriving (Eq, Ord, Read, Show)
_Designation = Core.Name "hydra.csharp.syntax.Designation"
newtype ArgumentList =
  ArgumentList {
    unArgumentList :: [Argument]}
  deriving (Eq, Ord, Read, Show)
_ArgumentList = Core.Name "hydra.csharp.syntax.ArgumentList"
data Argument =
  Argument {
    argumentName :: (Maybe Identifier),
    argumentValue :: ArgumentValue}
  deriving (Eq, Ord, Read, Show)
_Argument = Core.Name "hydra.csharp.syntax.Argument"
_Argument_name = Core.Name "name"
_Argument_value = Core.Name "value"
data ArgumentValue =
  ArgumentValueExpression Expression |
  ArgumentValueIn VariableReference |
  ArgumentValueRef VariableReference |
  ArgumentValueOut VariableReference
  deriving (Eq, Ord, Read, Show)
_ArgumentValue = Core.Name "hydra.csharp.syntax.ArgumentValue"
_ArgumentValue_expression = Core.Name "expression"
_ArgumentValue_in = Core.Name "in"
_ArgumentValue_ref = Core.Name "ref"
_ArgumentValue_out = Core.Name "out"
data PrimaryExpression =
  PrimaryExpressionNoArray PrimaryNoArrayCreationExpression |
  PrimaryExpressionArray ArrayCreationExpression
  deriving (Eq, Ord, Read, Show)
_PrimaryExpression = Core.Name "hydra.csharp.syntax.PrimaryExpression"
_PrimaryExpression_noArray = Core.Name "noArray"
_PrimaryExpression_array = Core.Name "array"
data PrimaryNoArrayCreationExpression =
  PrimaryNoArrayCreationExpressionLiteral Literal |
  PrimaryNoArrayCreationExpressionInterpolatedString InterpolatedStringExpression |
  PrimaryNoArrayCreationExpressionSimpleName SimpleName |
  PrimaryNoArrayCreationExpressionParenthesized Expression |
  PrimaryNoArrayCreationExpressionTuple TupleExpression |
  PrimaryNoArrayCreationExpressionMemberAccess MemberAccess |
  PrimaryNoArrayCreationExpressionNullConditionalMemberAccess NullConditionalMemberAccess |
  PrimaryNoArrayCreationExpressionInvocation InvocationExpression |
  PrimaryNoArrayCreationExpressionElementAccess ElementAccess |
  PrimaryNoArrayCreationExpressionNullConditionalElementAccess NullConditionalElementAccess |
  PrimaryNoArrayCreationExpressionThisAccess |
  PrimaryNoArrayCreationExpressionBaseAccess BaseAccess |
  PrimaryNoArrayCreationExpressionPostIncrement PrimaryExpression |
  PrimaryNoArrayCreationExpressionPostDecrement PrimaryExpression |
  PrimaryNoArrayCreationExpressionObjectCreation ObjectCreationExpression |
  PrimaryNoArrayCreationExpressionDelegateCreation DelegateCreationExpression |
  PrimaryNoArrayCreationExpressionAnonymousObjectCreation (Maybe MemberDeclaratorList) |
  PrimaryNoArrayCreationExpressionTypeof TypeofExpression |
  PrimaryNoArrayCreationExpressionSizeof UnmanagedType |
  PrimaryNoArrayCreationExpressionChecked Expression |
  PrimaryNoArrayCreationExpressionUnchecked Expression |
  PrimaryNoArrayCreationExpressionDefaultValue DefaultValueExpression |
  PrimaryNoArrayCreationExpressionNameof NamedEntity |
  PrimaryNoArrayCreationExpressionAnonymousMethod AnonymousMethodExpression |
  PrimaryNoArrayCreationExpressionPointerMemberAccess PointerMemberAccess |
  PrimaryNoArrayCreationExpressionPointerElementAccess PointerElementAccess |
  PrimaryNoArrayCreationExpressionStackalloc StackallocExpression
  deriving (Eq, Ord, Read, Show)
_PrimaryNoArrayCreationExpression = Core.Name "hydra.csharp.syntax.PrimaryNoArrayCreationExpression"
_PrimaryNoArrayCreationExpression_literal = Core.Name "literal"
_PrimaryNoArrayCreationExpression_interpolatedString = Core.Name "interpolatedString"
_PrimaryNoArrayCreationExpression_simpleName = Core.Name "simpleName"
_PrimaryNoArrayCreationExpression_parenthesized = Core.Name "parenthesized"
_PrimaryNoArrayCreationExpression_tuple = Core.Name "tuple"
_PrimaryNoArrayCreationExpression_memberAccess = Core.Name "memberAccess"
_PrimaryNoArrayCreationExpression_nullConditionalMemberAccess = Core.Name "nullConditionalMemberAccess"
_PrimaryNoArrayCreationExpression_invocation = Core.Name "invocation"
_PrimaryNoArrayCreationExpression_elementAccess = Core.Name "elementAccess"
_PrimaryNoArrayCreationExpression_nullConditionalElementAccess = Core.Name "nullConditionalElementAccess"
_PrimaryNoArrayCreationExpression_thisAccess = Core.Name "thisAccess"
_PrimaryNoArrayCreationExpression_baseAccess = Core.Name "baseAccess"
_PrimaryNoArrayCreationExpression_postIncrement = Core.Name "postIncrement"
_PrimaryNoArrayCreationExpression_postDecrement = Core.Name "postDecrement"
_PrimaryNoArrayCreationExpression_objectCreation = Core.Name "objectCreation"
_PrimaryNoArrayCreationExpression_delegateCreation = Core.Name "delegateCreation"
_PrimaryNoArrayCreationExpression_anonymousObjectCreation = Core.Name "anonymousObjectCreation"
_PrimaryNoArrayCreationExpression_typeof = Core.Name "typeof"
_PrimaryNoArrayCreationExpression_sizeof = Core.Name "sizeof"
_PrimaryNoArrayCreationExpression_checked = Core.Name "checked"
_PrimaryNoArrayCreationExpression_unchecked = Core.Name "unchecked"
_PrimaryNoArrayCreationExpression_defaultValue = Core.Name "defaultValue"
_PrimaryNoArrayCreationExpression_nameof = Core.Name "nameof"
_PrimaryNoArrayCreationExpression_anonymousMethod = Core.Name "anonymousMethod"
_PrimaryNoArrayCreationExpression_pointerMemberAccess = Core.Name "pointerMemberAccess"
_PrimaryNoArrayCreationExpression_pointerElementAccess = Core.Name "pointerElementAccess"
_PrimaryNoArrayCreationExpression_stackalloc = Core.Name "stackalloc"
data InterpolatedStringExpression =
  InterpolatedStringExpressionRegular InterpolatedRegularStringExpression |
  InterpolatedStringExpressionVerbatim InterpolatedVerbatimStringExpression
  deriving (Eq, Ord, Read, Show)
_InterpolatedStringExpression = Core.Name "hydra.csharp.syntax.InterpolatedStringExpression"
_InterpolatedStringExpression_regular = Core.Name "regular"
_InterpolatedStringExpression_verbatim = Core.Name "verbatim"
newtype InterpolatedRegularStringExpression =
  InterpolatedRegularStringExpression {
    unInterpolatedRegularStringExpression :: String}
  deriving (Eq, Ord, Read, Show)
_InterpolatedRegularStringExpression = Core.Name "hydra.csharp.syntax.InterpolatedRegularStringExpression"
data RegularInterpolation =
  RegularInterpolation {
    regularInterpolationExpression :: Expression,
    regularInterpolationWidth :: (Maybe Expression),
    regularInterpolationFormat :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)
_RegularInterpolation = Core.Name "hydra.csharp.syntax.RegularInterpolation"
_RegularInterpolation_expression = Core.Name "expression"
_RegularInterpolation_width = Core.Name "width"
_RegularInterpolation_format = Core.Name "format"
newtype InterpolatedVerbatimStringExpression =
  InterpolatedVerbatimStringExpression {
    unInterpolatedVerbatimStringExpression :: String}
  deriving (Eq, Ord, Read, Show)
_InterpolatedVerbatimStringExpression = Core.Name "hydra.csharp.syntax.InterpolatedVerbatimStringExpression"
data VerbatimInterpolation =
  VerbatimInterpolation {
    verbatimInterpolationExpression :: Expression,
    verbatimInterpolationWidth :: (Maybe ConstantExpression),
    verbatimInterpolationFormat :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)
_VerbatimInterpolation = Core.Name "hydra.csharp.syntax.VerbatimInterpolation"
_VerbatimInterpolation_expression = Core.Name "expression"
_VerbatimInterpolation_width = Core.Name "width"
_VerbatimInterpolation_format = Core.Name "format"
data SimpleName =
  SimpleName {
    simpleNameIdentifier :: Identifier,
    simpleNameTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_SimpleName = Core.Name "hydra.csharp.syntax.SimpleName"
_SimpleName_identifier = Core.Name "identifier"
_SimpleName_typeArguments = Core.Name "typeArguments"
data TupleExpression =
  TupleExpressionElements [TupleElement] |
  TupleExpressionDeconstruction DeconstructionTuple
  deriving (Eq, Ord, Read, Show)
_TupleExpression = Core.Name "hydra.csharp.syntax.TupleExpression"
_TupleExpression_elements = Core.Name "elements"
_TupleExpression_deconstruction = Core.Name "deconstruction"
data TupleElement =
  TupleElement {
    tupleElementName :: (Maybe Identifier),
    tupleElementExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_TupleElement = Core.Name "hydra.csharp.syntax.TupleElement"
_TupleElement_name = Core.Name "name"
_TupleElement_expression = Core.Name "expression"
newtype DeconstructionTuple =
  DeconstructionTuple {
    unDeconstructionTuple :: [DeconstructionElement]}
  deriving (Eq, Ord, Read, Show)
_DeconstructionTuple = Core.Name "hydra.csharp.syntax.DeconstructionTuple"
data DeconstructionElement =
  DeconstructionElementTuple DeconstructionTuple |
  DeconstructionElementIdentifier Identifier
  deriving (Eq, Ord, Read, Show)
_DeconstructionElement = Core.Name "hydra.csharp.syntax.DeconstructionElement"
_DeconstructionElement_tuple = Core.Name "tuple"
_DeconstructionElement_identifier = Core.Name "identifier"
data MemberAccess =
  MemberAccess {
    memberAccessHead :: MemberAccessHead,
    memberAccessIdentifier :: Identifier,
    memberAccessTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_MemberAccess = Core.Name "hydra.csharp.syntax.MemberAccess"
_MemberAccess_head = Core.Name "head"
_MemberAccess_identifier = Core.Name "identifier"
_MemberAccess_typeArguments = Core.Name "typeArguments"
data MemberAccessHead =
  MemberAccessHeadPrimary PrimaryExpression |
  MemberAccessHeadPredefined PredefinedType |
  MemberAccessHeadQualifiedAlias QualifiedAliasMember
  deriving (Eq, Ord, Read, Show)
_MemberAccessHead = Core.Name "hydra.csharp.syntax.MemberAccessHead"
_MemberAccessHead_primary = Core.Name "primary"
_MemberAccessHead_predefined = Core.Name "predefined"
_MemberAccessHead_qualifiedAlias = Core.Name "qualifiedAlias"
data PredefinedType =
  PredefinedTypeBool |
  PredefinedTypeByte |
  PredefinedTypeChar |
  PredefinedTypeDecimal |
  PredefinedTypeDouble |
  PredefinedTypeFloat |
  PredefinedTypeInt |
  PredefinedTypeLong |
  PredefinedTypeObject |
  PredefinedTypeSbyte |
  PredefinedTypeShort |
  PredefinedTypeString |
  PredefinedTypeUint |
  PredefinedTypeUlong |
  PredefinedTypeUshort
  deriving (Eq, Ord, Read, Show)
_PredefinedType = Core.Name "hydra.csharp.syntax.PredefinedType"
_PredefinedType_bool = Core.Name "bool"
_PredefinedType_byte = Core.Name "byte"
_PredefinedType_char = Core.Name "char"
_PredefinedType_decimal = Core.Name "decimal"
_PredefinedType_double = Core.Name "double"
_PredefinedType_float = Core.Name "float"
_PredefinedType_int = Core.Name "int"
_PredefinedType_long = Core.Name "long"
_PredefinedType_object = Core.Name "object"
_PredefinedType_sbyte = Core.Name "sbyte"
_PredefinedType_short = Core.Name "short"
_PredefinedType_string = Core.Name "string"
_PredefinedType_uint = Core.Name "uint"
_PredefinedType_ulong = Core.Name "ulong"
_PredefinedType_ushort = Core.Name "ushort"
data NullConditionalMemberAccess =
  NullConditionalMemberAccess {
    nullConditionalMemberAccessExpression :: PrimaryExpression,
    nullConditionalMemberAccessIdentifier :: Identifier,
    nullConditionalMemberAccessTypeArguments :: (Maybe TypeArgumentList),
    nullConditionalMemberAccessDependentAccess :: [DependentAccess]}
  deriving (Eq, Ord, Read, Show)
_NullConditionalMemberAccess = Core.Name "hydra.csharp.syntax.NullConditionalMemberAccess"
_NullConditionalMemberAccess_expression = Core.Name "expression"
_NullConditionalMemberAccess_identifier = Core.Name "identifier"
_NullConditionalMemberAccess_typeArguments = Core.Name "typeArguments"
_NullConditionalMemberAccess_dependentAccess = Core.Name "dependentAccess"
data DependentAccess =
  DependentAccessMemberAccess DependentAccessForMember |
  DependentAccessElementAccess ArgumentList |
  DependentAccessInvocation (Maybe ArgumentList)
  deriving (Eq, Ord, Read, Show)
_DependentAccess = Core.Name "hydra.csharp.syntax.DependentAccess"
_DependentAccess_memberAccess = Core.Name "memberAccess"
_DependentAccess_elementAccess = Core.Name "elementAccess"
_DependentAccess_invocation = Core.Name "invocation"
data DependentAccessForMember =
  DependentAccessForMember {
    dependentAccessForMemberIdentifier :: Identifier,
    dependentAccessForMemberTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_DependentAccessForMember = Core.Name "hydra.csharp.syntax.DependentAccessForMember"
_DependentAccessForMember_identifier = Core.Name "identifier"
_DependentAccessForMember_typeArguments = Core.Name "typeArguments"
data NullConditionalProjectionInitializer =
  NullConditionalProjectionInitializer {
    nullConditionalProjectionInitializerExpression :: PrimaryExpression,
    nullConditionalProjectionInitializerIdentifier :: Identifier,
    nullConditionalProjectionInitializerTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_NullConditionalProjectionInitializer = Core.Name "hydra.csharp.syntax.NullConditionalProjectionInitializer"
_NullConditionalProjectionInitializer_expression = Core.Name "expression"
_NullConditionalProjectionInitializer_identifier = Core.Name "identifier"
_NullConditionalProjectionInitializer_typeArguments = Core.Name "typeArguments"
data InvocationExpression =
  InvocationExpression {
    invocationExpressionExpression :: PrimaryExpression,
    invocationExpressionArguments :: (Maybe ArgumentList)}
  deriving (Eq, Ord, Read, Show)
_InvocationExpression = Core.Name "hydra.csharp.syntax.InvocationExpression"
_InvocationExpression_expression = Core.Name "expression"
_InvocationExpression_arguments = Core.Name "arguments"
data NullConditionalInvocationExpression =
  NullConditionalInvocationExpression {
    nullConditionalInvocationExpressionHead :: NullConditionalInvocationExpressionHead,
    nullConditionalInvocationExpressionArguments :: (Maybe ArgumentList)}
  deriving (Eq, Ord, Read, Show)
_NullConditionalInvocationExpression = Core.Name "hydra.csharp.syntax.NullConditionalInvocationExpression"
_NullConditionalInvocationExpression_head = Core.Name "head"
_NullConditionalInvocationExpression_arguments = Core.Name "arguments"
data NullConditionalInvocationExpressionHead =
  NullConditionalInvocationExpressionHeadMember NullConditionalMemberAccess |
  NullConditionalInvocationExpressionHeadElement NullConditionalElementAccess
  deriving (Eq, Ord, Read, Show)
_NullConditionalInvocationExpressionHead = Core.Name "hydra.csharp.syntax.NullConditionalInvocationExpressionHead"
_NullConditionalInvocationExpressionHead_member = Core.Name "member"
_NullConditionalInvocationExpressionHead_element = Core.Name "element"
data ElementAccess =
  ElementAccess {
    elementAccessExpression :: PrimaryNoArrayCreationExpression,
    elementAccessArguments :: ArgumentList}
  deriving (Eq, Ord, Read, Show)
_ElementAccess = Core.Name "hydra.csharp.syntax.ElementAccess"
_ElementAccess_expression = Core.Name "expression"
_ElementAccess_arguments = Core.Name "arguments"
data NullConditionalElementAccess =
  NullConditionalElementAccess {
    nullConditionalElementAccessExpression :: PrimaryNoArrayCreationExpression,
    nullConditionalElementAccessArguments :: ArgumentList,
    nullConditionalElementAccessDependentAccess :: [DependentAccess]}
  deriving (Eq, Ord, Read, Show)
_NullConditionalElementAccess = Core.Name "hydra.csharp.syntax.NullConditionalElementAccess"
_NullConditionalElementAccess_expression = Core.Name "expression"
_NullConditionalElementAccess_arguments = Core.Name "arguments"
_NullConditionalElementAccess_dependentAccess = Core.Name "dependentAccess"
data BaseAccess =
  BaseAccessIdentifier BaseAccessWithIdentifier |
  BaseAccessArguments ArgumentList
  deriving (Eq, Ord, Read, Show)
_BaseAccess = Core.Name "hydra.csharp.syntax.BaseAccess"
_BaseAccess_identifier = Core.Name "identifier"
_BaseAccess_arguments = Core.Name "arguments"
data BaseAccessWithIdentifier =
  BaseAccessWithIdentifier {
    baseAccessWithIdentifierIdentifier :: Identifier,
    baseAccessWithIdentifierTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_BaseAccessWithIdentifier = Core.Name "hydra.csharp.syntax.BaseAccessWithIdentifier"
_BaseAccessWithIdentifier_identifier = Core.Name "identifier"
_BaseAccessWithIdentifier_typeArguments = Core.Name "typeArguments"
data ObjectCreationExpression =
  ObjectCreationExpression {
    objectCreationExpressionType :: Type,
    objectCreationExpressionArguments :: (Maybe ArgumentList),
    objectCreationExpressionInitializer :: (Maybe ObjectOrCollectionInitializer)}
  deriving (Eq, Ord, Read, Show)
_ObjectCreationExpression = Core.Name "hydra.csharp.syntax.ObjectCreationExpression"
_ObjectCreationExpression_type = Core.Name "type"
_ObjectCreationExpression_arguments = Core.Name "arguments"
_ObjectCreationExpression_initializer = Core.Name "initializer"
data ObjectOrCollectionInitializer =
  ObjectOrCollectionInitializerObject [MemberInitializer] |
  ObjectOrCollectionInitializerCollection [ElementInitializer]
  deriving (Eq, Ord, Read, Show)
_ObjectOrCollectionInitializer = Core.Name "hydra.csharp.syntax.ObjectOrCollectionInitializer"
_ObjectOrCollectionInitializer_object = Core.Name "object"
_ObjectOrCollectionInitializer_collection = Core.Name "collection"
data MemberInitializer =
  MemberInitializer {
    memberInitializerTarget :: InitializerTarget,
    memberInitializerValue :: InitializerValue}
  deriving (Eq, Ord, Read, Show)
_MemberInitializer = Core.Name "hydra.csharp.syntax.MemberInitializer"
_MemberInitializer_target = Core.Name "target"
_MemberInitializer_value = Core.Name "value"
data InitializerTarget =
  InitializerTargetIdentifier Identifier |
  InitializerTargetArguments ArgumentList
  deriving (Eq, Ord, Read, Show)
_InitializerTarget = Core.Name "hydra.csharp.syntax.InitializerTarget"
_InitializerTarget_identifier = Core.Name "identifier"
_InitializerTarget_arguments = Core.Name "arguments"
data InitializerValue =
  InitializerValueExpression Expression |
  InitializerValueObjectOrCollection ObjectOrCollectionInitializer
  deriving (Eq, Ord, Read, Show)
_InitializerValue = Core.Name "hydra.csharp.syntax.InitializerValue"
_InitializerValue_expression = Core.Name "expression"
_InitializerValue_objectOrCollection = Core.Name "objectOrCollection"
data ElementInitializer =
  ElementInitializerSingle NonAssignmentExpression |
  ElementInitializerList ExpressionList
  deriving (Eq, Ord, Read, Show)
_ElementInitializer = Core.Name "hydra.csharp.syntax.ElementInitializer"
_ElementInitializer_single = Core.Name "single"
_ElementInitializer_list = Core.Name "list"
newtype ExpressionList =
  ExpressionList {
    unExpressionList :: [Expression]}
  deriving (Eq, Ord, Read, Show)
_ExpressionList = Core.Name "hydra.csharp.syntax.ExpressionList"
data ArrayCreationExpression =
  ArrayCreationExpressionNonArrayType NonArrayTypeArrayCreationExpression |
  ArrayCreationExpressionArrayType ArrayTypeArrayCreationExpression |
  ArrayCreationExpressionRankSpecifier RankSpecifierArrayCreationExpression
  deriving (Eq, Ord, Read, Show)
_ArrayCreationExpression = Core.Name "hydra.csharp.syntax.ArrayCreationExpression"
_ArrayCreationExpression_nonArrayType = Core.Name "nonArrayType"
_ArrayCreationExpression_arrayType = Core.Name "arrayType"
_ArrayCreationExpression_rankSpecifier = Core.Name "rankSpecifier"
data NonArrayTypeArrayCreationExpression =
  NonArrayTypeArrayCreationExpression {
    nonArrayTypeArrayCreationExpressionType :: NonArrayType,
    nonArrayTypeArrayCreationExpressionExpressions :: ExpressionList,
    nonArrayTypeArrayCreationExpressionRankSpecifiers :: [RankSpecifier],
    nonArrayTypeArrayCreationExpressionInitializer :: (Maybe ArrayInitializer)}
  deriving (Eq, Ord, Read, Show)
_NonArrayTypeArrayCreationExpression = Core.Name "hydra.csharp.syntax.NonArrayTypeArrayCreationExpression"
_NonArrayTypeArrayCreationExpression_type = Core.Name "type"
_NonArrayTypeArrayCreationExpression_expressions = Core.Name "expressions"
_NonArrayTypeArrayCreationExpression_rankSpecifiers = Core.Name "rankSpecifiers"
_NonArrayTypeArrayCreationExpression_initializer = Core.Name "initializer"
data ArrayTypeArrayCreationExpression =
  ArrayTypeArrayCreationExpression {
    arrayTypeArrayCreationExpressionType :: ArrayType,
    arrayTypeArrayCreationExpressionInitializer :: ArrayInitializer}
  deriving (Eq, Ord, Read, Show)
_ArrayTypeArrayCreationExpression = Core.Name "hydra.csharp.syntax.ArrayTypeArrayCreationExpression"
_ArrayTypeArrayCreationExpression_type = Core.Name "type"
_ArrayTypeArrayCreationExpression_initializer = Core.Name "initializer"
data RankSpecifierArrayCreationExpression =
  RankSpecifierArrayCreationExpression {
    rankSpecifierArrayCreationExpressionRankSpecifier :: RankSpecifier,
    rankSpecifierArrayCreationExpressionInitializer :: ArrayInitializer}
  deriving (Eq, Ord, Read, Show)
_RankSpecifierArrayCreationExpression = Core.Name "hydra.csharp.syntax.RankSpecifierArrayCreationExpression"
_RankSpecifierArrayCreationExpression_rankSpecifier = Core.Name "rankSpecifier"
_RankSpecifierArrayCreationExpression_initializer = Core.Name "initializer"
data DelegateCreationExpression =
  DelegateCreationExpression {
    delegateCreationExpressionType :: DelegateType,
    delegateCreationExpressionExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_DelegateCreationExpression = Core.Name "hydra.csharp.syntax.DelegateCreationExpression"
_DelegateCreationExpression_type = Core.Name "type"
_DelegateCreationExpression_expression = Core.Name "expression"
newtype MemberDeclaratorList =
  MemberDeclaratorList {
    unMemberDeclaratorList :: [MemberDeclarator]}
  deriving (Eq, Ord, Read, Show)
_MemberDeclaratorList = Core.Name "hydra.csharp.syntax.MemberDeclaratorList"
data MemberDeclarator =
  MemberDeclaratorName SimpleName |
  MemberDeclaratorMemberAccess MemberAccess |
  MemberDeclaratorNullConditionalProjectionInitializer NullConditionalProjectionInitializer |
  MemberDeclaratorBaseAccess BaseAccess |
  MemberDeclaratorAssignment AssignmentMemberDeclarator
  deriving (Eq, Ord, Read, Show)
_MemberDeclarator = Core.Name "hydra.csharp.syntax.MemberDeclarator"
_MemberDeclarator_name = Core.Name "name"
_MemberDeclarator_memberAccess = Core.Name "memberAccess"
_MemberDeclarator_nullConditionalProjectionInitializer = Core.Name "nullConditionalProjectionInitializer"
_MemberDeclarator_baseAccess = Core.Name "baseAccess"
_MemberDeclarator_assignment = Core.Name "assignment"
data AssignmentMemberDeclarator =
  AssignmentMemberDeclarator {
    assignmentMemberDeclaratorIdentifier :: Identifier,
    assignmentMemberDeclaratorExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_AssignmentMemberDeclarator = Core.Name "hydra.csharp.syntax.AssignmentMemberDeclarator"
_AssignmentMemberDeclarator_identifier = Core.Name "identifier"
_AssignmentMemberDeclarator_expression = Core.Name "expression"
data TypeofExpression =
  TypeofExpressionType Type |
  TypeofExpressionUnboundTypeName UnboundTypeName |
  TypeofExpressionVoid
  deriving (Eq, Ord, Read, Show)
_TypeofExpression = Core.Name "hydra.csharp.syntax.TypeofExpression"
_TypeofExpression_type = Core.Name "type"
_TypeofExpression_unboundTypeName = Core.Name "unboundTypeName"
_TypeofExpression_void = Core.Name "void"
newtype UnboundTypeName =
  UnboundTypeName {
    unUnboundTypeName :: [UnboundTypeNamePart]}
  deriving (Eq, Ord, Read, Show)
_UnboundTypeName = Core.Name "hydra.csharp.syntax.UnboundTypeName"
data UnboundTypeNamePart =
  UnboundTypeNamePart {
    unboundTypeNamePartIdentifier :: Identifier,
    unboundTypeNamePartAliased :: Bool,
    unboundTypeNamePartDimension :: (Maybe Int)}
  deriving (Eq, Ord, Read, Show)
_UnboundTypeNamePart = Core.Name "hydra.csharp.syntax.UnboundTypeNamePart"
_UnboundTypeNamePart_identifier = Core.Name "identifier"
_UnboundTypeNamePart_aliased = Core.Name "aliased"
_UnboundTypeNamePart_dimension = Core.Name "dimension"
data DefaultValueExpression =
  DefaultValueExpressionExplicitlyTyped Type |
  DefaultValueExpressionDefaultLiteral
  deriving (Eq, Ord, Read, Show)
_DefaultValueExpression = Core.Name "hydra.csharp.syntax.DefaultValueExpression"
_DefaultValueExpression_explicitlyTyped = Core.Name "explicitlyTyped"
_DefaultValueExpression_defaultLiteral = Core.Name "defaultLiteral"
data StackallocExpression =
  StackallocExpression {
    stackallocExpressionType :: (Maybe UnmanagedType),
    stackallocExpressionExpression :: (Maybe ConstantExpression),
    stackallocExpressionInitializer :: [Expression]}
  deriving (Eq, Ord, Read, Show)
_StackallocExpression = Core.Name "hydra.csharp.syntax.StackallocExpression"
_StackallocExpression_type = Core.Name "type"
_StackallocExpression_expression = Core.Name "expression"
_StackallocExpression_initializer = Core.Name "initializer"
data NamedEntity =
  NamedEntity {
    namedEntityTarget :: NamedEntityTarget,
    namedEntityParts :: [NamedEntityPart]}
  deriving (Eq, Ord, Read, Show)
_NamedEntity = Core.Name "hydra.csharp.syntax.NamedEntity"
_NamedEntity_target = Core.Name "target"
_NamedEntity_parts = Core.Name "parts"
data NamedEntityPart =
  NamedEntityPart {
    namedEntityPartIdentifier :: Identifier,
    namedEntityPartTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_NamedEntityPart = Core.Name "hydra.csharp.syntax.NamedEntityPart"
_NamedEntityPart_identifier = Core.Name "identifier"
_NamedEntityPart_typeArguments = Core.Name "typeArguments"
data NamedEntityTarget =
  NamedEntityTargetName SimpleName |
  NamedEntityTargetThis |
  NamedEntityTargetBase |
  NamedEntityTargetPredefinedType PredefinedType |
  NamedEntityTargetQualifiedAliasMember QualifiedAliasMember
  deriving (Eq, Ord, Read, Show)
_NamedEntityTarget = Core.Name "hydra.csharp.syntax.NamedEntityTarget"
_NamedEntityTarget_name = Core.Name "name"
_NamedEntityTarget_this = Core.Name "this"
_NamedEntityTarget_base = Core.Name "base"
_NamedEntityTarget_predefinedType = Core.Name "predefinedType"
_NamedEntityTarget_qualifiedAliasMember = Core.Name "qualifiedAliasMember"
data UnaryExpression =
  UnaryExpressionPrimary PrimaryExpression |
  UnaryExpressionPlus UnaryExpression |
  UnaryExpressionMinus UnaryExpression |
  UnaryExpressionNot UnaryExpression |
  UnaryExpressionBitwiseComplement UnaryExpression |
  UnaryExpressionPreIncrement UnaryExpression |
  UnaryExpressionPreDecrement UnaryExpression |
  UnaryExpressionCast CastExpression |
  UnaryExpressionAwait UnaryExpression |
  UnaryExpressionPointerIndirection UnaryExpression |
  UnaryExpressionAddressOf UnaryExpression
  deriving (Eq, Ord, Read, Show)
_UnaryExpression = Core.Name "hydra.csharp.syntax.UnaryExpression"
_UnaryExpression_primary = Core.Name "primary"
_UnaryExpression_plus = Core.Name "plus"
_UnaryExpression_minus = Core.Name "minus"
_UnaryExpression_not = Core.Name "not"
_UnaryExpression_bitwiseComplement = Core.Name "bitwiseComplement"
_UnaryExpression_preIncrement = Core.Name "preIncrement"
_UnaryExpression_preDecrement = Core.Name "preDecrement"
_UnaryExpression_cast = Core.Name "cast"
_UnaryExpression_await = Core.Name "await"
_UnaryExpression_pointerIndirection = Core.Name "pointerIndirection"
_UnaryExpression_addressOf = Core.Name "addressOf"
data CastExpression =
  CastExpression {
    castExpressionType :: Type,
    castExpressionExpression :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)
_CastExpression = Core.Name "hydra.csharp.syntax.CastExpression"
_CastExpression_type = Core.Name "type"
_CastExpression_expression = Core.Name "expression"
data MultiplicativeExpression =
  MultiplicativeExpressionSimple UnaryExpression |
  MultiplicativeExpressionBinary BinaryMultiplicativeExpression
  deriving (Eq, Ord, Read, Show)
_MultiplicativeExpression = Core.Name "hydra.csharp.syntax.MultiplicativeExpression"
_MultiplicativeExpression_simple = Core.Name "simple"
_MultiplicativeExpression_binary = Core.Name "binary"
data BinaryMultiplicativeExpression =
  BinaryMultiplicativeExpression {
    binaryMultiplicativeExpressionLeft :: MultiplicativeExpression,
    binaryMultiplicativeExpressionOperator :: MultiplicativeOperator,
    binaryMultiplicativeExpressionRight :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryMultiplicativeExpression = Core.Name "hydra.csharp.syntax.BinaryMultiplicativeExpression"
_BinaryMultiplicativeExpression_left = Core.Name "left"
_BinaryMultiplicativeExpression_operator = Core.Name "operator"
_BinaryMultiplicativeExpression_right = Core.Name "right"
data MultiplicativeOperator =
  MultiplicativeOperatorTimes |
  MultiplicativeOperatorDivide |
  MultiplicativeOperatorModulo
  deriving (Eq, Ord, Read, Show)
_MultiplicativeOperator = Core.Name "hydra.csharp.syntax.MultiplicativeOperator"
_MultiplicativeOperator_times = Core.Name "times"
_MultiplicativeOperator_divide = Core.Name "divide"
_MultiplicativeOperator_modulo = Core.Name "modulo"
data AdditiveExpression =
  AdditiveExpressionSimple MultiplicativeExpression |
  AdditiveExpressionBinary BinaryAdditiveExpression
  deriving (Eq, Ord, Read, Show)
_AdditiveExpression = Core.Name "hydra.csharp.syntax.AdditiveExpression"
_AdditiveExpression_simple = Core.Name "simple"
_AdditiveExpression_binary = Core.Name "binary"
data BinaryAdditiveExpression =
  BinaryAdditiveExpression {
    binaryAdditiveExpressionLeft :: AdditiveExpression,
    binaryAdditiveExpressionOperator :: AdditiveOperator,
    binaryAdditiveExpressionRight :: MultiplicativeExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryAdditiveExpression = Core.Name "hydra.csharp.syntax.BinaryAdditiveExpression"
_BinaryAdditiveExpression_left = Core.Name "left"
_BinaryAdditiveExpression_operator = Core.Name "operator"
_BinaryAdditiveExpression_right = Core.Name "right"
data AdditiveOperator =
  AdditiveOperatorPlus |
  AdditiveOperatorMinus
  deriving (Eq, Ord, Read, Show)
_AdditiveOperator = Core.Name "hydra.csharp.syntax.AdditiveOperator"
_AdditiveOperator_plus = Core.Name "plus"
_AdditiveOperator_minus = Core.Name "minus"
data ShiftExpression =
  ShiftExpressionSimple AdditiveExpression |
  ShiftExpressionBinary BinaryShiftExpression
  deriving (Eq, Ord, Read, Show)
_ShiftExpression = Core.Name "hydra.csharp.syntax.ShiftExpression"
_ShiftExpression_simple = Core.Name "simple"
_ShiftExpression_binary = Core.Name "binary"
data BinaryShiftExpression =
  BinaryShiftExpression {
    binaryShiftExpressionLeft :: ShiftExpression,
    binaryShiftExpressionOperator :: ShiftOperator,
    binaryShiftExpressionRight :: AdditiveExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryShiftExpression = Core.Name "hydra.csharp.syntax.BinaryShiftExpression"
_BinaryShiftExpression_left = Core.Name "left"
_BinaryShiftExpression_operator = Core.Name "operator"
_BinaryShiftExpression_right = Core.Name "right"
data ShiftOperator =
  ShiftOperatorLeft |
  ShiftOperatorRight
  deriving (Eq, Ord, Read, Show)
_ShiftOperator = Core.Name "hydra.csharp.syntax.ShiftOperator"
_ShiftOperator_left = Core.Name "left"
_ShiftOperator_right = Core.Name "right"
data RelationalExpression =
  RelationalExpressionSimple ShiftExpression |
  RelationalExpressionBinary BinaryRelationalExpression |
  RelationalExpressionIsType IsTypeExpression |
  RelationalExpressionIsPattern IsPatternExpression |
  RelationalExpressionAsType AsTypeExpression
  deriving (Eq, Ord, Read, Show)
_RelationalExpression = Core.Name "hydra.csharp.syntax.RelationalExpression"
_RelationalExpression_simple = Core.Name "simple"
_RelationalExpression_binary = Core.Name "binary"
_RelationalExpression_isType = Core.Name "isType"
_RelationalExpression_isPattern = Core.Name "isPattern"
_RelationalExpression_asType = Core.Name "asType"
data BinaryRelationalExpression =
  BinaryRelationalExpression {
    binaryRelationalExpressionLeft :: RelationalExpression,
    binaryRelationalExpressionOperator :: RelationalOperator,
    binaryRelationalExpressionRight :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryRelationalExpression = Core.Name "hydra.csharp.syntax.BinaryRelationalExpression"
_BinaryRelationalExpression_left = Core.Name "left"
_BinaryRelationalExpression_operator = Core.Name "operator"
_BinaryRelationalExpression_right = Core.Name "right"
data RelationalOperator =
  RelationalOperatorLessThan |
  RelationalOperatorGreaterThan |
  RelationalOperatorLessThanOrEqual |
  RelationalOperatorGreaterThanOrEqual
  deriving (Eq, Ord, Read, Show)
_RelationalOperator = Core.Name "hydra.csharp.syntax.RelationalOperator"
_RelationalOperator_lessThan = Core.Name "lessThan"
_RelationalOperator_greaterThan = Core.Name "greaterThan"
_RelationalOperator_lessThanOrEqual = Core.Name "lessThanOrEqual"
_RelationalOperator_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
data IsTypeExpression =
  IsTypeExpression {
    isTypeExpressionExpression :: RelationalExpression,
    isTypeExpressionType :: Type}
  deriving (Eq, Ord, Read, Show)
_IsTypeExpression = Core.Name "hydra.csharp.syntax.IsTypeExpression"
_IsTypeExpression_expression = Core.Name "expression"
_IsTypeExpression_type = Core.Name "type"
data IsPatternExpression =
  IsPatternExpression {
    isPatternExpressionExpression :: RelationalExpression,
    isPatternExpressionPattern :: Pattern}
  deriving (Eq, Ord, Read, Show)
_IsPatternExpression = Core.Name "hydra.csharp.syntax.IsPatternExpression"
_IsPatternExpression_expression = Core.Name "expression"
_IsPatternExpression_pattern = Core.Name "pattern"
data AsTypeExpression =
  AsTypeExpression {
    asTypeExpressionExpression :: RelationalExpression,
    asTypeExpressionType :: Type}
  deriving (Eq, Ord, Read, Show)
_AsTypeExpression = Core.Name "hydra.csharp.syntax.AsTypeExpression"
_AsTypeExpression_expression = Core.Name "expression"
_AsTypeExpression_type = Core.Name "type"
data EqualityExpression =
  EqualityExpressionSimple RelationalExpression |
  EqualityExpressionBinary BinaryEqualityExpression
  deriving (Eq, Ord, Read, Show)
_EqualityExpression = Core.Name "hydra.csharp.syntax.EqualityExpression"
_EqualityExpression_simple = Core.Name "simple"
_EqualityExpression_binary = Core.Name "binary"
data BinaryEqualityExpression =
  BinaryEqualityExpression {
    binaryEqualityExpressionLeft :: EqualityExpression,
    binaryEqualityExpressionOperator :: EqualityOperator,
    binaryEqualityExpressionRight :: RelationalExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryEqualityExpression = Core.Name "hydra.csharp.syntax.BinaryEqualityExpression"
_BinaryEqualityExpression_left = Core.Name "left"
_BinaryEqualityExpression_operator = Core.Name "operator"
_BinaryEqualityExpression_right = Core.Name "right"
data EqualityOperator =
  EqualityOperatorEqual |
  EqualityOperatorNotEqual
  deriving (Eq, Ord, Read, Show)
_EqualityOperator = Core.Name "hydra.csharp.syntax.EqualityOperator"
_EqualityOperator_equal = Core.Name "equal"
_EqualityOperator_notEqual = Core.Name "notEqual"
data AndExpression =
  AndExpressionSimple EqualityExpression |
  AndExpressionBinary BinaryAndExpression
  deriving (Eq, Ord, Read, Show)
_AndExpression = Core.Name "hydra.csharp.syntax.AndExpression"
_AndExpression_simple = Core.Name "simple"
_AndExpression_binary = Core.Name "binary"
data BinaryAndExpression =
  BinaryAndExpression {
    binaryAndExpressionLeft :: AndExpression,
    binaryAndExpressionRight :: EqualityExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryAndExpression = Core.Name "hydra.csharp.syntax.BinaryAndExpression"
_BinaryAndExpression_left = Core.Name "left"
_BinaryAndExpression_right = Core.Name "right"
data ExclusiveOrExpression =
  ExclusiveOrExpressionSimple AndExpression |
  ExclusiveOrExpressionBinary BinaryExclusiveOrExpression
  deriving (Eq, Ord, Read, Show)
_ExclusiveOrExpression = Core.Name "hydra.csharp.syntax.ExclusiveOrExpression"
_ExclusiveOrExpression_simple = Core.Name "simple"
_ExclusiveOrExpression_binary = Core.Name "binary"
data BinaryExclusiveOrExpression =
  BinaryExclusiveOrExpression {
    binaryExclusiveOrExpressionLeft :: ExclusiveOrExpression,
    binaryExclusiveOrExpressionRight :: AndExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryExclusiveOrExpression = Core.Name "hydra.csharp.syntax.BinaryExclusiveOrExpression"
_BinaryExclusiveOrExpression_left = Core.Name "left"
_BinaryExclusiveOrExpression_right = Core.Name "right"
data InclusiveOrExpression =
  InclusiveOrExpressionSimple ExclusiveOrExpression |
  InclusiveOrExpressionBinary BinaryInclusiveOrExpression
  deriving (Eq, Ord, Read, Show)
_InclusiveOrExpression = Core.Name "hydra.csharp.syntax.InclusiveOrExpression"
_InclusiveOrExpression_simple = Core.Name "simple"
_InclusiveOrExpression_binary = Core.Name "binary"
data BinaryInclusiveOrExpression =
  BinaryInclusiveOrExpression {
    binaryInclusiveOrExpressionLeft :: InclusiveOrExpression,
    binaryInclusiveOrExpressionRight :: ExclusiveOrExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryInclusiveOrExpression = Core.Name "hydra.csharp.syntax.BinaryInclusiveOrExpression"
_BinaryInclusiveOrExpression_left = Core.Name "left"
_BinaryInclusiveOrExpression_right = Core.Name "right"
data ConditionalAndExpression =
  ConditionalAndExpressionSimple InclusiveOrExpression |
  ConditionalAndExpressionBinary BinaryConditionalAndExpression
  deriving (Eq, Ord, Read, Show)
_ConditionalAndExpression = Core.Name "hydra.csharp.syntax.ConditionalAndExpression"
_ConditionalAndExpression_simple = Core.Name "simple"
_ConditionalAndExpression_binary = Core.Name "binary"
data BinaryConditionalAndExpression =
  BinaryConditionalAndExpression {
    binaryConditionalAndExpressionLeft :: ConditionalAndExpression,
    binaryConditionalAndExpressionRight :: InclusiveOrExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryConditionalAndExpression = Core.Name "hydra.csharp.syntax.BinaryConditionalAndExpression"
_BinaryConditionalAndExpression_left = Core.Name "left"
_BinaryConditionalAndExpression_right = Core.Name "right"
data ConditionalOrExpression =
  ConditionalOrExpressionSimple ConditionalAndExpression |
  ConditionalOrExpressionBinary BinaryConditionalOrExpression
  deriving (Eq, Ord, Read, Show)
_ConditionalOrExpression = Core.Name "hydra.csharp.syntax.ConditionalOrExpression"
_ConditionalOrExpression_simple = Core.Name "simple"
_ConditionalOrExpression_binary = Core.Name "binary"
data BinaryConditionalOrExpression =
  BinaryConditionalOrExpression {
    binaryConditionalOrExpressionLeft :: ConditionalOrExpression,
    binaryConditionalOrExpressionRight :: ConditionalAndExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryConditionalOrExpression = Core.Name "hydra.csharp.syntax.BinaryConditionalOrExpression"
_BinaryConditionalOrExpression_left = Core.Name "left"
_BinaryConditionalOrExpression_right = Core.Name "right"
data NullCoalescingExpression =
  NullCoalescingExpressionSimple ConditionalOrExpression |
  NullCoalescingExpressionBinary BinaryNullCoalescingExpression |
  NullCoalescingExpressionThrow NullCoalescingExpression
  deriving (Eq, Ord, Read, Show)
_NullCoalescingExpression = Core.Name "hydra.csharp.syntax.NullCoalescingExpression"
_NullCoalescingExpression_simple = Core.Name "simple"
_NullCoalescingExpression_binary = Core.Name "binary"
_NullCoalescingExpression_throw = Core.Name "throw"
data BinaryNullCoalescingExpression =
  BinaryNullCoalescingExpression {
    binaryNullCoalescingExpressionLeft :: ConditionalOrExpression,
    binaryNullCoalescingExpressionRight :: NullCoalescingExpression}
  deriving (Eq, Ord, Read, Show)
_BinaryNullCoalescingExpression = Core.Name "hydra.csharp.syntax.BinaryNullCoalescingExpression"
_BinaryNullCoalescingExpression_left = Core.Name "left"
_BinaryNullCoalescingExpression_right = Core.Name "right"
data DeclarationExpression =
  DeclarationExpression {
    declarationExpressionType :: LocalVariableType,
    declarationExpressionIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)
_DeclarationExpression = Core.Name "hydra.csharp.syntax.DeclarationExpression"
_DeclarationExpression_type = Core.Name "type"
_DeclarationExpression_identifier = Core.Name "identifier"
data LocalVariableType =
  LocalVariableTypeType Type |
  LocalVariableTypeVar
  deriving (Eq, Ord, Read, Show)
_LocalVariableType = Core.Name "hydra.csharp.syntax.LocalVariableType"
_LocalVariableType_type = Core.Name "type"
_LocalVariableType_var = Core.Name "var"
data ConditionalExpression =
  ConditionalExpressionSimple NullCoalescingExpression |
  ConditionalExpressionSimpleConditional SimpleConditionalExpression |
  ConditionalExpressionRefConditional RefConditionalExpression
  deriving (Eq, Ord, Read, Show)
_ConditionalExpression = Core.Name "hydra.csharp.syntax.ConditionalExpression"
_ConditionalExpression_simple = Core.Name "simple"
_ConditionalExpression_simpleConditional = Core.Name "simpleConditional"
_ConditionalExpression_refConditional = Core.Name "refConditional"
data SimpleConditionalExpression =
  SimpleConditionalExpression {
    simpleConditionalExpressionCondition :: NullCoalescingExpression,
    simpleConditionalExpressionTrue :: Expression,
    simpleConditionalExpressionFalse :: Expression}
  deriving (Eq, Ord, Read, Show)
_SimpleConditionalExpression = Core.Name "hydra.csharp.syntax.SimpleConditionalExpression"
_SimpleConditionalExpression_condition = Core.Name "condition"
_SimpleConditionalExpression_true = Core.Name "true"
_SimpleConditionalExpression_false = Core.Name "false"
data RefConditionalExpression =
  RefConditionalExpression {
    refConditionalExpressionCondition :: NullCoalescingExpression,
    refConditionalExpressionTrue :: VariableReference,
    refConditionalExpressionFalse :: VariableReference}
  deriving (Eq, Ord, Read, Show)
_RefConditionalExpression = Core.Name "hydra.csharp.syntax.RefConditionalExpression"
_RefConditionalExpression_condition = Core.Name "condition"
_RefConditionalExpression_true = Core.Name "true"
_RefConditionalExpression_false = Core.Name "false"
data LambdaExpression =
  LambdaExpression {
    lambdaExpressionAsync :: Bool,
    lambdaExpressionSignature :: AnonymousFunctionSignature,
    lambdaExpressionBody :: AnonymousFunctionBody}
  deriving (Eq, Ord, Read, Show)
_LambdaExpression = Core.Name "hydra.csharp.syntax.LambdaExpression"
_LambdaExpression_async = Core.Name "async"
_LambdaExpression_signature = Core.Name "signature"
_LambdaExpression_body = Core.Name "body"
data AnonymousMethodExpression =
  AnonymousMethodExpression {
    anonymousMethodExpressionAsync :: Bool,
    anonymousMethodExpressionSignature :: [ExplicitAnonymousFunctionParameter],
    anonymousMethodExpressionBody :: Block}
  deriving (Eq, Ord, Read, Show)
_AnonymousMethodExpression = Core.Name "hydra.csharp.syntax.AnonymousMethodExpression"
_AnonymousMethodExpression_async = Core.Name "async"
_AnonymousMethodExpression_signature = Core.Name "signature"
_AnonymousMethodExpression_body = Core.Name "body"
data AnonymousFunctionSignature =
  AnonymousFunctionSignatureExplicit [ExplicitAnonymousFunctionParameter] |
  AnonymousFunctionSignatureImplicit [Identifier]
  deriving (Eq, Ord, Read, Show)
_AnonymousFunctionSignature = Core.Name "hydra.csharp.syntax.AnonymousFunctionSignature"
_AnonymousFunctionSignature_explicit = Core.Name "explicit"
_AnonymousFunctionSignature_implicit = Core.Name "implicit"
data ExplicitAnonymousFunctionParameter =
  ExplicitAnonymousFunctionParameter {
    explicitAnonymousFunctionParameterModifier :: (Maybe AnonymousFunctionParameterModifier),
    explicitAnonymousFunctionParameterType :: Type,
    explicitAnonymousFunctionParameterIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)
_ExplicitAnonymousFunctionParameter = Core.Name "hydra.csharp.syntax.ExplicitAnonymousFunctionParameter"
_ExplicitAnonymousFunctionParameter_modifier = Core.Name "modifier"
_ExplicitAnonymousFunctionParameter_type = Core.Name "type"
_ExplicitAnonymousFunctionParameter_identifier = Core.Name "identifier"
data AnonymousFunctionParameterModifier =
  AnonymousFunctionParameterModifierRef |
  AnonymousFunctionParameterModifierOut |
  AnonymousFunctionParameterModifierIn
  deriving (Eq, Ord, Read, Show)
_AnonymousFunctionParameterModifier = Core.Name "hydra.csharp.syntax.AnonymousFunctionParameterModifier"
_AnonymousFunctionParameterModifier_ref = Core.Name "ref"
_AnonymousFunctionParameterModifier_out = Core.Name "out"
_AnonymousFunctionParameterModifier_in = Core.Name "in"
data AnonymousFunctionBody =
  AnonymousFunctionBodyNullConditionalInvocation NullConditionalInvocationExpression |
  AnonymousFunctionBodyExpression Expression |
  AnonymousFunctionBodyRef VariableReference |
  AnonymousFunctionBodyBlock Block
  deriving (Eq, Ord, Read, Show)
_AnonymousFunctionBody = Core.Name "hydra.csharp.syntax.AnonymousFunctionBody"
_AnonymousFunctionBody_nullConditionalInvocation = Core.Name "nullConditionalInvocation"
_AnonymousFunctionBody_expression = Core.Name "expression"
_AnonymousFunctionBody_ref = Core.Name "ref"
_AnonymousFunctionBody_block = Core.Name "block"
data QueryExpression =
  QueryExpression {
    queryExpressionFrom :: FromClause,
    queryExpressionBody :: QueryBody}
  deriving (Eq, Ord, Read, Show)
_QueryExpression = Core.Name "hydra.csharp.syntax.QueryExpression"
_QueryExpression_from = Core.Name "from"
_QueryExpression_body = Core.Name "body"
data FromClause =
  FromClause {
    fromClauseType :: (Maybe Type),
    fromClauseIdentifier :: Identifier,
    fromClauseIn :: Expression}
  deriving (Eq, Ord, Read, Show)
_FromClause = Core.Name "hydra.csharp.syntax.FromClause"
_FromClause_type = Core.Name "type"
_FromClause_identifier = Core.Name "identifier"
_FromClause_in = Core.Name "in"
data QueryBody =
  QueryBody {
    queryBodyClauses :: [QueryBodyClause],
    queryBodySelectOrGroup :: SelectOrGroupClause,
    queryBodyContinuation :: (Maybe QueryContinuation)}
  deriving (Eq, Ord, Read, Show)
_QueryBody = Core.Name "hydra.csharp.syntax.QueryBody"
_QueryBody_clauses = Core.Name "clauses"
_QueryBody_selectOrGroup = Core.Name "selectOrGroup"
_QueryBody_continuation = Core.Name "continuation"
data QueryBodyClause =
  QueryBodyClauseFrom FromClause |
  QueryBodyClauseLet LetClause |
  QueryBodyClauseWhere BooleanExpression |
  QueryBodyClauseJoin JoinClause |
  QueryBodyClauseOrderby [Ordering]
  deriving (Eq, Ord, Read, Show)
_QueryBodyClause = Core.Name "hydra.csharp.syntax.QueryBodyClause"
_QueryBodyClause_from = Core.Name "from"
_QueryBodyClause_let = Core.Name "let"
_QueryBodyClause_where = Core.Name "where"
_QueryBodyClause_join = Core.Name "join"
_QueryBodyClause_orderby = Core.Name "orderby"
data LetClause =
  LetClause {
    letClauseLeft :: Identifier,
    letClauseRight :: Expression}
  deriving (Eq, Ord, Read, Show)
_LetClause = Core.Name "hydra.csharp.syntax.LetClause"
_LetClause_left = Core.Name "left"
_LetClause_right = Core.Name "right"
data JoinClause =
  JoinClause {
    joinClauseType :: (Maybe Type),
    joinClauseIdentifier :: Identifier,
    joinClauseIn :: Expression,
    joinClauseOn :: Expression,
    joinClauseEquals :: Expression,
    joinClauseInto :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)
_JoinClause = Core.Name "hydra.csharp.syntax.JoinClause"
_JoinClause_type = Core.Name "type"
_JoinClause_identifier = Core.Name "identifier"
_JoinClause_in = Core.Name "in"
_JoinClause_on = Core.Name "on"
_JoinClause_equals = Core.Name "equals"
_JoinClause_into = Core.Name "into"
data Ordering =
  Ordering {
    orderingExpression :: Expression,
    orderingDirection :: (Maybe OrderingDirection)}
  deriving (Eq, Ord, Read, Show)
_Ordering = Core.Name "hydra.csharp.syntax.Ordering"
_Ordering_expression = Core.Name "expression"
_Ordering_direction = Core.Name "direction"
data OrderingDirection =
  OrderingDirectionAscending |
  OrderingDirectionDescending
  deriving (Eq, Ord, Read, Show)
_OrderingDirection = Core.Name "hydra.csharp.syntax.OrderingDirection"
_OrderingDirection_ascending = Core.Name "ascending"
_OrderingDirection_descending = Core.Name "descending"
data SelectOrGroupClause =
  SelectOrGroupClauseSelect Expression |
  SelectOrGroupClauseGroup GroupClause
  deriving (Eq, Ord, Read, Show)
_SelectOrGroupClause = Core.Name "hydra.csharp.syntax.SelectOrGroupClause"
_SelectOrGroupClause_select = Core.Name "select"
_SelectOrGroupClause_group = Core.Name "group"
data GroupClause =
  GroupClause {
    groupClauseGrouped :: Expression,
    groupClauseBy :: Expression}
  deriving (Eq, Ord, Read, Show)
_GroupClause = Core.Name "hydra.csharp.syntax.GroupClause"
_GroupClause_grouped = Core.Name "grouped"
_GroupClause_by = Core.Name "by"
data QueryContinuation =
  QueryContinuation {
    queryContinuationInto :: Identifier,
    queryContinuationBody :: QueryBody}
  deriving (Eq, Ord, Read, Show)
_QueryContinuation = Core.Name "hydra.csharp.syntax.QueryContinuation"
_QueryContinuation_into = Core.Name "into"
_QueryContinuation_body = Core.Name "body"
data Assignment =
  Assignment {
    assignmentLeft :: UnaryExpression,
    assignmentOperator :: AssignmentOperator,
    assignmentRight :: Expression}
  deriving (Eq, Ord, Read, Show)
_Assignment = Core.Name "hydra.csharp.syntax.Assignment"
_Assignment_left = Core.Name "left"
_Assignment_operator = Core.Name "operator"
_Assignment_right = Core.Name "right"
data AssignmentOperator =
  AssignmentOperatorSimple Bool |
  AssignmentOperatorPlusEquals |
  AssignmentOperatorMinusEquals |
  AssignmentOperatorTimesEquals |
  AssignmentOperatorDivideEquals |
  AssignmentOperatorModEquals |
  AssignmentOperatorAndEquals |
  AssignmentOperatorOrEquals |
  AssignmentOperatorXorEquals |
  AssignmentOperatorLeftShiftEquals |
  AssignmentOperatorRightShiftEquals
  deriving (Eq, Ord, Read, Show)
_AssignmentOperator = Core.Name "hydra.csharp.syntax.AssignmentOperator"
_AssignmentOperator_simple = Core.Name "simple"
_AssignmentOperator_plusEquals = Core.Name "plusEquals"
_AssignmentOperator_minusEquals = Core.Name "minusEquals"
_AssignmentOperator_timesEquals = Core.Name "timesEquals"
_AssignmentOperator_divideEquals = Core.Name "divideEquals"
_AssignmentOperator_modEquals = Core.Name "modEquals"
_AssignmentOperator_andEquals = Core.Name "andEquals"
_AssignmentOperator_orEquals = Core.Name "orEquals"
_AssignmentOperator_xorEquals = Core.Name "xorEquals"
_AssignmentOperator_leftShiftEquals = Core.Name "leftShiftEquals"
_AssignmentOperator_rightShiftEquals = Core.Name "rightShiftEquals"
data Expression =
  ExpressionNonAssignment NonAssignmentExpression |
  ExpressionAssignment Assignment
  deriving (Eq, Ord, Read, Show)
_Expression = Core.Name "hydra.csharp.syntax.Expression"
_Expression_nonAssignment = Core.Name "nonAssignment"
_Expression_assignment = Core.Name "assignment"
data NonAssignmentExpression =
  NonAssignmentExpressionDeclaration DeclarationExpression |
  NonAssignmentExpressionConditional ConditionalExpression |
  NonAssignmentExpressionLambda LambdaExpression |
  NonAssignmentExpressionQuery QueryExpression
  deriving (Eq, Ord, Read, Show)
_NonAssignmentExpression = Core.Name "hydra.csharp.syntax.NonAssignmentExpression"
_NonAssignmentExpression_declaration = Core.Name "declaration"
_NonAssignmentExpression_conditional = Core.Name "conditional"
_NonAssignmentExpression_lambda = Core.Name "lambda"
_NonAssignmentExpression_query = Core.Name "query"
newtype ConstantExpression =
  ConstantExpression {
    unConstantExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_ConstantExpression = Core.Name "hydra.csharp.syntax.ConstantExpression"
newtype BooleanExpression =
  BooleanExpression {
    unBooleanExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_BooleanExpression = Core.Name "hydra.csharp.syntax.BooleanExpression"
data Statement =
  StatementLabeled LabeledStatement |
  StatementDeclaration DeclarationStatement |
  StatementEmbedded EmbeddedStatement
  deriving (Eq, Ord, Read, Show)
_Statement = Core.Name "hydra.csharp.syntax.Statement"
_Statement_labeled = Core.Name "labeled"
_Statement_declaration = Core.Name "declaration"
_Statement_embedded = Core.Name "embedded"
data EmbeddedStatement =
  EmbeddedStatementBlock Block |
  EmbeddedStatementEmpty |
  EmbeddedStatementExpression StatementExpression |
  EmbeddedStatementSelection SelectionStatement |
  EmbeddedStatementIteration IterationStatement |
  EmbeddedStatementJump JumpStatement |
  EmbeddedStatementTry TryStatement |
  EmbeddedStatementChecked Block |
  EmbeddedStatementUnchecked Block |
  EmbeddedStatementLock LockStatement |
  EmbeddedStatementUsing UsingStatement |
  EmbeddedStatementYield YieldStatement |
  EmbeddedStatementUnsafe Block |
  EmbeddedStatementFixed FixedStatement
  deriving (Eq, Ord, Read, Show)
_EmbeddedStatement = Core.Name "hydra.csharp.syntax.EmbeddedStatement"
_EmbeddedStatement_block = Core.Name "block"
_EmbeddedStatement_empty = Core.Name "empty"
_EmbeddedStatement_expression = Core.Name "expression"
_EmbeddedStatement_selection = Core.Name "selection"
_EmbeddedStatement_iteration = Core.Name "iteration"
_EmbeddedStatement_jump = Core.Name "jump"
_EmbeddedStatement_try = Core.Name "try"
_EmbeddedStatement_checked = Core.Name "checked"
_EmbeddedStatement_unchecked = Core.Name "unchecked"
_EmbeddedStatement_lock = Core.Name "lock"
_EmbeddedStatement_using = Core.Name "using"
_EmbeddedStatement_yield = Core.Name "yield"
_EmbeddedStatement_unsafe = Core.Name "unsafe"
_EmbeddedStatement_fixed = Core.Name "fixed"
newtype Block =
  Block {
    unBlock :: [Statement]}
  deriving (Eq, Ord, Read, Show)
_Block = Core.Name "hydra.csharp.syntax.Block"
data LabeledStatement =
  LabeledStatement {
    labeledStatementLabel :: Identifier,
    labeledStatementStatement :: Statement}
  deriving (Eq, Ord, Read, Show)
_LabeledStatement = Core.Name "hydra.csharp.syntax.LabeledStatement"
_LabeledStatement_label = Core.Name "label"
_LabeledStatement_statement = Core.Name "statement"
data DeclarationStatement =
  DeclarationStatementVariable LocalVariableDeclaration |
  DeclarationStatementConstant LocalConstantDeclaration |
  DeclarationStatementFunction LocalFunctionDeclaration
  deriving (Eq, Ord, Read, Show)
_DeclarationStatement = Core.Name "hydra.csharp.syntax.DeclarationStatement"
_DeclarationStatement_variable = Core.Name "variable"
_DeclarationStatement_constant = Core.Name "constant"
_DeclarationStatement_function = Core.Name "function"
data LocalVariableDeclaration =
  LocalVariableDeclarationImplicitlyTyped ImplicitlyTypedLocalVariableDeclaration |
  LocalVariableDeclarationExplicitlyTyped ExplicitlyTypedLocalVariableDeclaration |
  LocalVariableDeclarationRef RefLocalVariableDeclaration
  deriving (Eq, Ord, Read, Show)
_LocalVariableDeclaration = Core.Name "hydra.csharp.syntax.LocalVariableDeclaration"
_LocalVariableDeclaration_implicitlyTyped = Core.Name "implicitlyTyped"
_LocalVariableDeclaration_explicitlyTyped = Core.Name "explicitlyTyped"
_LocalVariableDeclaration_ref = Core.Name "ref"
data ImplicitlyTypedLocalVariableDeclaration =
  ImplicitlyTypedLocalVariableDeclarationVar ImplicitlyTypedLocalVariableDeclarator |
  ImplicitlyTypedLocalVariableDeclarationRefVar RefVarImplicitlyTypedLocalVariableDeclaration
  deriving (Eq, Ord, Read, Show)
_ImplicitlyTypedLocalVariableDeclaration = Core.Name "hydra.csharp.syntax.ImplicitlyTypedLocalVariableDeclaration"
_ImplicitlyTypedLocalVariableDeclaration_var = Core.Name "var"
_ImplicitlyTypedLocalVariableDeclaration_refVar = Core.Name "refVar"
data RefVarImplicitlyTypedLocalVariableDeclaration =
  RefVarImplicitlyTypedLocalVariableDeclaration {
    refVarImplicitlyTypedLocalVariableDeclarationRefKind :: RefKind,
    refVarImplicitlyTypedLocalVariableDeclarationDeclarator :: RefLocalVariableDeclarator}
  deriving (Eq, Ord, Read, Show)
_RefVarImplicitlyTypedLocalVariableDeclaration =
    Core.Name "hydra.csharp.syntax.RefVarImplicitlyTypedLocalVariableDeclaration"
_RefVarImplicitlyTypedLocalVariableDeclaration_refKind = Core.Name "refKind"
_RefVarImplicitlyTypedLocalVariableDeclaration_declarator = Core.Name "declarator"
data ImplicitlyTypedLocalVariableDeclarator =
  ImplicitlyTypedLocalVariableDeclarator {
    implicitlyTypedLocalVariableDeclaratorIdentifier :: Identifier,
    implicitlyTypedLocalVariableDeclaratorExpression :: Expression}
  deriving (Eq, Ord, Read, Show)
_ImplicitlyTypedLocalVariableDeclarator = Core.Name "hydra.csharp.syntax.ImplicitlyTypedLocalVariableDeclarator"
_ImplicitlyTypedLocalVariableDeclarator_identifier = Core.Name "identifier"
_ImplicitlyTypedLocalVariableDeclarator_expression = Core.Name "expression"
data ExplicitlyTypedLocalVariableDeclaration =
  ExplicitlyTypedLocalVariableDeclaration {
    explicitlyTypedLocalVariableDeclarationType :: Type,
    explicitlyTypedLocalVariableDeclarationDeclarators :: [ExplicitlyTypedLocalVariableDeclarator]}
  deriving (Eq, Ord, Read, Show)
_ExplicitlyTypedLocalVariableDeclaration = Core.Name "hydra.csharp.syntax.ExplicitlyTypedLocalVariableDeclaration"
_ExplicitlyTypedLocalVariableDeclaration_type = Core.Name "type"
_ExplicitlyTypedLocalVariableDeclaration_declarators = Core.Name "declarators"
data ExplicitlyTypedLocalVariableDeclarator =
  ExplicitlyTypedLocalVariableDeclarator {
    explicitlyTypedLocalVariableDeclaratorIdentifier :: Identifier,
    explicitlyTypedLocalVariableDeclaratorInitializer :: (Maybe LocalVariableInitializer)}
  deriving (Eq, Ord, Read, Show)
_ExplicitlyTypedLocalVariableDeclarator = Core.Name "hydra.csharp.syntax.ExplicitlyTypedLocalVariableDeclarator"
_ExplicitlyTypedLocalVariableDeclarator_identifier = Core.Name "identifier"
_ExplicitlyTypedLocalVariableDeclarator_initializer = Core.Name "initializer"
data LocalVariableInitializer =
  LocalVariableInitializerExpression Expression |
  LocalVariableInitializerInitializer ArrayInitializer
  deriving (Eq, Ord, Read, Show)
_LocalVariableInitializer = Core.Name "hydra.csharp.syntax.LocalVariableInitializer"
_LocalVariableInitializer_expression = Core.Name "expression"
_LocalVariableInitializer_initializer = Core.Name "initializer"
data RefLocalVariableDeclaration =
  RefLocalVariableDeclaration {
    refLocalVariableDeclarationRefKind :: RefKind,
    refLocalVariableDeclarationType :: Type,
    refLocalVariableDeclarationDeclarators :: [RefLocalVariableDeclarator]}
  deriving (Eq, Ord, Read, Show)
_RefLocalVariableDeclaration = Core.Name "hydra.csharp.syntax.RefLocalVariableDeclaration"
_RefLocalVariableDeclaration_refKind = Core.Name "refKind"
_RefLocalVariableDeclaration_type = Core.Name "type"
_RefLocalVariableDeclaration_declarators = Core.Name "declarators"
data RefLocalVariableDeclarator =
  RefLocalVariableDeclarator {
    refLocalVariableDeclaratorLeft :: Identifier,
    refLocalVariableDeclaratorRight :: VariableReference}
  deriving (Eq, Ord, Read, Show)
_RefLocalVariableDeclarator = Core.Name "hydra.csharp.syntax.RefLocalVariableDeclarator"
_RefLocalVariableDeclarator_left = Core.Name "left"
_RefLocalVariableDeclarator_right = Core.Name "right"
data LocalConstantDeclaration =
  LocalConstantDeclaration {
    localConstantDeclarationType :: Type,
    localConstantDeclarationDeclarators :: [ConstantDeclarator]}
  deriving (Eq, Ord, Read, Show)
_LocalConstantDeclaration = Core.Name "hydra.csharp.syntax.LocalConstantDeclaration"
_LocalConstantDeclaration_type = Core.Name "type"
_LocalConstantDeclaration_declarators = Core.Name "declarators"
data ConstantDeclarator =
  ConstantDeclarator {
    constantDeclaratorIdentifier :: Identifier,
    constantDeclaratorExpression :: ConstantExpression}
  deriving (Eq, Ord, Read, Show)
_ConstantDeclarator = Core.Name "hydra.csharp.syntax.ConstantDeclarator"
_ConstantDeclarator_identifier = Core.Name "identifier"
_ConstantDeclarator_expression = Core.Name "expression"
data LocalFunctionDeclaration =
  LocalFunctionDeclarationStandard StandardLocalFunctionDeclaration |
  LocalFunctionDeclarationRef RefLocalFunctionDeclaration
  deriving (Eq, Ord, Read, Show)
_LocalFunctionDeclaration = Core.Name "hydra.csharp.syntax.LocalFunctionDeclaration"
_LocalFunctionDeclaration_standard = Core.Name "standard"
_LocalFunctionDeclaration_ref = Core.Name "ref"
data StandardLocalFunctionDeclaration =
  StandardLocalFunctionDeclaration {
    standardLocalFunctionDeclarationModifiers :: [LocalFunctionModifier],
    standardLocalFunctionDeclarationReturnType :: ReturnType,
    standardLocalFunctionDeclarationHeader :: LocalFunctionHeader,
    standardLocalFunctionDeclarationBody :: LocalFunctionBody}
  deriving (Eq, Ord, Read, Show)
_StandardLocalFunctionDeclaration = Core.Name "hydra.csharp.syntax.StandardLocalFunctionDeclaration"
_StandardLocalFunctionDeclaration_modifiers = Core.Name "modifiers"
_StandardLocalFunctionDeclaration_returnType = Core.Name "returnType"
_StandardLocalFunctionDeclaration_header = Core.Name "header"
_StandardLocalFunctionDeclaration_body = Core.Name "body"
data RefLocalFunctionDeclaration =
  RefLocalFunctionDeclaration {
    refLocalFunctionDeclarationModifiers :: [RefLocalFunctionModifier],
    refLocalFunctionDeclarationRefKind :: RefKind,
    refLocalFunctionDeclarationReturnType :: Type,
    refLocalFunctionDeclarationHeader :: LocalFunctionHeader,
    refLocalFunctionDeclarationBody :: RefLocalFunctionBody}
  deriving (Eq, Ord, Read, Show)
_RefLocalFunctionDeclaration = Core.Name "hydra.csharp.syntax.RefLocalFunctionDeclaration"
_RefLocalFunctionDeclaration_modifiers = Core.Name "modifiers"
_RefLocalFunctionDeclaration_refKind = Core.Name "refKind"
_RefLocalFunctionDeclaration_returnType = Core.Name "returnType"
_RefLocalFunctionDeclaration_header = Core.Name "header"
_RefLocalFunctionDeclaration_body = Core.Name "body"
data LocalFunctionHeader =
  LocalFunctionHeader {
    localFunctionHeaderIdentifier :: Identifier,
    localFunctionHeaderTypeParameters :: (Maybe TypeParameterList),
    localFunctionHeaderParameters :: FormalParameterList,
    localFunctionHeaderConstraints :: [TypeParameterConstraintsClause]}
  deriving (Eq, Ord, Read, Show)
_LocalFunctionHeader = Core.Name "hydra.csharp.syntax.LocalFunctionHeader"
_LocalFunctionHeader_identifier = Core.Name "identifier"
_LocalFunctionHeader_typeParameters = Core.Name "typeParameters"
_LocalFunctionHeader_parameters = Core.Name "parameters"
_LocalFunctionHeader_constraints = Core.Name "constraints"
data LocalFunctionModifier =
  LocalFunctionModifierRef RefLocalFunctionModifier |
  LocalFunctionModifierAsync
  deriving (Eq, Ord, Read, Show)
_LocalFunctionModifier = Core.Name "hydra.csharp.syntax.LocalFunctionModifier"
_LocalFunctionModifier_ref = Core.Name "ref"
_LocalFunctionModifier_async = Core.Name "async"
data RefLocalFunctionModifier =
  RefLocalFunctionModifierStatic |
  RefLocalFunctionModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_RefLocalFunctionModifier = Core.Name "hydra.csharp.syntax.RefLocalFunctionModifier"
_RefLocalFunctionModifier_static = Core.Name "static"
_RefLocalFunctionModifier_unsafe = Core.Name "unsafe"
data LocalFunctionBody =
  LocalFunctionBodyBlock Block |
  LocalFunctionBodyNullConditionalInvocation NullConditionalInvocationExpression |
  LocalFunctionBodyExpression Expression
  deriving (Eq, Ord, Read, Show)
_LocalFunctionBody = Core.Name "hydra.csharp.syntax.LocalFunctionBody"
_LocalFunctionBody_block = Core.Name "block"
_LocalFunctionBody_nullConditionalInvocation = Core.Name "nullConditionalInvocation"
_LocalFunctionBody_expression = Core.Name "expression"
data RefLocalFunctionBody =
  RefLocalFunctionBodyBlock Block |
  RefLocalFunctionBodyRef VariableReference
  deriving (Eq, Ord, Read, Show)
_RefLocalFunctionBody = Core.Name "hydra.csharp.syntax.RefLocalFunctionBody"
_RefLocalFunctionBody_block = Core.Name "block"
_RefLocalFunctionBody_ref = Core.Name "ref"
data StatementExpression =
  StatementExpressionNullConditionalInvocation NullConditionalInvocationExpression |
  StatementExpressionInvocation InvocationExpression |
  StatementExpressionObjectCreation ObjectCreationExpression |
  StatementExpressionAssignment Assignment |
  StatementExpressionPostIncrement PrimaryExpression |
  StatementExpressionPostDecrement PrimaryExpression |
  StatementExpressionPreIncrement UnaryExpression |
  StatementExpressionPreDecrement UnaryExpression |
  StatementExpressionAwait UnaryExpression
  deriving (Eq, Ord, Read, Show)
_StatementExpression = Core.Name "hydra.csharp.syntax.StatementExpression"
_StatementExpression_nullConditionalInvocation = Core.Name "nullConditionalInvocation"
_StatementExpression_invocation = Core.Name "invocation"
_StatementExpression_objectCreation = Core.Name "objectCreation"
_StatementExpression_assignment = Core.Name "assignment"
_StatementExpression_postIncrement = Core.Name "postIncrement"
_StatementExpression_postDecrement = Core.Name "postDecrement"
_StatementExpression_preIncrement = Core.Name "preIncrement"
_StatementExpression_preDecrement = Core.Name "preDecrement"
_StatementExpression_await = Core.Name "await"
data SelectionStatement =
  SelectionStatementIf IfStatement |
  SelectionStatementSwitch SwitchStatement
  deriving (Eq, Ord, Read, Show)
_SelectionStatement = Core.Name "hydra.csharp.syntax.SelectionStatement"
_SelectionStatement_if = Core.Name "if"
_SelectionStatement_switch = Core.Name "switch"
data IfStatement =
  IfStatement {
    ifStatementCondition :: BooleanExpression,
    ifStatementIfBranch :: EmbeddedStatement,
    ifStatementElseBranch :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_IfStatement = Core.Name "hydra.csharp.syntax.IfStatement"
_IfStatement_condition = Core.Name "condition"
_IfStatement_ifBranch = Core.Name "ifBranch"
_IfStatement_elseBranch = Core.Name "elseBranch"
data SwitchStatement =
  SwitchStatement {
    switchStatementExpression :: Expression,
    switchStatementBranches :: [SwitchSection]}
  deriving (Eq, Ord, Read, Show)
_SwitchStatement = Core.Name "hydra.csharp.syntax.SwitchStatement"
_SwitchStatement_expression = Core.Name "expression"
_SwitchStatement_branches = Core.Name "branches"
data SwitchSection =
  SwitchSection {
    switchSectionLabels :: [SwitchLabel],
    switchSectionStatements :: [Statement]}
  deriving (Eq, Ord, Read, Show)
_SwitchSection = Core.Name "hydra.csharp.syntax.SwitchSection"
_SwitchSection_labels = Core.Name "labels"
_SwitchSection_statements = Core.Name "statements"
data SwitchLabel =
  SwitchLabelBranch SwitchBranch |
  SwitchLabelDefault
  deriving (Eq, Ord, Read, Show)
_SwitchLabel = Core.Name "hydra.csharp.syntax.SwitchLabel"
_SwitchLabel_branch = Core.Name "branch"
_SwitchLabel_default = Core.Name "default"
data SwitchBranch =
  SwitchBranch {
    switchBranchPattern :: Pattern,
    switchBranchGuard :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)
_SwitchBranch = Core.Name "hydra.csharp.syntax.SwitchBranch"
_SwitchBranch_pattern = Core.Name "pattern"
_SwitchBranch_guard = Core.Name "guard"
data IterationStatement =
  IterationStatementWhile WhileStatement |
  IterationStatementDo DoStatement |
  IterationStatementFor ForStatement |
  IterationStatementForeach ForeachStatement
  deriving (Eq, Ord, Read, Show)
_IterationStatement = Core.Name "hydra.csharp.syntax.IterationStatement"
_IterationStatement_while = Core.Name "while"
_IterationStatement_do = Core.Name "do"
_IterationStatement_for = Core.Name "for"
_IterationStatement_foreach = Core.Name "foreach"
data WhileStatement =
  WhileStatement {
    whileStatementCondition :: BooleanExpression,
    whileStatementBody :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_WhileStatement = Core.Name "hydra.csharp.syntax.WhileStatement"
_WhileStatement_condition = Core.Name "condition"
_WhileStatement_body = Core.Name "body"
data DoStatement =
  DoStatement {
    doStatementBody :: EmbeddedStatement,
    doStatementWhile :: BooleanExpression}
  deriving (Eq, Ord, Read, Show)
_DoStatement = Core.Name "hydra.csharp.syntax.DoStatement"
_DoStatement_body = Core.Name "body"
_DoStatement_while = Core.Name "while"
data ForStatement =
  ForStatement {
    forStatementInitializer :: (Maybe ForInitializer),
    forStatementCondition :: (Maybe BooleanExpression),
    forStatementIterator :: (Maybe StatementExpressionList),
    forStatementBody :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_ForStatement = Core.Name "hydra.csharp.syntax.ForStatement"
_ForStatement_initializer = Core.Name "initializer"
_ForStatement_condition = Core.Name "condition"
_ForStatement_iterator = Core.Name "iterator"
_ForStatement_body = Core.Name "body"
data ForInitializer =
  ForInitializerVariable LocalVariableDeclaration |
  ForInitializerStatements StatementExpressionList
  deriving (Eq, Ord, Read, Show)
_ForInitializer = Core.Name "hydra.csharp.syntax.ForInitializer"
_ForInitializer_variable = Core.Name "variable"
_ForInitializer_statements = Core.Name "statements"
newtype StatementExpressionList =
  StatementExpressionList {
    unStatementExpressionList :: [StatementExpression]}
  deriving (Eq, Ord, Read, Show)
_StatementExpressionList = Core.Name "hydra.csharp.syntax.StatementExpressionList"
data ForeachStatement =
  ForeachStatement {
    foreachStatementKind :: (Maybe RefKind),
    foreachStatementType :: LocalVariableType,
    foreachStatementIdentifier :: Identifier,
    foreachStatementExpression :: Expression,
    foreachStatementBody :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_ForeachStatement = Core.Name "hydra.csharp.syntax.ForeachStatement"
_ForeachStatement_kind = Core.Name "kind"
_ForeachStatement_type = Core.Name "type"
_ForeachStatement_identifier = Core.Name "identifier"
_ForeachStatement_expression = Core.Name "expression"
_ForeachStatement_body = Core.Name "body"
data JumpStatement =
  JumpStatementBreak |
  JumpStatementContinue |
  JumpStatementGoto GotoStatement |
  JumpStatementReturn ReturnStatement |
  JumpStatementThrow (Maybe Expression)
  deriving (Eq, Ord, Read, Show)
_JumpStatement = Core.Name "hydra.csharp.syntax.JumpStatement"
_JumpStatement_break = Core.Name "break"
_JumpStatement_continue = Core.Name "continue"
_JumpStatement_goto = Core.Name "goto"
_JumpStatement_return = Core.Name "return"
_JumpStatement_throw = Core.Name "throw"
data GotoStatement =
  GotoStatementIdentifier Identifier |
  GotoStatementCase ConstantExpression |
  GotoStatementDefault
  deriving (Eq, Ord, Read, Show)
_GotoStatement = Core.Name "hydra.csharp.syntax.GotoStatement"
_GotoStatement_identifier = Core.Name "identifier"
_GotoStatement_case = Core.Name "case"
_GotoStatement_default = Core.Name "default"
data ReturnStatement =
  ReturnStatementSimple |
  ReturnStatementValue Expression |
  ReturnStatementRef VariableReference
  deriving (Eq, Ord, Read, Show)
_ReturnStatement = Core.Name "hydra.csharp.syntax.ReturnStatement"
_ReturnStatement_simple = Core.Name "simple"
_ReturnStatement_value = Core.Name "value"
_ReturnStatement_ref = Core.Name "ref"
data TryStatement =
  TryStatement {
    tryStatementBody :: Block,
    tryStatementCatches :: CatchClauses,
    tryStatementFinally :: (Maybe Block)}
  deriving (Eq, Ord, Read, Show)
_TryStatement = Core.Name "hydra.csharp.syntax.TryStatement"
_TryStatement_body = Core.Name "body"
_TryStatement_catches = Core.Name "catches"
_TryStatement_finally = Core.Name "finally"
data CatchClauses =
  CatchClausesSpecific [SpecificCatchClause] |
  CatchClausesGeneral Block
  deriving (Eq, Ord, Read, Show)
_CatchClauses = Core.Name "hydra.csharp.syntax.CatchClauses"
_CatchClauses_specific = Core.Name "specific"
_CatchClauses_general = Core.Name "general"
data SpecificCatchClause =
  SpecificCatchClause {
    specificCatchClauseSpecifier :: (Maybe ExceptionSpecifier),
    specificCatchClauseFilter :: (Maybe BooleanExpression),
    specificCatchClauseBody :: Block}
  deriving (Eq, Ord, Read, Show)
_SpecificCatchClause = Core.Name "hydra.csharp.syntax.SpecificCatchClause"
_SpecificCatchClause_specifier = Core.Name "specifier"
_SpecificCatchClause_filter = Core.Name "filter"
_SpecificCatchClause_body = Core.Name "body"
data ExceptionSpecifier =
  ExceptionSpecifier {
    exceptionSpecifierType :: Type,
    exceptionSpecifierIdentifier :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)
_ExceptionSpecifier = Core.Name "hydra.csharp.syntax.ExceptionSpecifier"
_ExceptionSpecifier_type = Core.Name "type"
_ExceptionSpecifier_identifier = Core.Name "identifier"
data LockStatement =
  LockStatement {
    lockStatementExpression :: Expression,
    lockStatementBody :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_LockStatement = Core.Name "hydra.csharp.syntax.LockStatement"
_LockStatement_expression = Core.Name "expression"
_LockStatement_body = Core.Name "body"
data UsingStatement =
  UsingStatement {
    usingStatementAcquisition :: ResourceAcquisition,
    usingStatementBody :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_UsingStatement = Core.Name "hydra.csharp.syntax.UsingStatement"
_UsingStatement_acquisition = Core.Name "acquisition"
_UsingStatement_body = Core.Name "body"
data ResourceAcquisition =
  ResourceAcquisitionLocal LocalVariableDeclaration |
  ResourceAcquisitionExpression Expression
  deriving (Eq, Ord, Read, Show)
_ResourceAcquisition = Core.Name "hydra.csharp.syntax.ResourceAcquisition"
_ResourceAcquisition_local = Core.Name "local"
_ResourceAcquisition_expression = Core.Name "expression"
data YieldStatement =
  YieldStatementReturn Expression |
  YieldStatementBreak
  deriving (Eq, Ord, Read, Show)
_YieldStatement = Core.Name "hydra.csharp.syntax.YieldStatement"
_YieldStatement_return = Core.Name "return"
_YieldStatement_break = Core.Name "break"
data CompilationUnit =
  CompilationUnit {
    compilationUnitExterns :: [ExternAliasDirective],
    compilationUnitUsings :: [UsingDirective],
    compilationUnitAttributes :: [GlobalAttributeSection],
    compilationUnitMembers :: [NamespaceMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_CompilationUnit = Core.Name "hydra.csharp.syntax.CompilationUnit"
_CompilationUnit_externs = Core.Name "externs"
_CompilationUnit_usings = Core.Name "usings"
_CompilationUnit_attributes = Core.Name "attributes"
_CompilationUnit_members = Core.Name "members"
data NamespaceDeclaration =
  NamespaceDeclaration {
    namespaceDeclarationName :: QualifiedIdentifier,
    namespaceDeclarationBody :: NamespaceBody}
  deriving (Eq, Ord, Read, Show)
_NamespaceDeclaration = Core.Name "hydra.csharp.syntax.NamespaceDeclaration"
_NamespaceDeclaration_name = Core.Name "name"
_NamespaceDeclaration_body = Core.Name "body"
newtype QualifiedIdentifier =
  QualifiedIdentifier {
    unQualifiedIdentifier :: [Identifier]}
  deriving (Eq, Ord, Read, Show)
_QualifiedIdentifier = Core.Name "hydra.csharp.syntax.QualifiedIdentifier"
data NamespaceBody =
  NamespaceBody {
    namespaceBodyExterns :: [ExternAliasDirective],
    namespaceBodyUsings :: [UsingDirective],
    namespaceBodyMembers :: [NamespaceMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_NamespaceBody = Core.Name "hydra.csharp.syntax.NamespaceBody"
_NamespaceBody_externs = Core.Name "externs"
_NamespaceBody_usings = Core.Name "usings"
_NamespaceBody_members = Core.Name "members"
newtype ExternAliasDirective =
  ExternAliasDirective {
    unExternAliasDirective :: Identifier}
  deriving (Eq, Ord, Read, Show)
_ExternAliasDirective = Core.Name "hydra.csharp.syntax.ExternAliasDirective"
data UsingDirective =
  UsingDirectiveAlias UsingAliasDirective |
  UsingDirectiveNamespace NamespaceName |
  UsingDirectiveStatic TypeName
  deriving (Eq, Ord, Read, Show)
_UsingDirective = Core.Name "hydra.csharp.syntax.UsingDirective"
_UsingDirective_alias = Core.Name "alias"
_UsingDirective_namespace = Core.Name "namespace"
_UsingDirective_static = Core.Name "static"
data UsingAliasDirective =
  UsingAliasDirective {
    usingAliasDirectiveAlias :: Identifier,
    usingAliasDirectiveName :: NamespaceOrTypeName}
  deriving (Eq, Ord, Read, Show)
_UsingAliasDirective = Core.Name "hydra.csharp.syntax.UsingAliasDirective"
_UsingAliasDirective_alias = Core.Name "alias"
_UsingAliasDirective_name = Core.Name "name"
data NamespaceMemberDeclaration =
  NamespaceMemberDeclarationNamespace NamespaceDeclaration |
  NamespaceMemberDeclarationType TypeDeclaration
  deriving (Eq, Ord, Read, Show)
_NamespaceMemberDeclaration = Core.Name "hydra.csharp.syntax.NamespaceMemberDeclaration"
_NamespaceMemberDeclaration_namespace = Core.Name "namespace"
_NamespaceMemberDeclaration_type = Core.Name "type"
data TypeDeclaration =
  TypeDeclarationClass ClassDeclaration |
  TypeDeclarationStruct StructDeclaration |
  TypeDeclarationInterface InterfaceDeclaration |
  TypeDeclarationEnum EnumDeclaration |
  TypeDeclarationDelegate DelegateDeclaration
  deriving (Eq, Ord, Read, Show)
_TypeDeclaration = Core.Name "hydra.csharp.syntax.TypeDeclaration"
_TypeDeclaration_class = Core.Name "class"
_TypeDeclaration_struct = Core.Name "struct"
_TypeDeclaration_interface = Core.Name "interface"
_TypeDeclaration_enum = Core.Name "enum"
_TypeDeclaration_delegate = Core.Name "delegate"
data QualifiedAliasMember =
  QualifiedAliasMember {
    qualifiedAliasMemberAlias :: Identifier,
    qualifiedAliasMemberMember :: Identifier,
    qualifiedAliasMemberArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_QualifiedAliasMember = Core.Name "hydra.csharp.syntax.QualifiedAliasMember"
_QualifiedAliasMember_alias = Core.Name "alias"
_QualifiedAliasMember_member = Core.Name "member"
_QualifiedAliasMember_arguments = Core.Name "arguments"
data ClassDeclaration =
  ClassDeclaration {
    classDeclarationAttributes :: [AttributeSection],
    classDeclarationModifiers :: [ClassModifier],
    classDeclarationPartial :: Bool,
    classDeclarationName :: Identifier,
    classDeclarationParameters :: (Maybe TypeParameterList),
    classDeclarationBase :: (Maybe ClassBase),
    classDeclarationConstraints :: [TypeParameterConstraintsClause],
    classDeclarationBody :: ClassBody}
  deriving (Eq, Ord, Read, Show)
_ClassDeclaration = Core.Name "hydra.csharp.syntax.ClassDeclaration"
_ClassDeclaration_attributes = Core.Name "attributes"
_ClassDeclaration_modifiers = Core.Name "modifiers"
_ClassDeclaration_partial = Core.Name "partial"
_ClassDeclaration_name = Core.Name "name"
_ClassDeclaration_parameters = Core.Name "parameters"
_ClassDeclaration_base = Core.Name "base"
_ClassDeclaration_constraints = Core.Name "constraints"
_ClassDeclaration_body = Core.Name "body"
data ClassModifier =
  ClassModifierNew |
  ClassModifierPublic |
  ClassModifierProtected |
  ClassModifierInternal |
  ClassModifierPrivate |
  ClassModifierAbstract |
  ClassModifierSealed |
  ClassModifierStatic |
  ClassModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_ClassModifier = Core.Name "hydra.csharp.syntax.ClassModifier"
_ClassModifier_new = Core.Name "new"
_ClassModifier_public = Core.Name "public"
_ClassModifier_protected = Core.Name "protected"
_ClassModifier_internal = Core.Name "internal"
_ClassModifier_private = Core.Name "private"
_ClassModifier_abstract = Core.Name "abstract"
_ClassModifier_sealed = Core.Name "sealed"
_ClassModifier_static = Core.Name "static"
_ClassModifier_unsafe = Core.Name "unsafe"
newtype TypeParameterList =
  TypeParameterList {
    unTypeParameterList :: [TypeParameterPart]}
  deriving (Eq, Ord, Read, Show)
_TypeParameterList = Core.Name "hydra.csharp.syntax.TypeParameterList"
data TypeParameterPart =
  TypeParameterPart {
    typeParameterPartAttributes :: (Maybe Attributes),
    typeParameterPartName :: TypeParameter}
  deriving (Eq, Ord, Read, Show)
_TypeParameterPart = Core.Name "hydra.csharp.syntax.TypeParameterPart"
_TypeParameterPart_attributes = Core.Name "attributes"
_TypeParameterPart_name = Core.Name "name"
data ClassBase =
  ClassBaseClass (Maybe ClassType) |
  ClassBaseInterfaces [InterfaceType]
  deriving (Eq, Ord, Read, Show)
_ClassBase = Core.Name "hydra.csharp.syntax.ClassBase"
_ClassBase_class = Core.Name "class"
_ClassBase_interfaces = Core.Name "interfaces"
data TypeParameterConstraintsClause =
  TypeParameterConstraintsClause {
    typeParameterConstraintsClauseParameter :: TypeParameter,
    typeParameterConstraintsClauseConstraints :: [TypeParameterConstraints]}
  deriving (Eq, Ord, Read, Show)
_TypeParameterConstraintsClause = Core.Name "hydra.csharp.syntax.TypeParameterConstraintsClause"
_TypeParameterConstraintsClause_parameter = Core.Name "parameter"
_TypeParameterConstraintsClause_constraints = Core.Name "constraints"
data TypeParameterConstraints =
  TypeParameterConstraints {
    typeParameterConstraintsPrimary :: (Maybe PrimaryConstraint),
    typeParameterConstraintsSecondary :: (Maybe SecondaryConstraints),
    typeParameterConstraintsConstructor :: Bool}
  deriving (Eq, Ord, Read, Show)
_TypeParameterConstraints = Core.Name "hydra.csharp.syntax.TypeParameterConstraints"
_TypeParameterConstraints_primary = Core.Name "primary"
_TypeParameterConstraints_secondary = Core.Name "secondary"
_TypeParameterConstraints_constructor = Core.Name "constructor"
data PrimaryConstraint =
  PrimaryConstraintClassType ClassType |
  PrimaryConstraintClass |
  PrimaryConstraintStruct |
  PrimaryConstraintUnmanaged
  deriving (Eq, Ord, Read, Show)
_PrimaryConstraint = Core.Name "hydra.csharp.syntax.PrimaryConstraint"
_PrimaryConstraint_classType = Core.Name "classType"
_PrimaryConstraint_class = Core.Name "class"
_PrimaryConstraint_struct = Core.Name "struct"
_PrimaryConstraint_unmanaged = Core.Name "unmanaged"
newtype SecondaryConstraints =
  SecondaryConstraints {
    unSecondaryConstraints :: [SecondaryConstraint]}
  deriving (Eq, Ord, Read, Show)
_SecondaryConstraints = Core.Name "hydra.csharp.syntax.SecondaryConstraints"
data SecondaryConstraint =
  SecondaryConstraintInterface InterfaceType |
  SecondaryConstraintParameter TypeParameter
  deriving (Eq, Ord, Read, Show)
_SecondaryConstraint = Core.Name "hydra.csharp.syntax.SecondaryConstraint"
_SecondaryConstraint_interface = Core.Name "interface"
_SecondaryConstraint_parameter = Core.Name "parameter"
newtype ClassBody =
  ClassBody {
    unClassBody :: [ClassMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_ClassBody = Core.Name "hydra.csharp.syntax.ClassBody"
data ClassMemberDeclaration =
  ClassMemberDeclarationConstant ConstantDeclaration |
  ClassMemberDeclarationField FieldDeclaration |
  ClassMemberDeclarationMethod MethodDeclaration |
  ClassMemberDeclarationProperty PropertyDeclaration |
  ClassMemberDeclarationEvent EventDeclaration |
  ClassMemberDeclarationIndexer IndexerDeclaration |
  ClassMemberDeclarationOperator OperatorDeclaration |
  ClassMemberDeclarationConstructor ConstructorDeclaration |
  ClassMemberDeclarationFinalizer FinalizerDeclaration |
  ClassMemberDeclarationStaticConstructor StaticConstructorDeclaration |
  ClassMemberDeclarationType TypeDeclaration
  deriving (Eq, Ord, Read, Show)
_ClassMemberDeclaration = Core.Name "hydra.csharp.syntax.ClassMemberDeclaration"
_ClassMemberDeclaration_constant = Core.Name "constant"
_ClassMemberDeclaration_field = Core.Name "field"
_ClassMemberDeclaration_method = Core.Name "method"
_ClassMemberDeclaration_property = Core.Name "property"
_ClassMemberDeclaration_event = Core.Name "event"
_ClassMemberDeclaration_indexer = Core.Name "indexer"
_ClassMemberDeclaration_operator = Core.Name "operator"
_ClassMemberDeclaration_constructor = Core.Name "constructor"
_ClassMemberDeclaration_finalizer = Core.Name "finalizer"
_ClassMemberDeclaration_staticConstructor = Core.Name "staticConstructor"
_ClassMemberDeclaration_type = Core.Name "type"
data ConstantDeclaration =
  ConstantDeclaration {
    constantDeclarationAttributes :: (Maybe Attributes),
    constantDeclarationModifiers :: [ConstantModifier],
    constantDeclarationType :: Type,
    constantDeclarationDeclarators :: [ConstantDeclarator]}
  deriving (Eq, Ord, Read, Show)
_ConstantDeclaration = Core.Name "hydra.csharp.syntax.ConstantDeclaration"
_ConstantDeclaration_attributes = Core.Name "attributes"
_ConstantDeclaration_modifiers = Core.Name "modifiers"
_ConstantDeclaration_type = Core.Name "type"
_ConstantDeclaration_declarators = Core.Name "declarators"
data ConstantModifier =
  ConstantModifierNew |
  ConstantModifierPublic |
  ConstantModifierProtected |
  ConstantModifierInternal |
  ConstantModifierPrivate
  deriving (Eq, Ord, Read, Show)
_ConstantModifier = Core.Name "hydra.csharp.syntax.ConstantModifier"
_ConstantModifier_new = Core.Name "new"
_ConstantModifier_public = Core.Name "public"
_ConstantModifier_protected = Core.Name "protected"
_ConstantModifier_internal = Core.Name "internal"
_ConstantModifier_private = Core.Name "private"
data FieldDeclaration =
  FieldDeclaration {
    fieldDeclarationAttributes :: (Maybe Attributes),
    fieldDeclarationModifiers :: [FieldModifier],
    fieldDeclarationType :: Type,
    fieldDeclarationDeclarators :: [VariableDeclarator]}
  deriving (Eq, Ord, Read, Show)
_FieldDeclaration = Core.Name "hydra.csharp.syntax.FieldDeclaration"
_FieldDeclaration_attributes = Core.Name "attributes"
_FieldDeclaration_modifiers = Core.Name "modifiers"
_FieldDeclaration_type = Core.Name "type"
_FieldDeclaration_declarators = Core.Name "declarators"
data FieldModifier =
  FieldModifierNew |
  FieldModifierPublic |
  FieldModifierProtected |
  FieldModifierInternal |
  FieldModifierPrivate |
  FieldModifierStatic |
  FieldModifierReadonly |
  FieldModifierVolatile |
  FieldModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_FieldModifier = Core.Name "hydra.csharp.syntax.FieldModifier"
_FieldModifier_new = Core.Name "new"
_FieldModifier_public = Core.Name "public"
_FieldModifier_protected = Core.Name "protected"
_FieldModifier_internal = Core.Name "internal"
_FieldModifier_private = Core.Name "private"
_FieldModifier_static = Core.Name "static"
_FieldModifier_readonly = Core.Name "readonly"
_FieldModifier_volatile = Core.Name "volatile"
_FieldModifier_unsafe = Core.Name "unsafe"
newtype VariableDeclarators =
  VariableDeclarators {
    unVariableDeclarators :: [VariableDeclarator]}
  deriving (Eq, Ord, Read, Show)
_VariableDeclarators = Core.Name "hydra.csharp.syntax.VariableDeclarators"
data VariableDeclarator =
  VariableDeclarator {
    variableDeclaratorIdentifier :: Identifier,
    variableDeclaratorInitializer :: (Maybe VariableInitializer)}
  deriving (Eq, Ord, Read, Show)
_VariableDeclarator = Core.Name "hydra.csharp.syntax.VariableDeclarator"
_VariableDeclarator_identifier = Core.Name "identifier"
_VariableDeclarator_initializer = Core.Name "initializer"
data MethodDeclaration =
  MethodDeclarationStandard StandardMethodDeclaration |
  MethodDeclarationRefReturn RefReturnMethodDeclaration
  deriving (Eq, Ord, Read, Show)
_MethodDeclaration = Core.Name "hydra.csharp.syntax.MethodDeclaration"
_MethodDeclaration_standard = Core.Name "standard"
_MethodDeclaration_refReturn = Core.Name "refReturn"
data StandardMethodDeclaration =
  StandardMethodDeclaration {
    standardMethodDeclarationAttributes :: (Maybe Attributes),
    standardMethodDeclarationModifiers :: [MethodModifier],
    standardMethodDeclarationReturnType :: ReturnType,
    standardMethodDeclarationHeader :: MethodHeader,
    standardMethodDeclarationBody :: MethodBody}
  deriving (Eq, Ord, Read, Show)
_StandardMethodDeclaration = Core.Name "hydra.csharp.syntax.StandardMethodDeclaration"
_StandardMethodDeclaration_attributes = Core.Name "attributes"
_StandardMethodDeclaration_modifiers = Core.Name "modifiers"
_StandardMethodDeclaration_returnType = Core.Name "returnType"
_StandardMethodDeclaration_header = Core.Name "header"
_StandardMethodDeclaration_body = Core.Name "body"
data RefReturnMethodDeclaration =
  RefReturnMethodDeclaration {
    refReturnMethodDeclarationAttributes :: (Maybe Attributes),
    refReturnMethodDeclarationModifiers :: [RefMethodModifier],
    refReturnMethodDeclarationKind :: RefKind,
    refReturnMethodDeclarationReturnType :: ReturnType,
    refReturnMethodDeclarationHeader :: MethodHeader,
    refReturnMethodDeclarationBody :: RefMethodBody}
  deriving (Eq, Ord, Read, Show)
_RefReturnMethodDeclaration = Core.Name "hydra.csharp.syntax.RefReturnMethodDeclaration"
_RefReturnMethodDeclaration_attributes = Core.Name "attributes"
_RefReturnMethodDeclaration_modifiers = Core.Name "modifiers"
_RefReturnMethodDeclaration_kind = Core.Name "kind"
_RefReturnMethodDeclaration_returnType = Core.Name "returnType"
_RefReturnMethodDeclaration_header = Core.Name "header"
_RefReturnMethodDeclaration_body = Core.Name "body"
data MethodModifiers =
  MethodModifiers {
    methodModifiersModifiers :: [MethodModifier],
    methodModifiersPartial :: Bool}
  deriving (Eq, Ord, Read, Show)
_MethodModifiers = Core.Name "hydra.csharp.syntax.MethodModifiers"
_MethodModifiers_modifiers = Core.Name "modifiers"
_MethodModifiers_partial = Core.Name "partial"
data RefKind =
  RefKindRef |
  RefKindRefReadonly
  deriving (Eq, Ord, Read, Show)
_RefKind = Core.Name "hydra.csharp.syntax.RefKind"
_RefKind_ref = Core.Name "ref"
_RefKind_refReadonly = Core.Name "refReadonly"
data MethodHeader =
  MethodHeader {
    methodHeaderName :: MemberName,
    methodHeaderTypeParameters :: (Maybe TypeParameterList),
    methodHeaderParameters :: (Maybe FormalParameterList),
    methodHeaderConstraints :: [TypeParameterConstraintsClause]}
  deriving (Eq, Ord, Read, Show)
_MethodHeader = Core.Name "hydra.csharp.syntax.MethodHeader"
_MethodHeader_name = Core.Name "name"
_MethodHeader_typeParameters = Core.Name "typeParameters"
_MethodHeader_parameters = Core.Name "parameters"
_MethodHeader_constraints = Core.Name "constraints"
data MethodModifier =
  MethodModifierRef RefMethodModifier |
  MethodModifierAsync
  deriving (Eq, Ord, Read, Show)
_MethodModifier = Core.Name "hydra.csharp.syntax.MethodModifier"
_MethodModifier_ref = Core.Name "ref"
_MethodModifier_async = Core.Name "async"
data RefMethodModifier =
  RefMethodModifierNew |
  RefMethodModifierPublic |
  RefMethodModifierProtected |
  RefMethodModifierInternal |
  RefMethodModifierPrivate |
  RefMethodModifierStatic |
  RefMethodModifierVirtual |
  RefMethodModifierSealed |
  RefMethodModifierOverride |
  RefMethodModifierAbstract |
  RefMethodModifierExtern |
  RefMethodModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_RefMethodModifier = Core.Name "hydra.csharp.syntax.RefMethodModifier"
_RefMethodModifier_new = Core.Name "new"
_RefMethodModifier_public = Core.Name "public"
_RefMethodModifier_protected = Core.Name "protected"
_RefMethodModifier_internal = Core.Name "internal"
_RefMethodModifier_private = Core.Name "private"
_RefMethodModifier_static = Core.Name "static"
_RefMethodModifier_virtual = Core.Name "virtual"
_RefMethodModifier_sealed = Core.Name "sealed"
_RefMethodModifier_override = Core.Name "override"
_RefMethodModifier_abstract = Core.Name "abstract"
_RefMethodModifier_extern = Core.Name "extern"
_RefMethodModifier_unsafe = Core.Name "unsafe"
data ReturnType =
  ReturnTypeRef Type |
  ReturnTypeVoid
  deriving (Eq, Ord, Read, Show)
_ReturnType = Core.Name "hydra.csharp.syntax.ReturnType"
_ReturnType_ref = Core.Name "ref"
_ReturnType_void = Core.Name "void"
data MemberName =
  MemberName {
    memberNameInterfaceType :: (Maybe TypeName),
    memberNameIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)
_MemberName = Core.Name "hydra.csharp.syntax.MemberName"
_MemberName_interfaceType = Core.Name "interfaceType"
_MemberName_identifier = Core.Name "identifier"
data MethodBody =
  MethodBodyBlock Block |
  MethodBodyNullConditionalInvocation NullConditionalInvocationExpression |
  MethodBodyExpression Expression |
  MethodBodyEmpty
  deriving (Eq, Ord, Read, Show)
_MethodBody = Core.Name "hydra.csharp.syntax.MethodBody"
_MethodBody_block = Core.Name "block"
_MethodBody_nullConditionalInvocation = Core.Name "nullConditionalInvocation"
_MethodBody_expression = Core.Name "expression"
_MethodBody_empty = Core.Name "empty"
data RefMethodBody =
  RefMethodBodyBlock Block |
  RefMethodBodyRef VariableReference |
  RefMethodBodyEmpty
  deriving (Eq, Ord, Read, Show)
_RefMethodBody = Core.Name "hydra.csharp.syntax.RefMethodBody"
_RefMethodBody_block = Core.Name "block"
_RefMethodBody_ref = Core.Name "ref"
_RefMethodBody_empty = Core.Name "empty"
data FormalParameterList =
  FormalParameterList {
    formalParameterListFixed :: [FixedParameter],
    formalParameterListArray :: (Maybe ParameterArray)}
  deriving (Eq, Ord, Read, Show)
_FormalParameterList = Core.Name "hydra.csharp.syntax.FormalParameterList"
_FormalParameterList_fixed = Core.Name "fixed"
_FormalParameterList_array = Core.Name "array"
data FixedParameter =
  FixedParameter {
    fixedParameterAttributes :: (Maybe Attributes),
    fixedParameterModifier :: (Maybe ParameterModifier),
    fixedParameterType :: Type,
    fixedParameterIdentifier :: Identifier,
    fixedParameterDefaultArgument :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)
_FixedParameter = Core.Name "hydra.csharp.syntax.FixedParameter"
_FixedParameter_attributes = Core.Name "attributes"
_FixedParameter_modifier = Core.Name "modifier"
_FixedParameter_type = Core.Name "type"
_FixedParameter_identifier = Core.Name "identifier"
_FixedParameter_defaultArgument = Core.Name "defaultArgument"
data ParameterModifier =
  ParameterModifierMode ParameterModeModifier |
  ParameterModifierThis
  deriving (Eq, Ord, Read, Show)
_ParameterModifier = Core.Name "hydra.csharp.syntax.ParameterModifier"
_ParameterModifier_mode = Core.Name "mode"
_ParameterModifier_this = Core.Name "this"
data ParameterModeModifier =
  ParameterModeModifierRef |
  ParameterModeModifierOut |
  ParameterModeModifierIn
  deriving (Eq, Ord, Read, Show)
_ParameterModeModifier = Core.Name "hydra.csharp.syntax.ParameterModeModifier"
_ParameterModeModifier_ref = Core.Name "ref"
_ParameterModeModifier_out = Core.Name "out"
_ParameterModeModifier_in = Core.Name "in"
data ParameterArray =
  ParameterArray {
    parameterArrayAttributes :: (Maybe Attributes),
    parameterArrayType :: ArrayType,
    parameterArrayIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)
_ParameterArray = Core.Name "hydra.csharp.syntax.ParameterArray"
_ParameterArray_attributes = Core.Name "attributes"
_ParameterArray_type = Core.Name "type"
_ParameterArray_identifier = Core.Name "identifier"
data PropertyDeclaration =
  PropertyDeclarationStandard StandardPropertyDeclaration |
  PropertyDeclarationRefReturn RefReturnPropertyDeclaration
  deriving (Eq, Ord, Read, Show)
_PropertyDeclaration = Core.Name "hydra.csharp.syntax.PropertyDeclaration"
_PropertyDeclaration_standard = Core.Name "standard"
_PropertyDeclaration_refReturn = Core.Name "refReturn"
data StandardPropertyDeclaration =
  StandardPropertyDeclaration {
    standardPropertyDeclarationAttributes :: (Maybe Attributes),
    standardPropertyDeclarationModifiers :: [PropertyModifier],
    standardPropertyDeclarationType :: Type,
    standardPropertyDeclarationName :: MemberName,
    standardPropertyDeclarationBody :: PropertyBody}
  deriving (Eq, Ord, Read, Show)
_StandardPropertyDeclaration = Core.Name "hydra.csharp.syntax.StandardPropertyDeclaration"
_StandardPropertyDeclaration_attributes = Core.Name "attributes"
_StandardPropertyDeclaration_modifiers = Core.Name "modifiers"
_StandardPropertyDeclaration_type = Core.Name "type"
_StandardPropertyDeclaration_name = Core.Name "name"
_StandardPropertyDeclaration_body = Core.Name "body"
data RefReturnPropertyDeclaration =
  RefReturnPropertyDeclaration {
    refReturnPropertyDeclarationAttributes :: (Maybe Attributes),
    refReturnPropertyDeclarationModifiers :: [PropertyModifier],
    refReturnPropertyDeclarationRefKind :: RefKind,
    refReturnPropertyDeclarationType :: Type,
    refReturnPropertyDeclarationName :: MemberName,
    refReturnPropertyDeclarationBody :: RefPropertyBody}
  deriving (Eq, Ord, Read, Show)
_RefReturnPropertyDeclaration = Core.Name "hydra.csharp.syntax.RefReturnPropertyDeclaration"
_RefReturnPropertyDeclaration_attributes = Core.Name "attributes"
_RefReturnPropertyDeclaration_modifiers = Core.Name "modifiers"
_RefReturnPropertyDeclaration_refKind = Core.Name "refKind"
_RefReturnPropertyDeclaration_type = Core.Name "type"
_RefReturnPropertyDeclaration_name = Core.Name "name"
_RefReturnPropertyDeclaration_body = Core.Name "body"
data PropertyModifier =
  PropertyModifierNew |
  PropertyModifierPublic |
  PropertyModifierProtected |
  PropertyModifierInternal |
  PropertyModifierPrivate |
  PropertyModifierStatic |
  PropertyModifierVirtual |
  PropertyModifierSealed |
  PropertyModifierOverride |
  PropertyModifierAbstract |
  PropertyModifierExtern |
  PropertyModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_PropertyModifier = Core.Name "hydra.csharp.syntax.PropertyModifier"
_PropertyModifier_new = Core.Name "new"
_PropertyModifier_public = Core.Name "public"
_PropertyModifier_protected = Core.Name "protected"
_PropertyModifier_internal = Core.Name "internal"
_PropertyModifier_private = Core.Name "private"
_PropertyModifier_static = Core.Name "static"
_PropertyModifier_virtual = Core.Name "virtual"
_PropertyModifier_sealed = Core.Name "sealed"
_PropertyModifier_override = Core.Name "override"
_PropertyModifier_abstract = Core.Name "abstract"
_PropertyModifier_extern = Core.Name "extern"
_PropertyModifier_unsafe = Core.Name "unsafe"
data PropertyBody =
  PropertyBodyBlock BlockPropertyBody |
  PropertyBodyExpression Expression
  deriving (Eq, Ord, Read, Show)
_PropertyBody = Core.Name "hydra.csharp.syntax.PropertyBody"
_PropertyBody_block = Core.Name "block"
_PropertyBody_expression = Core.Name "expression"
data BlockPropertyBody =
  BlockPropertyBody {
    blockPropertyBodyAccessors :: AccessorDeclarations,
    blockPropertyBodyInitializer :: (Maybe VariableInitializer)}
  deriving (Eq, Ord, Read, Show)
_BlockPropertyBody = Core.Name "hydra.csharp.syntax.BlockPropertyBody"
_BlockPropertyBody_accessors = Core.Name "accessors"
_BlockPropertyBody_initializer = Core.Name "initializer"
data RefPropertyBody =
  RefPropertyBodyBlock RefGetAccessorDeclaration |
  RefPropertyBodyRef VariableReference
  deriving (Eq, Ord, Read, Show)
_RefPropertyBody = Core.Name "hydra.csharp.syntax.RefPropertyBody"
_RefPropertyBody_block = Core.Name "block"
_RefPropertyBody_ref = Core.Name "ref"
data AccessorDeclarations =
  AccessorDeclarationsGet (Maybe AccessorDeclaration) |
  AccessorDeclarationsSet (Maybe AccessorDeclaration)
  deriving (Eq, Ord, Read, Show)
_AccessorDeclarations = Core.Name "hydra.csharp.syntax.AccessorDeclarations"
_AccessorDeclarations_get = Core.Name "get"
_AccessorDeclarations_set = Core.Name "set"
data AccessorDeclaration =
  AccessorDeclaration {
    accessorDeclarationAttributes :: (Maybe Attributes),
    accessorDeclarationModifier :: (Maybe AccessorModifier),
    accessorDeclarationBody :: AccessorBody}
  deriving (Eq, Ord, Read, Show)
_AccessorDeclaration = Core.Name "hydra.csharp.syntax.AccessorDeclaration"
_AccessorDeclaration_attributes = Core.Name "attributes"
_AccessorDeclaration_modifier = Core.Name "modifier"
_AccessorDeclaration_body = Core.Name "body"
data AccessorModifier =
  AccessorModifierProtected |
  AccessorModifierInternal |
  AccessorModifierPrivate |
  AccessorModifierProtectedInternal |
  AccessorModifierInternalProtected |
  AccessorModifierProtectedPrivate |
  AccessorModifierPrivateProtected
  deriving (Eq, Ord, Read, Show)
_AccessorModifier = Core.Name "hydra.csharp.syntax.AccessorModifier"
_AccessorModifier_protected = Core.Name "protected"
_AccessorModifier_internal = Core.Name "internal"
_AccessorModifier_private = Core.Name "private"
_AccessorModifier_protectedInternal = Core.Name "protectedInternal"
_AccessorModifier_internalProtected = Core.Name "internalProtected"
_AccessorModifier_protectedPrivate = Core.Name "protectedPrivate"
_AccessorModifier_privateProtected = Core.Name "privateProtected"
data AccessorBody =
  AccessorBodyBlock Block |
  AccessorBodyExpression Expression |
  AccessorBodyEmpty
  deriving (Eq, Ord, Read, Show)
_AccessorBody = Core.Name "hydra.csharp.syntax.AccessorBody"
_AccessorBody_block = Core.Name "block"
_AccessorBody_expression = Core.Name "expression"
_AccessorBody_empty = Core.Name "empty"
data RefGetAccessorDeclaration =
  RefGetAccessorDeclaration {
    refGetAccessorDeclarationAttributes :: (Maybe Attributes),
    refGetAccessorDeclarationModifier :: (Maybe AccessorModifier),
    refGetAccessorDeclarationBody :: RefAccessorBody}
  deriving (Eq, Ord, Read, Show)
_RefGetAccessorDeclaration = Core.Name "hydra.csharp.syntax.RefGetAccessorDeclaration"
_RefGetAccessorDeclaration_attributes = Core.Name "attributes"
_RefGetAccessorDeclaration_modifier = Core.Name "modifier"
_RefGetAccessorDeclaration_body = Core.Name "body"
data RefAccessorBody =
  RefAccessorBodyBlock Block |
  RefAccessorBodyRef VariableReference |
  RefAccessorBodyEmpty
  deriving (Eq, Ord, Read, Show)
_RefAccessorBody = Core.Name "hydra.csharp.syntax.RefAccessorBody"
_RefAccessorBody_block = Core.Name "block"
_RefAccessorBody_ref = Core.Name "ref"
_RefAccessorBody_empty = Core.Name "empty"
data EventDeclaration =
  EventDeclarationStandard StandardEventDeclaration |
  EventDeclarationAccessors AccessorsEventDeclaration
  deriving (Eq, Ord, Read, Show)
_EventDeclaration = Core.Name "hydra.csharp.syntax.EventDeclaration"
_EventDeclaration_standard = Core.Name "standard"
_EventDeclaration_accessors = Core.Name "accessors"
data StandardEventDeclaration =
  StandardEventDeclaration {
    standardEventDeclarationAttributes :: (Maybe Attributes),
    standardEventDeclarationModifiers :: [EventModifier],
    standardEventDeclarationType :: Type,
    standardEventDeclarationDeclarators :: VariableDeclarators}
  deriving (Eq, Ord, Read, Show)
_StandardEventDeclaration = Core.Name "hydra.csharp.syntax.StandardEventDeclaration"
_StandardEventDeclaration_attributes = Core.Name "attributes"
_StandardEventDeclaration_modifiers = Core.Name "modifiers"
_StandardEventDeclaration_type = Core.Name "type"
_StandardEventDeclaration_declarators = Core.Name "declarators"
data AccessorsEventDeclaration =
  AccessorsEventDeclaration {
    accessorsEventDeclarationAttributes :: (Maybe Attributes),
    accessorsEventDeclarationModifiers :: [EventModifier],
    accessorsEventDeclarationType :: Type,
    accessorsEventDeclarationName :: MemberName,
    accessorsEventDeclarationAccessors :: EventAccessorDeclarations}
  deriving (Eq, Ord, Read, Show)
_AccessorsEventDeclaration = Core.Name "hydra.csharp.syntax.AccessorsEventDeclaration"
_AccessorsEventDeclaration_attributes = Core.Name "attributes"
_AccessorsEventDeclaration_modifiers = Core.Name "modifiers"
_AccessorsEventDeclaration_type = Core.Name "type"
_AccessorsEventDeclaration_name = Core.Name "name"
_AccessorsEventDeclaration_accessors = Core.Name "accessors"
data EventModifier =
  EventModifierNew |
  EventModifierPublic |
  EventModifierProtected |
  EventModifierInternal |
  EventModifierPrivate |
  EventModifierStatic |
  EventModifierVirtual |
  EventModifierSealed |
  EventModifierOverride |
  EventModifierAbstract |
  EventModifierExtern |
  EventModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_EventModifier = Core.Name "hydra.csharp.syntax.EventModifier"
_EventModifier_new = Core.Name "new"
_EventModifier_public = Core.Name "public"
_EventModifier_protected = Core.Name "protected"
_EventModifier_internal = Core.Name "internal"
_EventModifier_private = Core.Name "private"
_EventModifier_static = Core.Name "static"
_EventModifier_virtual = Core.Name "virtual"
_EventModifier_sealed = Core.Name "sealed"
_EventModifier_override = Core.Name "override"
_EventModifier_abstract = Core.Name "abstract"
_EventModifier_extern = Core.Name "extern"
_EventModifier_unsafe = Core.Name "unsafe"
data EventAccessorDeclarations =
  EventAccessorDeclarationsAdd AddRemoveAccessorDeclaration |
  EventAccessorDeclarationsRemove AddRemoveAccessorDeclaration
  deriving (Eq, Ord, Read, Show)
_EventAccessorDeclarations = Core.Name "hydra.csharp.syntax.EventAccessorDeclarations"
_EventAccessorDeclarations_add = Core.Name "add"
_EventAccessorDeclarations_remove = Core.Name "remove"
data AddRemoveAccessorDeclaration =
  AddRemoveAccessorDeclaration {
    addRemoveAccessorDeclarationAttributes :: (Maybe Attributes),
    addRemoveAccessorDeclarationBody :: Block}
  deriving (Eq, Ord, Read, Show)
_AddRemoveAccessorDeclaration = Core.Name "hydra.csharp.syntax.AddRemoveAccessorDeclaration"
_AddRemoveAccessorDeclaration_attributes = Core.Name "attributes"
_AddRemoveAccessorDeclaration_body = Core.Name "body"
data IndexerDeclaration =
  IndexerDeclarationStandard StandardIndexerDeclaration |
  IndexerDeclarationRef RefIndexerDeclaration
  deriving (Eq, Ord, Read, Show)
_IndexerDeclaration = Core.Name "hydra.csharp.syntax.IndexerDeclaration"
_IndexerDeclaration_standard = Core.Name "standard"
_IndexerDeclaration_ref = Core.Name "ref"
data StandardIndexerDeclaration =
  StandardIndexerDeclaration {
    standardIndexerDeclarationAttributes :: (Maybe Attributes),
    standardIndexerDeclarationModifiers :: [IndexerModifier],
    standardIndexerDeclarationDeclarator :: IndexerDeclarator,
    standardIndexerDeclarationBody :: IndexerBody}
  deriving (Eq, Ord, Read, Show)
_StandardIndexerDeclaration = Core.Name "hydra.csharp.syntax.StandardIndexerDeclaration"
_StandardIndexerDeclaration_attributes = Core.Name "attributes"
_StandardIndexerDeclaration_modifiers = Core.Name "modifiers"
_StandardIndexerDeclaration_declarator = Core.Name "declarator"
_StandardIndexerDeclaration_body = Core.Name "body"
data RefIndexerDeclaration =
  RefIndexerDeclaration {
    refIndexerDeclarationAttributes :: (Maybe Attributes),
    refIndexerDeclarationModifiers :: [IndexerModifier],
    refIndexerDeclarationRefKind :: RefKind,
    refIndexerDeclarationDeclarator :: IndexerDeclarator,
    refIndexerDeclarationBody :: RefIndexerBody}
  deriving (Eq, Ord, Read, Show)
_RefIndexerDeclaration = Core.Name "hydra.csharp.syntax.RefIndexerDeclaration"
_RefIndexerDeclaration_attributes = Core.Name "attributes"
_RefIndexerDeclaration_modifiers = Core.Name "modifiers"
_RefIndexerDeclaration_refKind = Core.Name "refKind"
_RefIndexerDeclaration_declarator = Core.Name "declarator"
_RefIndexerDeclaration_body = Core.Name "body"
data IndexerModifier =
  IndexerModifierNew |
  IndexerModifierPublic |
  IndexerModifierProtected |
  IndexerModifierInternal |
  IndexerModifierPrivate |
  IndexerModifierVirtual |
  IndexerModifierSealed |
  IndexerModifierOverride |
  IndexerModifierAbstract |
  IndexerModifierExtern |
  IndexerModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_IndexerModifier = Core.Name "hydra.csharp.syntax.IndexerModifier"
_IndexerModifier_new = Core.Name "new"
_IndexerModifier_public = Core.Name "public"
_IndexerModifier_protected = Core.Name "protected"
_IndexerModifier_internal = Core.Name "internal"
_IndexerModifier_private = Core.Name "private"
_IndexerModifier_virtual = Core.Name "virtual"
_IndexerModifier_sealed = Core.Name "sealed"
_IndexerModifier_override = Core.Name "override"
_IndexerModifier_abstract = Core.Name "abstract"
_IndexerModifier_extern = Core.Name "extern"
_IndexerModifier_unsafe = Core.Name "unsafe"
data IndexerDeclarator =
  IndexerDeclarator {
    indexerDeclaratorType :: Type,
    indexerDeclaratorInterface :: (Maybe InterfaceType),
    indexerDeclaratorParameters :: FormalParameterList}
  deriving (Eq, Ord, Read, Show)
_IndexerDeclarator = Core.Name "hydra.csharp.syntax.IndexerDeclarator"
_IndexerDeclarator_type = Core.Name "type"
_IndexerDeclarator_interface = Core.Name "interface"
_IndexerDeclarator_parameters = Core.Name "parameters"
data IndexerBody =
  IndexerBodyBlock AccessorDeclarations |
  IndexerBodyExpression Expression
  deriving (Eq, Ord, Read, Show)
_IndexerBody = Core.Name "hydra.csharp.syntax.IndexerBody"
_IndexerBody_block = Core.Name "block"
_IndexerBody_expression = Core.Name "expression"
data RefIndexerBody =
  RefIndexerBodyBlock RefGetAccessorDeclaration |
  RefIndexerBodyRef VariableReference
  deriving (Eq, Ord, Read, Show)
_RefIndexerBody = Core.Name "hydra.csharp.syntax.RefIndexerBody"
_RefIndexerBody_block = Core.Name "block"
_RefIndexerBody_ref = Core.Name "ref"
data OperatorDeclaration =
  OperatorDeclaration {
    operatorDeclarationAttributes :: (Maybe Attributes),
    operatorDeclarationModifiers :: [OperatorModifier],
    operatorDeclarationDeclarator :: OperatorDeclarator,
    operatorDeclarationBody :: OperatorBody}
  deriving (Eq, Ord, Read, Show)
_OperatorDeclaration = Core.Name "hydra.csharp.syntax.OperatorDeclaration"
_OperatorDeclaration_attributes = Core.Name "attributes"
_OperatorDeclaration_modifiers = Core.Name "modifiers"
_OperatorDeclaration_declarator = Core.Name "declarator"
_OperatorDeclaration_body = Core.Name "body"
data OperatorModifier =
  OperatorModifierPublic |
  OperatorModifierStatic |
  OperatorModifierExtern |
  OperatorModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_OperatorModifier = Core.Name "hydra.csharp.syntax.OperatorModifier"
_OperatorModifier_public = Core.Name "public"
_OperatorModifier_static = Core.Name "static"
_OperatorModifier_extern = Core.Name "extern"
_OperatorModifier_unsafe = Core.Name "unsafe"
data OperatorDeclarator =
  OperatorDeclaratorUnary UnaryOperatorDeclarator |
  OperatorDeclaratorBinary BinaryOperatorDeclarator |
  OperatorDeclaratorConversion ConversionOperatorDeclarator
  deriving (Eq, Ord, Read, Show)
_OperatorDeclarator = Core.Name "hydra.csharp.syntax.OperatorDeclarator"
_OperatorDeclarator_unary = Core.Name "unary"
_OperatorDeclarator_binary = Core.Name "binary"
_OperatorDeclarator_conversion = Core.Name "conversion"
data UnaryOperatorDeclarator =
  UnaryOperatorDeclarator {
    unaryOperatorDeclaratorType :: Type,
    unaryOperatorDeclaratorOperator :: OverloadableUnaryOperator,
    unaryOperatorDeclaratorParameter :: FixedParameter}
  deriving (Eq, Ord, Read, Show)
_UnaryOperatorDeclarator = Core.Name "hydra.csharp.syntax.UnaryOperatorDeclarator"
_UnaryOperatorDeclarator_type = Core.Name "type"
_UnaryOperatorDeclarator_operator = Core.Name "operator"
_UnaryOperatorDeclarator_parameter = Core.Name "parameter"
data OverloadableUnaryOperator =
  OverloadableUnaryOperatorPlus |
  OverloadableUnaryOperatorMinus |
  OverloadableUnaryOperatorNot |
  OverloadableUnaryOperatorComplement |
  OverloadableUnaryOperatorIncrement |
  OverloadableUnaryOperatorDecrement |
  OverloadableUnaryOperatorTrue |
  OverloadableUnaryOperatorFalse
  deriving (Eq, Ord, Read, Show)
_OverloadableUnaryOperator = Core.Name "hydra.csharp.syntax.OverloadableUnaryOperator"
_OverloadableUnaryOperator_plus = Core.Name "plus"
_OverloadableUnaryOperator_minus = Core.Name "minus"
_OverloadableUnaryOperator_not = Core.Name "not"
_OverloadableUnaryOperator_complement = Core.Name "complement"
_OverloadableUnaryOperator_increment = Core.Name "increment"
_OverloadableUnaryOperator_decrement = Core.Name "decrement"
_OverloadableUnaryOperator_true = Core.Name "true"
_OverloadableUnaryOperator_false = Core.Name "false"
data BinaryOperatorDeclarator =
  BinaryOperatorDeclarator {
    binaryOperatorDeclaratorType :: Type,
    binaryOperatorDeclaratorOperator :: OverloadableBinaryOperator,
    binaryOperatorDeclaratorLeft :: FixedParameter,
    binaryOperatorDeclaratorRight :: FixedParameter}
  deriving (Eq, Ord, Read, Show)
_BinaryOperatorDeclarator = Core.Name "hydra.csharp.syntax.BinaryOperatorDeclarator"
_BinaryOperatorDeclarator_type = Core.Name "type"
_BinaryOperatorDeclarator_operator = Core.Name "operator"
_BinaryOperatorDeclarator_left = Core.Name "left"
_BinaryOperatorDeclarator_right = Core.Name "right"
data OverloadableBinaryOperator =
  OverloadableBinaryOperatorAdd |
  OverloadableBinaryOperatorSubtract |
  OverloadableBinaryOperatorMultiply |
  OverloadableBinaryOperatorDivide |
  OverloadableBinaryOperatorModulus |
  OverloadableBinaryOperatorAnd |
  OverloadableBinaryOperatorOr |
  OverloadableBinaryOperatorXor |
  OverloadableBinaryOperatorLeftShift |
  OverloadableBinaryOperatorRightShift |
  OverloadableBinaryOperatorEqual |
  OverloadableBinaryOperatorNotEqual |
  OverloadableBinaryOperatorGreaterThan |
  OverloadableBinaryOperatorLessThan |
  OverloadableBinaryOperatorGreaterThanOrEqual |
  OverloadableBinaryOperatorLessThanOrEqual
  deriving (Eq, Ord, Read, Show)
_OverloadableBinaryOperator = Core.Name "hydra.csharp.syntax.OverloadableBinaryOperator"
_OverloadableBinaryOperator_add = Core.Name "add"
_OverloadableBinaryOperator_subtract = Core.Name "subtract"
_OverloadableBinaryOperator_multiply = Core.Name "multiply"
_OverloadableBinaryOperator_divide = Core.Name "divide"
_OverloadableBinaryOperator_modulus = Core.Name "modulus"
_OverloadableBinaryOperator_and = Core.Name "and"
_OverloadableBinaryOperator_or = Core.Name "or"
_OverloadableBinaryOperator_xor = Core.Name "xor"
_OverloadableBinaryOperator_leftShift = Core.Name "leftShift"
_OverloadableBinaryOperator_rightShift = Core.Name "rightShift"
_OverloadableBinaryOperator_equal = Core.Name "equal"
_OverloadableBinaryOperator_notEqual = Core.Name "notEqual"
_OverloadableBinaryOperator_greaterThan = Core.Name "greaterThan"
_OverloadableBinaryOperator_lessThan = Core.Name "lessThan"
_OverloadableBinaryOperator_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
_OverloadableBinaryOperator_lessThanOrEqual = Core.Name "lessThanOrEqual"
data ConversionOperatorDeclarator =
  ConversionOperatorDeclarator {
    conversionOperatorDeclaratorKind :: ConversionKind,
    conversionOperatorDeclaratorType :: Type,
    conversionOperatorDeclaratorParameter :: FixedParameter}
  deriving (Eq, Ord, Read, Show)
_ConversionOperatorDeclarator = Core.Name "hydra.csharp.syntax.ConversionOperatorDeclarator"
_ConversionOperatorDeclarator_kind = Core.Name "kind"
_ConversionOperatorDeclarator_type = Core.Name "type"
_ConversionOperatorDeclarator_parameter = Core.Name "parameter"
data ConversionKind =
  ConversionKindImplicit |
  ConversionKindExplicit
  deriving (Eq, Ord, Read, Show)
_ConversionKind = Core.Name "hydra.csharp.syntax.ConversionKind"
_ConversionKind_implicit = Core.Name "implicit"
_ConversionKind_explicit = Core.Name "explicit"
data OperatorBody =
  OperatorBodyBlock Block |
  OperatorBodyExpression Expression |
  OperatorBodyEmpty
  deriving (Eq, Ord, Read, Show)
_OperatorBody = Core.Name "hydra.csharp.syntax.OperatorBody"
_OperatorBody_block = Core.Name "block"
_OperatorBody_expression = Core.Name "expression"
_OperatorBody_empty = Core.Name "empty"
data ConstructorDeclaration =
  ConstructorDeclaration {
    constructorDeclarationAttributes :: (Maybe Attributes),
    constructorDeclarationModifiers :: [ConstructorModifier],
    constructorDeclarationDeclarator :: ConstructorDeclarator,
    constructorDeclarationBody :: ConstructorBody}
  deriving (Eq, Ord, Read, Show)
_ConstructorDeclaration = Core.Name "hydra.csharp.syntax.ConstructorDeclaration"
_ConstructorDeclaration_attributes = Core.Name "attributes"
_ConstructorDeclaration_modifiers = Core.Name "modifiers"
_ConstructorDeclaration_declarator = Core.Name "declarator"
_ConstructorDeclaration_body = Core.Name "body"
data ConstructorModifier =
  ConstructorModifierPublic |
  ConstructorModifierProtected |
  ConstructorModifierInternal |
  ConstructorModifierPrivate |
  ConstructorModifierExtern |
  ConstructorModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_ConstructorModifier = Core.Name "hydra.csharp.syntax.ConstructorModifier"
_ConstructorModifier_public = Core.Name "public"
_ConstructorModifier_protected = Core.Name "protected"
_ConstructorModifier_internal = Core.Name "internal"
_ConstructorModifier_private = Core.Name "private"
_ConstructorModifier_extern = Core.Name "extern"
_ConstructorModifier_unsafe = Core.Name "unsafe"
data ConstructorDeclarator =
  ConstructorDeclarator {
    constructorDeclaratorName :: Identifier,
    constructorDeclaratorParameters :: (Maybe FormalParameterList),
    constructorDeclaratorInitializer :: (Maybe ConstructorInitializer)}
  deriving (Eq, Ord, Read, Show)
_ConstructorDeclarator = Core.Name "hydra.csharp.syntax.ConstructorDeclarator"
_ConstructorDeclarator_name = Core.Name "name"
_ConstructorDeclarator_parameters = Core.Name "parameters"
_ConstructorDeclarator_initializer = Core.Name "initializer"
data ConstructorInitializer =
  ConstructorInitializerBase (Maybe ArgumentList) |
  ConstructorInitializerThis (Maybe ArgumentList)
  deriving (Eq, Ord, Read, Show)
_ConstructorInitializer = Core.Name "hydra.csharp.syntax.ConstructorInitializer"
_ConstructorInitializer_base = Core.Name "base"
_ConstructorInitializer_this = Core.Name "this"
data ConstructorBody =
  ConstructorBodyBlock Block |
  ConstructorBodyExpression Expression |
  ConstructorBodyEmpty
  deriving (Eq, Ord, Read, Show)
_ConstructorBody = Core.Name "hydra.csharp.syntax.ConstructorBody"
_ConstructorBody_block = Core.Name "block"
_ConstructorBody_expression = Core.Name "expression"
_ConstructorBody_empty = Core.Name "empty"
data StaticConstructorDeclaration =
  StaticConstructorDeclaration {
    staticConstructorDeclarationAttributes :: (Maybe Attributes),
    staticConstructorDeclarationModifiers :: StaticConstructorModifiers,
    staticConstructorDeclarationName :: Identifier,
    staticConstructorDeclarationBody :: StaticConstructorBody}
  deriving (Eq, Ord, Read, Show)
_StaticConstructorDeclaration = Core.Name "hydra.csharp.syntax.StaticConstructorDeclaration"
_StaticConstructorDeclaration_attributes = Core.Name "attributes"
_StaticConstructorDeclaration_modifiers = Core.Name "modifiers"
_StaticConstructorDeclaration_name = Core.Name "name"
_StaticConstructorDeclaration_body = Core.Name "body"
data StaticConstructorModifiers =
  StaticConstructorModifiers {
    staticConstructorModifiersExtern :: Bool,
    staticConstructorModifiersUnsafe :: Bool}
  deriving (Eq, Ord, Read, Show)
_StaticConstructorModifiers = Core.Name "hydra.csharp.syntax.StaticConstructorModifiers"
_StaticConstructorModifiers_extern = Core.Name "extern"
_StaticConstructorModifiers_unsafe = Core.Name "unsafe"
data StaticConstructorBody =
  StaticConstructorBodyBlock Block |
  StaticConstructorBodyExpression Expression |
  StaticConstructorBodyEmpty
  deriving (Eq, Ord, Read, Show)
_StaticConstructorBody = Core.Name "hydra.csharp.syntax.StaticConstructorBody"
_StaticConstructorBody_block = Core.Name "block"
_StaticConstructorBody_expression = Core.Name "expression"
_StaticConstructorBody_empty = Core.Name "empty"
data FinalizerDeclaration =
  FinalizerDeclaration {
    finalizerDeclarationAttributes :: (Maybe Attributes),
    finalizerDeclarationExtern :: Bool,
    finalizerDeclarationUnsafe :: Bool,
    finalizerDeclarationName :: Identifier,
    finalizerDeclarationBody :: FinalizerBody}
  deriving (Eq, Ord, Read, Show)
_FinalizerDeclaration = Core.Name "hydra.csharp.syntax.FinalizerDeclaration"
_FinalizerDeclaration_attributes = Core.Name "attributes"
_FinalizerDeclaration_extern = Core.Name "extern"
_FinalizerDeclaration_unsafe = Core.Name "unsafe"
_FinalizerDeclaration_name = Core.Name "name"
_FinalizerDeclaration_body = Core.Name "body"
data FinalizerBody =
  FinalizerBodyBlock Block |
  FinalizerBodyExpression Expression |
  FinalizerBodyEmpty
  deriving (Eq, Ord, Read, Show)
_FinalizerBody = Core.Name "hydra.csharp.syntax.FinalizerBody"
_FinalizerBody_block = Core.Name "block"
_FinalizerBody_expression = Core.Name "expression"
_FinalizerBody_empty = Core.Name "empty"
data StructDeclaration =
  StructDeclaration {
    structDeclarationAttributes :: (Maybe Attributes),
    structDeclarationModifiers :: [StructModifier],
    structDeclarationRef :: Bool,
    structDeclarationPartial :: Bool,
    structDeclarationName :: Identifier,
    structDeclarationParameters :: (Maybe TypeParameterList),
    structDeclarationInterfaces :: [InterfaceType],
    structDeclarationConstraints :: [TypeParameterConstraintsClause],
    structDeclarationBody :: [StructMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_StructDeclaration = Core.Name "hydra.csharp.syntax.StructDeclaration"
_StructDeclaration_attributes = Core.Name "attributes"
_StructDeclaration_modifiers = Core.Name "modifiers"
_StructDeclaration_ref = Core.Name "ref"
_StructDeclaration_partial = Core.Name "partial"
_StructDeclaration_name = Core.Name "name"
_StructDeclaration_parameters = Core.Name "parameters"
_StructDeclaration_interfaces = Core.Name "interfaces"
_StructDeclaration_constraints = Core.Name "constraints"
_StructDeclaration_body = Core.Name "body"
data StructModifier =
  StructModifierNew |
  StructModifierPublic |
  StructModifierProtected |
  StructModifierInternal |
  StructModifierPrivate |
  StructModifierReadonly |
  StructModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_StructModifier = Core.Name "hydra.csharp.syntax.StructModifier"
_StructModifier_new = Core.Name "new"
_StructModifier_public = Core.Name "public"
_StructModifier_protected = Core.Name "protected"
_StructModifier_internal = Core.Name "internal"
_StructModifier_private = Core.Name "private"
_StructModifier_readonly = Core.Name "readonly"
_StructModifier_unsafe = Core.Name "unsafe"
data StructMemberDeclaration =
  StructMemberDeclarationConstant ConstantDeclaration |
  StructMemberDeclarationField FieldDeclaration |
  StructMemberDeclarationMethod MethodDeclaration |
  StructMemberDeclarationProperty PropertyDeclaration |
  StructMemberDeclarationEvent EventDeclaration |
  StructMemberDeclarationIndexer IndexerDeclaration |
  StructMemberDeclarationOperator OperatorDeclaration |
  StructMemberDeclarationConstructor ConstructorDeclaration |
  StructMemberDeclarationStaticConstructor StaticConstructorDeclaration |
  StructMemberDeclarationType TypeDeclaration |
  StructMemberDeclarationFixedSizeBuffer FixedSizeBufferDeclaration
  deriving (Eq, Ord, Read, Show)
_StructMemberDeclaration = Core.Name "hydra.csharp.syntax.StructMemberDeclaration"
_StructMemberDeclaration_constant = Core.Name "constant"
_StructMemberDeclaration_field = Core.Name "field"
_StructMemberDeclaration_method = Core.Name "method"
_StructMemberDeclaration_property = Core.Name "property"
_StructMemberDeclaration_event = Core.Name "event"
_StructMemberDeclaration_indexer = Core.Name "indexer"
_StructMemberDeclaration_operator = Core.Name "operator"
_StructMemberDeclaration_constructor = Core.Name "constructor"
_StructMemberDeclaration_staticConstructor = Core.Name "staticConstructor"
_StructMemberDeclaration_type = Core.Name "type"
_StructMemberDeclaration_fixedSizeBuffer = Core.Name "fixedSizeBuffer"
newtype ArrayInitializer =
  ArrayInitializer {
    unArrayInitializer :: [VariableInitializer]}
  deriving (Eq, Ord, Read, Show)
_ArrayInitializer = Core.Name "hydra.csharp.syntax.ArrayInitializer"
data VariableInitializer =
  VariableInitializerExpression Expression |
  VariableInitializerArray ArrayInitializer
  deriving (Eq, Ord, Read, Show)
_VariableInitializer = Core.Name "hydra.csharp.syntax.VariableInitializer"
_VariableInitializer_expression = Core.Name "expression"
_VariableInitializer_array = Core.Name "array"
data InterfaceDeclaration =
  InterfaceDeclaration {
    interfaceDeclarationAttributes :: (Maybe Attributes),
    interfaceDeclarationModifiers :: [InterfaceModifier],
    interfaceDeclarationPartial :: Bool,
    interfaceDeclarationName :: Identifier,
    interfaceDeclarationParameters :: (Maybe VariantTypeParameters),
    interfaceDeclarationBase :: [InterfaceType],
    interfaceDeclarationConstraints :: [TypeParameterConstraintsClause],
    interfaceDeclarationBody :: [InterfaceMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_InterfaceDeclaration = Core.Name "hydra.csharp.syntax.InterfaceDeclaration"
_InterfaceDeclaration_attributes = Core.Name "attributes"
_InterfaceDeclaration_modifiers = Core.Name "modifiers"
_InterfaceDeclaration_partial = Core.Name "partial"
_InterfaceDeclaration_name = Core.Name "name"
_InterfaceDeclaration_parameters = Core.Name "parameters"
_InterfaceDeclaration_base = Core.Name "base"
_InterfaceDeclaration_constraints = Core.Name "constraints"
_InterfaceDeclaration_body = Core.Name "body"
data InterfaceModifier =
  InterfaceModifierNew |
  InterfaceModifierPublic |
  InterfaceModifierProtected |
  InterfaceModifierInternal |
  InterfaceModifierPrivate |
  InterfaceModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_InterfaceModifier = Core.Name "hydra.csharp.syntax.InterfaceModifier"
_InterfaceModifier_new = Core.Name "new"
_InterfaceModifier_public = Core.Name "public"
_InterfaceModifier_protected = Core.Name "protected"
_InterfaceModifier_internal = Core.Name "internal"
_InterfaceModifier_private = Core.Name "private"
_InterfaceModifier_unsafe = Core.Name "unsafe"
newtype VariantTypeParameters =
  VariantTypeParameters {
    unVariantTypeParameters :: [VariantTypeParameter]}
  deriving (Eq, Ord, Read, Show)
_VariantTypeParameters = Core.Name "hydra.csharp.syntax.VariantTypeParameters"
data VariantTypeParameter =
  VariantTypeParameter {
    variantTypeParameterAttributes :: (Maybe Attributes),
    variantTypeParameterVariance :: (Maybe VarianceAnnotation),
    variantTypeParameterParameter :: TypeParameter}
  deriving (Eq, Ord, Read, Show)
_VariantTypeParameter = Core.Name "hydra.csharp.syntax.VariantTypeParameter"
_VariantTypeParameter_attributes = Core.Name "attributes"
_VariantTypeParameter_variance = Core.Name "variance"
_VariantTypeParameter_parameter = Core.Name "parameter"
data VarianceAnnotation =
  VarianceAnnotationIn |
  VarianceAnnotationOut
  deriving (Eq, Ord, Read, Show)
_VarianceAnnotation = Core.Name "hydra.csharp.syntax.VarianceAnnotation"
_VarianceAnnotation_in = Core.Name "in"
_VarianceAnnotation_out = Core.Name "out"
data InterfaceMemberDeclaration =
  InterfaceMemberDeclarationMethod InterfaceMethodDeclaration |
  InterfaceMemberDeclarationProperty InterfacePropertyDeclaration |
  InterfaceMemberDeclarationEvent InterfaceEventDeclaration |
  InterfaceMemberDeclarationIndexer InterfaceIndexerDeclaration
  deriving (Eq, Ord, Read, Show)
_InterfaceMemberDeclaration = Core.Name "hydra.csharp.syntax.InterfaceMemberDeclaration"
_InterfaceMemberDeclaration_method = Core.Name "method"
_InterfaceMemberDeclaration_property = Core.Name "property"
_InterfaceMemberDeclaration_event = Core.Name "event"
_InterfaceMemberDeclaration_indexer = Core.Name "indexer"
data InterfaceMethodDeclaration =
  InterfaceMethodDeclaration {
    interfaceMethodDeclarationAttributes :: (Maybe Attributes),
    interfaceMethodDeclarationNew :: Bool,
    interfaceMethodDeclarationReturnType :: ReturnType,
    interfaceMethodDeclarationRefKind :: (Maybe RefKind),
    interfaceMethodDeclarationHeader :: InterfaceMethodHeader}
  deriving (Eq, Ord, Read, Show)
_InterfaceMethodDeclaration = Core.Name "hydra.csharp.syntax.InterfaceMethodDeclaration"
_InterfaceMethodDeclaration_attributes = Core.Name "attributes"
_InterfaceMethodDeclaration_new = Core.Name "new"
_InterfaceMethodDeclaration_returnType = Core.Name "returnType"
_InterfaceMethodDeclaration_refKind = Core.Name "refKind"
_InterfaceMethodDeclaration_header = Core.Name "header"
data InterfaceMethodHeader =
  InterfaceMethodHeader {
    interfaceMethodHeaderName :: Identifier,
    interfaceMethodHeaderParameters :: (Maybe FormalParameterList),
    interfaceMethodHeaderTypeParameters :: (Maybe TypeParameterList),
    interfaceMethodHeaderConstraints :: [TypeParameterConstraintsClause]}
  deriving (Eq, Ord, Read, Show)
_InterfaceMethodHeader = Core.Name "hydra.csharp.syntax.InterfaceMethodHeader"
_InterfaceMethodHeader_name = Core.Name "name"
_InterfaceMethodHeader_parameters = Core.Name "parameters"
_InterfaceMethodHeader_typeParameters = Core.Name "typeParameters"
_InterfaceMethodHeader_constraints = Core.Name "constraints"
data InterfacePropertyDeclaration =
  InterfacePropertyDeclaration {
    interfacePropertyDeclarationAttributes :: (Maybe Attributes),
    interfacePropertyDeclarationNew :: Bool,
    interfacePropertyDeclarationRefKind :: (Maybe RefKind),
    interfacePropertyDeclarationType :: Type,
    interfacePropertyDeclarationName :: Identifier,
    interfacePropertyDeclarationAccessors :: InterfaceAccessors}
  deriving (Eq, Ord, Read, Show)
_InterfacePropertyDeclaration = Core.Name "hydra.csharp.syntax.InterfacePropertyDeclaration"
_InterfacePropertyDeclaration_attributes = Core.Name "attributes"
_InterfacePropertyDeclaration_new = Core.Name "new"
_InterfacePropertyDeclaration_refKind = Core.Name "refKind"
_InterfacePropertyDeclaration_type = Core.Name "type"
_InterfacePropertyDeclaration_name = Core.Name "name"
_InterfacePropertyDeclaration_accessors = Core.Name "accessors"
data InterfaceAccessors =
  InterfaceAccessors {
    interfaceAccessorsAttributes :: (Maybe Attributes),
    interfaceAccessorsGet :: (Maybe Attributes),
    interfaceAccessorsSet :: (Maybe Attributes)}
  deriving (Eq, Ord, Read, Show)
_InterfaceAccessors = Core.Name "hydra.csharp.syntax.InterfaceAccessors"
_InterfaceAccessors_attributes = Core.Name "attributes"
_InterfaceAccessors_get = Core.Name "get"
_InterfaceAccessors_set = Core.Name "set"
data InterfaceEventDeclaration =
  InterfaceEventDeclaration {
    interfaceEventDeclarationAttributes :: (Maybe Attributes),
    interfaceEventDeclarationNew :: Bool,
    interfaceEventDeclarationType :: Type,
    interfaceEventDeclarationName :: Identifier}
  deriving (Eq, Ord, Read, Show)
_InterfaceEventDeclaration = Core.Name "hydra.csharp.syntax.InterfaceEventDeclaration"
_InterfaceEventDeclaration_attributes = Core.Name "attributes"
_InterfaceEventDeclaration_new = Core.Name "new"
_InterfaceEventDeclaration_type = Core.Name "type"
_InterfaceEventDeclaration_name = Core.Name "name"
data InterfaceIndexerDeclaration =
  InterfaceIndexerDeclaration {
    interfaceIndexerDeclarationAttributes :: (Maybe Attributes),
    interfaceIndexerDeclarationNew :: Bool,
    interfaceIndexerDeclarationRefKind :: (Maybe RefKind),
    interfaceIndexerDeclarationType :: Type,
    interfaceIndexerDeclarationParameters :: FormalParameterList,
    interfaceIndexerDeclarationAccessors :: InterfaceAccessors}
  deriving (Eq, Ord, Read, Show)
_InterfaceIndexerDeclaration = Core.Name "hydra.csharp.syntax.InterfaceIndexerDeclaration"
_InterfaceIndexerDeclaration_attributes = Core.Name "attributes"
_InterfaceIndexerDeclaration_new = Core.Name "new"
_InterfaceIndexerDeclaration_refKind = Core.Name "refKind"
_InterfaceIndexerDeclaration_type = Core.Name "type"
_InterfaceIndexerDeclaration_parameters = Core.Name "parameters"
_InterfaceIndexerDeclaration_accessors = Core.Name "accessors"
data EnumDeclaration =
  EnumDeclaration {
    enumDeclarationAttributes :: (Maybe Attributes),
    enumDeclarationModifiers :: [EnumModifier],
    enumDeclarationName :: Identifier,
    enumDeclarationBase :: (Maybe EnumBase),
    enumDeclarationBody :: (Maybe EnumBody)}
  deriving (Eq, Ord, Read, Show)
_EnumDeclaration = Core.Name "hydra.csharp.syntax.EnumDeclaration"
_EnumDeclaration_attributes = Core.Name "attributes"
_EnumDeclaration_modifiers = Core.Name "modifiers"
_EnumDeclaration_name = Core.Name "name"
_EnumDeclaration_base = Core.Name "base"
_EnumDeclaration_body = Core.Name "body"
data EnumBase =
  EnumBaseType IntegralType |
  EnumBaseName TypeName
  deriving (Eq, Ord, Read, Show)
_EnumBase = Core.Name "hydra.csharp.syntax.EnumBase"
_EnumBase_type = Core.Name "type"
_EnumBase_name = Core.Name "name"
newtype EnumBody =
  EnumBody {
    unEnumBody :: [EnumMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)
_EnumBody = Core.Name "hydra.csharp.syntax.EnumBody"
data EnumModifier =
  EnumModifierNew |
  EnumModifierPublic |
  EnumModifierProtected |
  EnumModifierInternal |
  EnumModifierPrivate
  deriving (Eq, Ord, Read, Show)
_EnumModifier = Core.Name "hydra.csharp.syntax.EnumModifier"
_EnumModifier_new = Core.Name "new"
_EnumModifier_public = Core.Name "public"
_EnumModifier_protected = Core.Name "protected"
_EnumModifier_internal = Core.Name "internal"
_EnumModifier_private = Core.Name "private"
data EnumMemberDeclaration =
  EnumMemberDeclaration {
    enumMemberDeclarationAttributes :: (Maybe Attributes),
    enumMemberDeclarationName :: Identifier,
    enumMemberDeclarationValue :: (Maybe ConstantExpression)}
  deriving (Eq, Ord, Read, Show)
_EnumMemberDeclaration = Core.Name "hydra.csharp.syntax.EnumMemberDeclaration"
_EnumMemberDeclaration_attributes = Core.Name "attributes"
_EnumMemberDeclaration_name = Core.Name "name"
_EnumMemberDeclaration_value = Core.Name "value"
data DelegateDeclaration =
  DelegateDeclaration {
    delegateDeclarationAttributes :: (Maybe Attributes),
    delegateDeclarationModifiers :: [DelegateModifier],
    delegateDeclarationReturnType :: ReturnType,
    delegateDeclarationRefKind :: (Maybe RefKind),
    delegateDeclarationRefReturnType :: (Maybe Type),
    delegateDeclarationHeader :: DelegateHeader}
  deriving (Eq, Ord, Read, Show)
_DelegateDeclaration = Core.Name "hydra.csharp.syntax.DelegateDeclaration"
_DelegateDeclaration_attributes = Core.Name "attributes"
_DelegateDeclaration_modifiers = Core.Name "modifiers"
_DelegateDeclaration_returnType = Core.Name "returnType"
_DelegateDeclaration_refKind = Core.Name "refKind"
_DelegateDeclaration_refReturnType = Core.Name "refReturnType"
_DelegateDeclaration_header = Core.Name "header"
data DelegateHeader =
  DelegateHeader {
    delegateHeaderName :: Identifier,
    delegateHeaderTypeParameters :: (Maybe VariantTypeParameters),
    delegateHeaderParameters :: (Maybe FormalParameterList),
    delegateHeaderConstraints :: [TypeParameterConstraintsClause]}
  deriving (Eq, Ord, Read, Show)
_DelegateHeader = Core.Name "hydra.csharp.syntax.DelegateHeader"
_DelegateHeader_name = Core.Name "name"
_DelegateHeader_typeParameters = Core.Name "typeParameters"
_DelegateHeader_parameters = Core.Name "parameters"
_DelegateHeader_constraints = Core.Name "constraints"
data DelegateModifier =
  DelegateModifierNew |
  DelegateModifierPublic |
  DelegateModifierProtected |
  DelegateModifierInternal |
  DelegateModifierPrivate |
  DelegateModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_DelegateModifier = Core.Name "hydra.csharp.syntax.DelegateModifier"
_DelegateModifier_new = Core.Name "new"
_DelegateModifier_public = Core.Name "public"
_DelegateModifier_protected = Core.Name "protected"
_DelegateModifier_internal = Core.Name "internal"
_DelegateModifier_private = Core.Name "private"
_DelegateModifier_unsafe = Core.Name "unsafe"
data GlobalAttributeSection =
  GlobalAttributeSection {
    globalAttributeSectionTarget :: Identifier,
    globalAttributeSectionAttributes :: AttributeList}
  deriving (Eq, Ord, Read, Show)
_GlobalAttributeSection = Core.Name "hydra.csharp.syntax.GlobalAttributeSection"
_GlobalAttributeSection_target = Core.Name "target"
_GlobalAttributeSection_attributes = Core.Name "attributes"
newtype Attributes =
  Attributes {
    unAttributes :: [AttributeSection]}
  deriving (Eq, Ord, Read, Show)
_Attributes = Core.Name "hydra.csharp.syntax.Attributes"
data AttributeSection =
  AttributeSection {
    attributeSectionTarget :: (Maybe AttributeTarget),
    attributeSectionAttributes :: AttributeList}
  deriving (Eq, Ord, Read, Show)
_AttributeSection = Core.Name "hydra.csharp.syntax.AttributeSection"
_AttributeSection_target = Core.Name "target"
_AttributeSection_attributes = Core.Name "attributes"
data AttributeTarget =
  AttributeTargetIdentifier Identifier |
  AttributeTargetKeyword Keyword
  deriving (Eq, Ord, Read, Show)
_AttributeTarget = Core.Name "hydra.csharp.syntax.AttributeTarget"
_AttributeTarget_identifier = Core.Name "identifier"
_AttributeTarget_keyword = Core.Name "keyword"
newtype AttributeList =
  AttributeList {
    unAttributeList :: [Attribute]}
  deriving (Eq, Ord, Read, Show)
_AttributeList = Core.Name "hydra.csharp.syntax.AttributeList"
data Attribute =
  Attribute {
    attributeName :: AttributeName,
    attributeArguments :: (Maybe AttributeArguments)}
  deriving (Eq, Ord, Read, Show)
_Attribute = Core.Name "hydra.csharp.syntax.Attribute"
_Attribute_name = Core.Name "name"
_Attribute_arguments = Core.Name "arguments"
newtype AttributeName =
  AttributeName {
    unAttributeName :: TypeName}
  deriving (Eq, Ord, Read, Show)
_AttributeName = Core.Name "hydra.csharp.syntax.AttributeName"
data AttributeArguments =
  AttributeArguments {
    attributeArgumentsPositonal :: (Maybe PositionalArgumentList),
    attributeArgumentsNamed :: (Maybe NamedArgumentList)}
  deriving (Eq, Ord, Read, Show)
_AttributeArguments = Core.Name "hydra.csharp.syntax.AttributeArguments"
_AttributeArguments_positonal = Core.Name "positonal"
_AttributeArguments_named = Core.Name "named"
newtype PositionalArgumentList =
  PositionalArgumentList {
    unPositionalArgumentList :: [PositionalArgument]}
  deriving (Eq, Ord, Read, Show)
_PositionalArgumentList = Core.Name "hydra.csharp.syntax.PositionalArgumentList"
data PositionalArgument =
  PositionalArgument {
    positionalArgumentName :: (Maybe Identifier),
    positionalArgumentValue :: AttributeArgumentExpression}
  deriving (Eq, Ord, Read, Show)
_PositionalArgument = Core.Name "hydra.csharp.syntax.PositionalArgument"
_PositionalArgument_name = Core.Name "name"
_PositionalArgument_value = Core.Name "value"
newtype NamedArgumentList =
  NamedArgumentList {
    unNamedArgumentList :: [NamedArgument]}
  deriving (Eq, Ord, Read, Show)
_NamedArgumentList = Core.Name "hydra.csharp.syntax.NamedArgumentList"
data NamedArgument =
  NamedArgument {
    namedArgumentName :: Identifier,
    namedArgumentValue :: AttributeArgumentExpression}
  deriving (Eq, Ord, Read, Show)
_NamedArgument = Core.Name "hydra.csharp.syntax.NamedArgument"
_NamedArgument_name = Core.Name "name"
_NamedArgument_value = Core.Name "value"
newtype AttributeArgumentExpression =
  AttributeArgumentExpression {
    unAttributeArgumentExpression :: NonAssignmentExpression}
  deriving (Eq, Ord, Read, Show)
_AttributeArgumentExpression = Core.Name "hydra.csharp.syntax.AttributeArgumentExpression"
data PointerType =
  PointerTypeValueType (Maybe ValueType) |
  PointerTypePointerDepth Int
  deriving (Eq, Ord, Read, Show)
_PointerType = Core.Name "hydra.csharp.syntax.PointerType"
_PointerType_valueType = Core.Name "valueType"
_PointerType_pointerDepth = Core.Name "pointerDepth"
data PointerMemberAccess =
  PointerMemberAccess {
    pointerMemberAccessPointer :: PrimaryExpression,
    pointerMemberAccessMember :: Identifier,
    pointerMemberAccessTypeArguments :: (Maybe TypeArgumentList)}
  deriving (Eq, Ord, Read, Show)
_PointerMemberAccess = Core.Name "hydra.csharp.syntax.PointerMemberAccess"
_PointerMemberAccess_pointer = Core.Name "pointer"
_PointerMemberAccess_member = Core.Name "member"
_PointerMemberAccess_typeArguments = Core.Name "typeArguments"
data PointerElementAccess =
  PointerElementAccess {
    pointerElementAccessPointer :: PrimaryNoArrayCreationExpression,
    pointerElementAccessIndex :: Expression}
  deriving (Eq, Ord, Read, Show)
_PointerElementAccess = Core.Name "hydra.csharp.syntax.PointerElementAccess"
_PointerElementAccess_pointer = Core.Name "pointer"
_PointerElementAccess_index = Core.Name "index"
data FixedStatement =
  FixedStatement {
    fixedStatementPointerType :: PointerType,
    fixedStatementDeclarators :: [FixedPointerDeclarator],
    fixedStatementStatement :: EmbeddedStatement}
  deriving (Eq, Ord, Read, Show)
_FixedStatement = Core.Name "hydra.csharp.syntax.FixedStatement"
_FixedStatement_pointerType = Core.Name "pointerType"
_FixedStatement_declarators = Core.Name "declarators"
_FixedStatement_statement = Core.Name "statement"
data FixedPointerDeclarator =
  FixedPointerDeclaratorReference VariableReference |
  FixedPointerDeclaratorExpression Expression
  deriving (Eq, Ord, Read, Show)
_FixedPointerDeclarator = Core.Name "hydra.csharp.syntax.FixedPointerDeclarator"
_FixedPointerDeclarator_reference = Core.Name "reference"
_FixedPointerDeclarator_expression = Core.Name "expression"
data FixedSizeBufferDeclaration =
  FixedSizeBufferDeclaration {
    fixedSizeBufferDeclarationAttributes :: (Maybe Attributes),
    fixedSizeBufferDeclarationModifiers :: [FixedSizeBufferModifier],
    fixedSizeBufferDeclarationElementType :: Type,
    fixedSizeBufferDeclarationDeclarators :: [FixedSizeBufferDeclarator]}
  deriving (Eq, Ord, Read, Show)
_FixedSizeBufferDeclaration = Core.Name "hydra.csharp.syntax.FixedSizeBufferDeclaration"
_FixedSizeBufferDeclaration_attributes = Core.Name "attributes"
_FixedSizeBufferDeclaration_modifiers = Core.Name "modifiers"
_FixedSizeBufferDeclaration_elementType = Core.Name "elementType"
_FixedSizeBufferDeclaration_declarators = Core.Name "declarators"
data FixedSizeBufferModifier =
  FixedSizeBufferModifierNew |
  FixedSizeBufferModifierPublic |
  FixedSizeBufferModifierInternal |
  FixedSizeBufferModifierPrivate |
  FixedSizeBufferModifierUnsafe
  deriving (Eq, Ord, Read, Show)
_FixedSizeBufferModifier = Core.Name "hydra.csharp.syntax.FixedSizeBufferModifier"
_FixedSizeBufferModifier_new = Core.Name "new"
_FixedSizeBufferModifier_public = Core.Name "public"
_FixedSizeBufferModifier_internal = Core.Name "internal"
_FixedSizeBufferModifier_private = Core.Name "private"
_FixedSizeBufferModifier_unsafe = Core.Name "unsafe"
data FixedSizeBufferDeclarator =
  FixedSizeBufferDeclarator {
    fixedSizeBufferDeclaratorName :: Identifier,
    fixedSizeBufferDeclaratorSize :: ConstantExpression}
  deriving (Eq, Ord, Read, Show)
_FixedSizeBufferDeclarator = Core.Name "hydra.csharp.syntax.FixedSizeBufferDeclarator"
_FixedSizeBufferDeclarator_name = Core.Name "name"
_FixedSizeBufferDeclarator_size = Core.Name "size"