packages feed

hydra-0.15.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"