packages feed

hydra-python-0.17.0: src/main/haskell/Hydra/Python/Syntax.hs

-- Note: this is an automatically generated file. Do not edit.

-- | A Python syntax model, tracking the Python 3.14 PEG grammar:
-- |   https://docs.python.org/3.14/reference/grammar.html

module Hydra.Python.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

data AnnotatedStatement =
  AnnotatedStatement {
    annotatedStatementComment :: String,
    annotatedStatementStatement :: Statement}
  deriving (Eq, Ord, Read, Show)

_AnnotatedStatement = Core.Name "hydra.python.syntax.AnnotatedStatement"

_AnnotatedStatement_comment = Core.Name "comment"

_AnnotatedStatement_statement = Core.Name "statement"

newtype Module =
  Module {
    unModule :: [[Statement]]}
  deriving (Eq, Ord, Read, Show)

_Module = Core.Name "hydra.python.syntax.Module"

data QuoteStyle =
  QuoteStyleSingle |
  QuoteStyleDouble |
  QuoteStyleTripleSingle |
  QuoteStyleTripleDouble
  deriving (Eq, Ord, Read, Show)

_QuoteStyle = Core.Name "hydra.python.syntax.QuoteStyle"

_QuoteStyle_single = Core.Name "single"

_QuoteStyle_double = Core.Name "double"

_QuoteStyle_tripleSingle = Core.Name "tripleSingle"

_QuoteStyle_tripleDouble = Core.Name "tripleDouble"

data StringPrefix =
  StringPrefixRaw |
  StringPrefixBytes |
  StringPrefixRawBytes |
  StringPrefixUnicode
  deriving (Eq, Ord, Read, Show)

_StringPrefix = Core.Name "hydra.python.syntax.StringPrefix"

_StringPrefix_raw = Core.Name "raw"

_StringPrefix_bytes = Core.Name "bytes"

_StringPrefix_rawBytes = Core.Name "rawBytes"

_StringPrefix_unicode = Core.Name "unicode"

newtype Name =
  Name {
    unName :: String}
  deriving (Eq, Ord, Read, Show)

_Name = Core.Name "hydra.python.syntax.Name"

data Number =
  NumberInteger Integer |
  NumberFloat Double |
  NumberImaginary Double
  deriving (Eq, Ord, Read, Show)

_Number = Core.Name "hydra.python.syntax.Number"

_Number_integer = Core.Name "integer"

_Number_float = Core.Name "float"

_Number_imaginary = Core.Name "imaginary"

data String_ =
  String_ {
    stringValue :: String,
    stringPrefix :: (Maybe StringPrefix),
    stringQuoteStyle :: QuoteStyle}
  deriving (Eq, Ord, Read, Show)

_String = Core.Name "hydra.python.syntax.String"

_String_value = Core.Name "value"

_String_prefix = Core.Name "prefix"

_String_quoteStyle = Core.Name "quoteStyle"

newtype TypeComment =
  TypeComment {
    unTypeComment :: String}
  deriving (Eq, Ord, Read, Show)

_TypeComment = Core.Name "hydra.python.syntax.TypeComment"

newtype File =
  File {
    unFile :: [Statement]}
  deriving (Eq, Ord, Read, Show)

_File = Core.Name "hydra.python.syntax.File"

newtype Interactive =
  Interactive {
    unInteractive :: Statement}
  deriving (Eq, Ord, Read, Show)

_Interactive = Core.Name "hydra.python.syntax.Interactive"

newtype Eval =
  Eval {
    unEval :: [Expression]}
  deriving (Eq, Ord, Read, Show)

_Eval = Core.Name "hydra.python.syntax.Eval"

data Statement =
  StatementCompound CompoundStatement |
  StatementSimple [SimpleStatement] |
  StatementAnnotated AnnotatedStatement
  deriving (Eq, Ord, Read, Show)

_Statement = Core.Name "hydra.python.syntax.Statement"

_Statement_compound = Core.Name "compound"

_Statement_simple = Core.Name "simple"

_Statement_annotated = Core.Name "annotated"

data SimpleStatement =
  SimpleStatementAssignment Assignment |
  SimpleStatementTypeAlias TypeAlias |
  SimpleStatementStarExpressions [StarExpression] |
  SimpleStatementReturn ReturnStatement |
  SimpleStatementImport ImportStatement |
  SimpleStatementRaise RaiseStatement |
  SimpleStatementPass |
  SimpleStatementDel DelStatement |
  SimpleStatementYield YieldStatement |
  SimpleStatementAssert AssertStatement |
  SimpleStatementBreak |
  SimpleStatementContinue |
  SimpleStatementGlobal [Name] |
  SimpleStatementNonlocal [Name]
  deriving (Eq, Ord, Read, Show)

_SimpleStatement = Core.Name "hydra.python.syntax.SimpleStatement"

_SimpleStatement_assignment = Core.Name "assignment"

_SimpleStatement_typeAlias = Core.Name "typeAlias"

_SimpleStatement_starExpressions = Core.Name "starExpressions"

_SimpleStatement_return = Core.Name "return"

_SimpleStatement_import = Core.Name "import"

_SimpleStatement_raise = Core.Name "raise"

_SimpleStatement_pass = Core.Name "pass"

_SimpleStatement_del = Core.Name "del"

_SimpleStatement_yield = Core.Name "yield"

_SimpleStatement_assert = Core.Name "assert"

_SimpleStatement_break = Core.Name "break"

_SimpleStatement_continue = Core.Name "continue"

_SimpleStatement_global = Core.Name "global"

_SimpleStatement_nonlocal = Core.Name "nonlocal"

data CompoundStatement =
  CompoundStatementFunction FunctionDefinition |
  CompoundStatementIf IfStatement |
  CompoundStatementClassDef ClassDefinition |
  CompoundStatementWith WithStatement |
  CompoundStatementFor ForStatement |
  CompoundStatementTry TryStatement |
  CompoundStatementWhile WhileStatement |
  CompoundStatementMatch MatchStatement
  deriving (Eq, Ord, Read, Show)

_CompoundStatement = Core.Name "hydra.python.syntax.CompoundStatement"

_CompoundStatement_function = Core.Name "function"

_CompoundStatement_if = Core.Name "if"

_CompoundStatement_classDef = Core.Name "classDef"

_CompoundStatement_with = Core.Name "with"

_CompoundStatement_for = Core.Name "for"

_CompoundStatement_try = Core.Name "try"

_CompoundStatement_while = Core.Name "while"

_CompoundStatement_match = Core.Name "match"

data Assignment =
  AssignmentTyped TypedAssignment |
  AssignmentUntyped UntypedAssignment |
  AssignmentAug AugAssignment
  deriving (Eq, Ord, Read, Show)

_Assignment = Core.Name "hydra.python.syntax.Assignment"

_Assignment_typed = Core.Name "typed"

_Assignment_untyped = Core.Name "untyped"

_Assignment_aug = Core.Name "aug"

data TypedAssignment =
  TypedAssignment {
    typedAssignmentLhs :: SingleTarget,
    typedAssignmentType :: Expression,
    typedAssignmentRhs :: (Maybe AnnotatedRhs)}
  deriving (Eq, Ord, Read, Show)

_TypedAssignment = Core.Name "hydra.python.syntax.TypedAssignment"

_TypedAssignment_lhs = Core.Name "lhs"

_TypedAssignment_type = Core.Name "type"

_TypedAssignment_rhs = Core.Name "rhs"

data UntypedAssignment =
  UntypedAssignment {
    untypedAssignmentTargets :: [StarTarget],
    untypedAssignmentRhs :: AnnotatedRhs,
    untypedAssignmentTypeComment :: (Maybe TypeComment)}
  deriving (Eq, Ord, Read, Show)

_UntypedAssignment = Core.Name "hydra.python.syntax.UntypedAssignment"

_UntypedAssignment_targets = Core.Name "targets"

_UntypedAssignment_rhs = Core.Name "rhs"

_UntypedAssignment_typeComment = Core.Name "typeComment"

data AugAssignment =
  AugAssignment {
    augAssignmentLhs :: SingleTarget,
    augAssignmentAugassign :: AugAssign,
    augAssignmentRhs :: AnnotatedRhs}
  deriving (Eq, Ord, Read, Show)

_AugAssignment = Core.Name "hydra.python.syntax.AugAssignment"

_AugAssignment_lhs = Core.Name "lhs"

_AugAssignment_augassign = Core.Name "augassign"

_AugAssignment_rhs = Core.Name "rhs"

data AnnotatedRhs =
  AnnotatedRhsYield YieldExpression |
  AnnotatedRhsStar [StarExpression]
  deriving (Eq, Ord, Read, Show)

_AnnotatedRhs = Core.Name "hydra.python.syntax.AnnotatedRhs"

_AnnotatedRhs_yield = Core.Name "yield"

_AnnotatedRhs_star = Core.Name "star"

data AugAssign =
  AugAssignPlusEqual |
  AugAssignMinusEqual |
  AugAssignTimesEqual |
  AugAssignAtEqual |
  AugAssignSlashEqual |
  AugAssignPercentEqual |
  AugAssignAmpersandEqual |
  AugAssignBarEqual |
  AugAssignCaretEqual |
  AugAssignLeftShiftEqual |
  AugAssignRightShiftEqual |
  AugAssignStarStarEqual |
  AugAssignDoubleSlashEqual
  deriving (Eq, Ord, Read, Show)

_AugAssign = Core.Name "hydra.python.syntax.AugAssign"

_AugAssign_plusEqual = Core.Name "plusEqual"

_AugAssign_minusEqual = Core.Name "minusEqual"

_AugAssign_timesEqual = Core.Name "timesEqual"

_AugAssign_atEqual = Core.Name "atEqual"

_AugAssign_slashEqual = Core.Name "slashEqual"

_AugAssign_percentEqual = Core.Name "percentEqual"

_AugAssign_ampersandEqual = Core.Name "ampersandEqual"

_AugAssign_barEqual = Core.Name "barEqual"

_AugAssign_caretEqual = Core.Name "caretEqual"

_AugAssign_leftShiftEqual = Core.Name "leftShiftEqual"

_AugAssign_rightShiftEqual = Core.Name "rightShiftEqual"

_AugAssign_starStarEqual = Core.Name "starStarEqual"

_AugAssign_doubleSlashEqual = Core.Name "doubleSlashEqual"

newtype ReturnStatement =
  ReturnStatement {
    unReturnStatement :: [StarExpression]}
  deriving (Eq, Ord, Read, Show)

_ReturnStatement = Core.Name "hydra.python.syntax.ReturnStatement"

newtype RaiseStatement =
  RaiseStatement {
    unRaiseStatement :: (Maybe RaiseExpression)}
  deriving (Eq, Ord, Read, Show)

_RaiseStatement = Core.Name "hydra.python.syntax.RaiseStatement"

data RaiseExpression =
  RaiseExpression {
    raiseExpressionExpression :: Expression,
    raiseExpressionFrom :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_RaiseExpression = Core.Name "hydra.python.syntax.RaiseExpression"

_RaiseExpression_expression = Core.Name "expression"

_RaiseExpression_from = Core.Name "from"

newtype DelStatement =
  DelStatement {
    unDelStatement :: DelTargets}
  deriving (Eq, Ord, Read, Show)

_DelStatement = Core.Name "hydra.python.syntax.DelStatement"

newtype YieldStatement =
  YieldStatement {
    unYieldStatement :: YieldExpression}
  deriving (Eq, Ord, Read, Show)

_YieldStatement = Core.Name "hydra.python.syntax.YieldStatement"

data AssertStatement =
  AssertStatement {
    assertStatementExpression1 :: Expression,
    assertStatementExpression2 :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_AssertStatement = Core.Name "hydra.python.syntax.AssertStatement"

_AssertStatement_expression1 = Core.Name "expression1"

_AssertStatement_expression2 = Core.Name "expression2"

data ImportStatement =
  ImportStatementName ImportName |
  ImportStatementFrom ImportFrom
  deriving (Eq, Ord, Read, Show)

_ImportStatement = Core.Name "hydra.python.syntax.ImportStatement"

_ImportStatement_name = Core.Name "name"

_ImportStatement_from = Core.Name "from"

newtype ImportName =
  ImportName {
    unImportName :: [DottedAsName]}
  deriving (Eq, Ord, Read, Show)

_ImportName = Core.Name "hydra.python.syntax.ImportName"

data ImportFrom =
  ImportFrom {
    importFromPrefixes :: [RelativeImportPrefix],
    importFromDottedName :: (Maybe DottedName),
    importFromTargets :: ImportFromTargets}
  deriving (Eq, Ord, Read, Show)

_ImportFrom = Core.Name "hydra.python.syntax.ImportFrom"

_ImportFrom_prefixes = Core.Name "prefixes"

_ImportFrom_dottedName = Core.Name "dottedName"

_ImportFrom_targets = Core.Name "targets"

data RelativeImportPrefix =
  RelativeImportPrefixDot |
  RelativeImportPrefixEllipsis
  deriving (Eq, Ord, Read, Show)

_RelativeImportPrefix = Core.Name "hydra.python.syntax.RelativeImportPrefix"

_RelativeImportPrefix_dot = Core.Name "dot"

_RelativeImportPrefix_ellipsis = Core.Name "ellipsis"

data ImportFromTargets =
  ImportFromTargetsSimple [ImportFromAsName] |
  ImportFromTargetsParens [ImportFromAsName] |
  ImportFromTargetsStar
  deriving (Eq, Ord, Read, Show)

_ImportFromTargets = Core.Name "hydra.python.syntax.ImportFromTargets"

_ImportFromTargets_simple = Core.Name "simple"

_ImportFromTargets_parens = Core.Name "parens"

_ImportFromTargets_star = Core.Name "star"

data ImportFromAsName =
  ImportFromAsName {
    importFromAsNameName :: Name,
    importFromAsNameAs :: (Maybe Name)}
  deriving (Eq, Ord, Read, Show)

_ImportFromAsName = Core.Name "hydra.python.syntax.ImportFromAsName"

_ImportFromAsName_name = Core.Name "name"

_ImportFromAsName_as = Core.Name "as"

data DottedAsName =
  DottedAsName {
    dottedAsNameName :: DottedName,
    dottedAsNameAs :: (Maybe Name)}
  deriving (Eq, Ord, Read, Show)

_DottedAsName = Core.Name "hydra.python.syntax.DottedAsName"

_DottedAsName_name = Core.Name "name"

_DottedAsName_as = Core.Name "as"

newtype DottedName =
  DottedName {
    unDottedName :: [Name]}
  deriving (Eq, Ord, Read, Show)

_DottedName = Core.Name "hydra.python.syntax.DottedName"

data Block =
  BlockIndented [[Statement]] |
  BlockSimple [SimpleStatement]
  deriving (Eq, Ord, Read, Show)

_Block = Core.Name "hydra.python.syntax.Block"

_Block_indented = Core.Name "indented"

_Block_simple = Core.Name "simple"

newtype Decorators =
  Decorators {
    unDecorators :: [NamedExpression]}
  deriving (Eq, Ord, Read, Show)

_Decorators = Core.Name "hydra.python.syntax.Decorators"

data ClassDefinition =
  ClassDefinition {
    classDefinitionDecorators :: (Maybe Decorators),
    classDefinitionName :: Name,
    classDefinitionTypeParams :: [TypeParameter],
    classDefinitionArguments :: (Maybe Args),
    classDefinitionBody :: Block}
  deriving (Eq, Ord, Read, Show)

_ClassDefinition = Core.Name "hydra.python.syntax.ClassDefinition"

_ClassDefinition_decorators = Core.Name "decorators"

_ClassDefinition_name = Core.Name "name"

_ClassDefinition_typeParams = Core.Name "typeParams"

_ClassDefinition_arguments = Core.Name "arguments"

_ClassDefinition_body = Core.Name "body"

data FunctionDefinition =
  FunctionDefinition {
    functionDefinitionDecorators :: (Maybe Decorators),
    functionDefinitionRaw :: FunctionDefRaw}
  deriving (Eq, Ord, Read, Show)

_FunctionDefinition = Core.Name "hydra.python.syntax.FunctionDefinition"

_FunctionDefinition_decorators = Core.Name "decorators"

_FunctionDefinition_raw = Core.Name "raw"

data FunctionDefRaw =
  FunctionDefRaw {
    functionDefRawAsync :: Bool,
    functionDefRawName :: Name,
    functionDefRawTypeParams :: [TypeParameter],
    functionDefRawParams :: (Maybe Parameters),
    functionDefRawReturnType :: (Maybe Expression),
    functionDefRawFuncTypeComment :: (Maybe FuncTypeComment),
    functionDefRawBlock :: Block}
  deriving (Eq, Ord, Read, Show)

_FunctionDefRaw = Core.Name "hydra.python.syntax.FunctionDefRaw"

_FunctionDefRaw_async = Core.Name "async"

_FunctionDefRaw_name = Core.Name "name"

_FunctionDefRaw_typeParams = Core.Name "typeParams"

_FunctionDefRaw_params = Core.Name "params"

_FunctionDefRaw_returnType = Core.Name "returnType"

_FunctionDefRaw_funcTypeComment = Core.Name "funcTypeComment"

_FunctionDefRaw_block = Core.Name "block"

data Parameters =
  ParametersSlashNoDefault SlashNoDefaultParameters |
  ParametersSlashWithDefault SlashWithDefaultParameters |
  ParametersParamNoDefault ParamNoDefaultParameters |
  ParametersParamWithDefault ParamWithDefaultParameters |
  ParametersStarEtc StarEtc
  deriving (Eq, Ord, Read, Show)

_Parameters = Core.Name "hydra.python.syntax.Parameters"

_Parameters_slashNoDefault = Core.Name "slashNoDefault"

_Parameters_slashWithDefault = Core.Name "slashWithDefault"

_Parameters_paramNoDefault = Core.Name "paramNoDefault"

_Parameters_paramWithDefault = Core.Name "paramWithDefault"

_Parameters_starEtc = Core.Name "starEtc"

data SlashNoDefaultParameters =
  SlashNoDefaultParameters {
    slashNoDefaultParametersSlash :: SlashNoDefault,
    slashNoDefaultParametersParamNoDefault :: [ParamNoDefault],
    slashNoDefaultParametersParamWithDefault :: [ParamWithDefault],
    slashNoDefaultParametersStarEtc :: (Maybe StarEtc)}
  deriving (Eq, Ord, Read, Show)

_SlashNoDefaultParameters = Core.Name "hydra.python.syntax.SlashNoDefaultParameters"

_SlashNoDefaultParameters_slash = Core.Name "slash"

_SlashNoDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"

_SlashNoDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"

_SlashNoDefaultParameters_starEtc = Core.Name "starEtc"

data SlashWithDefaultParameters =
  SlashWithDefaultParameters {
    slashWithDefaultParametersParamNoDefault :: [ParamNoDefault],
    slashWithDefaultParametersParamWithDefault :: [ParamWithDefault],
    slashWithDefaultParametersStarEtc :: (Maybe StarEtc)}
  deriving (Eq, Ord, Read, Show)

_SlashWithDefaultParameters = Core.Name "hydra.python.syntax.SlashWithDefaultParameters"

_SlashWithDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"

_SlashWithDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"

_SlashWithDefaultParameters_starEtc = Core.Name "starEtc"

data ParamNoDefaultParameters =
  ParamNoDefaultParameters {
    paramNoDefaultParametersParamNoDefault :: [ParamNoDefault],
    paramNoDefaultParametersParamWithDefault :: [ParamWithDefault],
    paramNoDefaultParametersStarEtc :: (Maybe StarEtc)}
  deriving (Eq, Ord, Read, Show)

_ParamNoDefaultParameters = Core.Name "hydra.python.syntax.ParamNoDefaultParameters"

_ParamNoDefaultParameters_paramNoDefault = Core.Name "paramNoDefault"

_ParamNoDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"

_ParamNoDefaultParameters_starEtc = Core.Name "starEtc"

data ParamWithDefaultParameters =
  ParamWithDefaultParameters {
    paramWithDefaultParametersParamWithDefault :: [ParamWithDefault],
    paramWithDefaultParametersStarEtc :: (Maybe StarEtc)}
  deriving (Eq, Ord, Read, Show)

_ParamWithDefaultParameters = Core.Name "hydra.python.syntax.ParamWithDefaultParameters"

_ParamWithDefaultParameters_paramWithDefault = Core.Name "paramWithDefault"

_ParamWithDefaultParameters_starEtc = Core.Name "starEtc"

newtype SlashNoDefault =
  SlashNoDefault {
    unSlashNoDefault :: [ParamNoDefault]}
  deriving (Eq, Ord, Read, Show)

_SlashNoDefault = Core.Name "hydra.python.syntax.SlashNoDefault"

data SlashWithDefault =
  SlashWithDefault {
    slashWithDefaultParamNoDefault :: [ParamNoDefault],
    slashWithDefaultParamWithDefault :: [ParamWithDefault]}
  deriving (Eq, Ord, Read, Show)

_SlashWithDefault = Core.Name "hydra.python.syntax.SlashWithDefault"

_SlashWithDefault_paramNoDefault = Core.Name "paramNoDefault"

_SlashWithDefault_paramWithDefault = Core.Name "paramWithDefault"

data StarEtc =
  StarEtcStarNoDefault NoDefaultStarEtc |
  StarEtcStarNoDefaultStarAnnotation NoDefaultStarAnnotationStarEtc |
  StarEtcStarComma CommaStarEtc |
  StarEtcKeywords Keywords
  deriving (Eq, Ord, Read, Show)

_StarEtc = Core.Name "hydra.python.syntax.StarEtc"

_StarEtc_starNoDefault = Core.Name "starNoDefault"

_StarEtc_starNoDefaultStarAnnotation = Core.Name "starNoDefaultStarAnnotation"

_StarEtc_starComma = Core.Name "starComma"

_StarEtc_keywords = Core.Name "keywords"

data NoDefaultStarEtc =
  NoDefaultStarEtc {
    noDefaultStarEtcParamNoDefault :: ParamNoDefault,
    noDefaultStarEtcParamMaybeDefault :: [ParamMaybeDefault],
    noDefaultStarEtcKeywords :: (Maybe Keywords)}
  deriving (Eq, Ord, Read, Show)

_NoDefaultStarEtc = Core.Name "hydra.python.syntax.NoDefaultStarEtc"

_NoDefaultStarEtc_paramNoDefault = Core.Name "paramNoDefault"

_NoDefaultStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"

_NoDefaultStarEtc_keywords = Core.Name "keywords"

data NoDefaultStarAnnotationStarEtc =
  NoDefaultStarAnnotationStarEtc {
    noDefaultStarAnnotationStarEtcParamNoDefaultStarAnnotation :: ParamNoDefaultStarAnnotation,
    noDefaultStarAnnotationStarEtcParamMaybeDefault :: [ParamMaybeDefault],
    noDefaultStarAnnotationStarEtcKeywords :: (Maybe Keywords)}
  deriving (Eq, Ord, Read, Show)

_NoDefaultStarAnnotationStarEtc = Core.Name "hydra.python.syntax.NoDefaultStarAnnotationStarEtc"

_NoDefaultStarAnnotationStarEtc_paramNoDefaultStarAnnotation = Core.Name "paramNoDefaultStarAnnotation"

_NoDefaultStarAnnotationStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"

_NoDefaultStarAnnotationStarEtc_keywords = Core.Name "keywords"

data CommaStarEtc =
  CommaStarEtc {
    commaStarEtcParamMaybeDefault :: [ParamMaybeDefault],
    commaStarEtcKeywords :: (Maybe Keywords)}
  deriving (Eq, Ord, Read, Show)

_CommaStarEtc = Core.Name "hydra.python.syntax.CommaStarEtc"

_CommaStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"

_CommaStarEtc_keywords = Core.Name "keywords"

newtype Keywords =
  Keywords {
    unKeywords :: ParamNoDefault}
  deriving (Eq, Ord, Read, Show)

_Keywords = Core.Name "hydra.python.syntax.Keywords"

data ParamNoDefault =
  ParamNoDefault {
    paramNoDefaultParam :: Param,
    paramNoDefaultTypeComment :: (Maybe TypeComment)}
  deriving (Eq, Ord, Read, Show)

_ParamNoDefault = Core.Name "hydra.python.syntax.ParamNoDefault"

_ParamNoDefault_param = Core.Name "param"

_ParamNoDefault_typeComment = Core.Name "typeComment"

data ParamNoDefaultStarAnnotation =
  ParamNoDefaultStarAnnotation {
    paramNoDefaultStarAnnotationParamStarAnnotation :: ParamStarAnnotation,
    paramNoDefaultStarAnnotationTypeComment :: (Maybe TypeComment)}
  deriving (Eq, Ord, Read, Show)

_ParamNoDefaultStarAnnotation = Core.Name "hydra.python.syntax.ParamNoDefaultStarAnnotation"

_ParamNoDefaultStarAnnotation_paramStarAnnotation = Core.Name "paramStarAnnotation"

_ParamNoDefaultStarAnnotation_typeComment = Core.Name "typeComment"

data ParamWithDefault =
  ParamWithDefault {
    paramWithDefaultParam :: Param,
    paramWithDefaultDefault :: Default,
    paramWithDefaultTypeComment :: (Maybe TypeComment)}
  deriving (Eq, Ord, Read, Show)

_ParamWithDefault = Core.Name "hydra.python.syntax.ParamWithDefault"

_ParamWithDefault_param = Core.Name "param"

_ParamWithDefault_default = Core.Name "default"

_ParamWithDefault_typeComment = Core.Name "typeComment"

data ParamMaybeDefault =
  ParamMaybeDefault {
    paramMaybeDefaultParam :: Param,
    paramMaybeDefaultDefault :: (Maybe Default),
    paramMaybeDefaultTypeComment :: (Maybe TypeComment)}
  deriving (Eq, Ord, Read, Show)

_ParamMaybeDefault = Core.Name "hydra.python.syntax.ParamMaybeDefault"

_ParamMaybeDefault_param = Core.Name "param"

_ParamMaybeDefault_default = Core.Name "default"

_ParamMaybeDefault_typeComment = Core.Name "typeComment"

data Param =
  Param {
    paramName :: Name,
    paramAnnotation :: (Maybe Annotation)}
  deriving (Eq, Ord, Read, Show)

_Param = Core.Name "hydra.python.syntax.Param"

_Param_name = Core.Name "name"

_Param_annotation = Core.Name "annotation"

data ParamStarAnnotation =
  ParamStarAnnotation {
    paramStarAnnotationName :: Name,
    paramStarAnnotationAnnotation :: StarAnnotation}
  deriving (Eq, Ord, Read, Show)

_ParamStarAnnotation = Core.Name "hydra.python.syntax.ParamStarAnnotation"

_ParamStarAnnotation_name = Core.Name "name"

_ParamStarAnnotation_annotation = Core.Name "annotation"

newtype Annotation =
  Annotation {
    unAnnotation :: Expression}
  deriving (Eq, Ord, Read, Show)

_Annotation = Core.Name "hydra.python.syntax.Annotation"

newtype StarAnnotation =
  StarAnnotation {
    unStarAnnotation :: StarExpression}
  deriving (Eq, Ord, Read, Show)

_StarAnnotation = Core.Name "hydra.python.syntax.StarAnnotation"

newtype Default =
  Default {
    unDefault :: Expression}
  deriving (Eq, Ord, Read, Show)

_Default = Core.Name "hydra.python.syntax.Default"

data IfStatement =
  IfStatement {
    ifStatementCondition :: NamedExpression,
    ifStatementBody :: Block,
    ifStatementContinuation :: (Maybe IfTail)}
  deriving (Eq, Ord, Read, Show)

_IfStatement = Core.Name "hydra.python.syntax.IfStatement"

_IfStatement_condition = Core.Name "condition"

_IfStatement_body = Core.Name "body"

_IfStatement_continuation = Core.Name "continuation"

data IfTail =
  IfTailElif IfStatement |
  IfTailElse Block
  deriving (Eq, Ord, Read, Show)

_IfTail = Core.Name "hydra.python.syntax.IfTail"

_IfTail_elif = Core.Name "elif"

_IfTail_else = Core.Name "else"

data WhileStatement =
  WhileStatement {
    whileStatementCondition :: NamedExpression,
    whileStatementBody :: Block,
    whileStatementElse :: (Maybe Block)}
  deriving (Eq, Ord, Read, Show)

_WhileStatement = Core.Name "hydra.python.syntax.WhileStatement"

_WhileStatement_condition = Core.Name "condition"

_WhileStatement_body = Core.Name "body"

_WhileStatement_else = Core.Name "else"

data ForStatement =
  ForStatement {
    forStatementAsync :: Bool,
    forStatementTargets :: [StarTarget],
    forStatementExpressions :: [StarExpression],
    forStatementTypeComment :: (Maybe TypeComment),
    forStatementBody :: Block,
    forStatementElse :: (Maybe Block)}
  deriving (Eq, Ord, Read, Show)

_ForStatement = Core.Name "hydra.python.syntax.ForStatement"

_ForStatement_async = Core.Name "async"

_ForStatement_targets = Core.Name "targets"

_ForStatement_expressions = Core.Name "expressions"

_ForStatement_typeComment = Core.Name "typeComment"

_ForStatement_body = Core.Name "body"

_ForStatement_else = Core.Name "else"

data WithStatement =
  WithStatement {
    withStatementAsync :: Bool,
    withStatementItems :: [WithItem],
    withStatementTypeComment :: (Maybe TypeComment),
    withStatementBody :: Block}
  deriving (Eq, Ord, Read, Show)

_WithStatement = Core.Name "hydra.python.syntax.WithStatement"

_WithStatement_async = Core.Name "async"

_WithStatement_items = Core.Name "items"

_WithStatement_typeComment = Core.Name "typeComment"

_WithStatement_body = Core.Name "body"

data WithItem =
  WithItem {
    withItemExpression :: Expression,
    withItemAs :: (Maybe StarTarget)}
  deriving (Eq, Ord, Read, Show)

_WithItem = Core.Name "hydra.python.syntax.WithItem"

_WithItem_expression = Core.Name "expression"

_WithItem_as = Core.Name "as"

data TryStatement =
  TryStatementFinally TryFinallyStatement |
  TryStatementExcept TryExceptStatement |
  TryStatementExceptStar TryExceptStarStatement
  deriving (Eq, Ord, Read, Show)

_TryStatement = Core.Name "hydra.python.syntax.TryStatement"

_TryStatement_finally = Core.Name "finally"

_TryStatement_except = Core.Name "except"

_TryStatement_exceptStar = Core.Name "exceptStar"

data TryFinallyStatement =
  TryFinallyStatement {
    tryFinallyStatementBody :: Block,
    tryFinallyStatementFinally :: Block}
  deriving (Eq, Ord, Read, Show)

_TryFinallyStatement = Core.Name "hydra.python.syntax.TryFinallyStatement"

_TryFinallyStatement_body = Core.Name "body"

_TryFinallyStatement_finally = Core.Name "finally"

data TryExceptStatement =
  TryExceptStatement {
    tryExceptStatementBody :: Block,
    tryExceptStatementExcepts :: [ExceptBlock],
    tryExceptStatementElse :: (Maybe Block),
    tryExceptStatementFinally :: (Maybe Block)}
  deriving (Eq, Ord, Read, Show)

_TryExceptStatement = Core.Name "hydra.python.syntax.TryExceptStatement"

_TryExceptStatement_body = Core.Name "body"

_TryExceptStatement_excepts = Core.Name "excepts"

_TryExceptStatement_else = Core.Name "else"

_TryExceptStatement_finally = Core.Name "finally"

data TryExceptStarStatement =
  TryExceptStarStatement {
    tryExceptStarStatementBody :: Block,
    tryExceptStarStatementExcepts :: [ExceptStarBlock],
    tryExceptStarStatementElse :: (Maybe Block),
    tryExceptStarStatementFinally :: (Maybe Block)}
  deriving (Eq, Ord, Read, Show)

_TryExceptStarStatement = Core.Name "hydra.python.syntax.TryExceptStarStatement"

_TryExceptStarStatement_body = Core.Name "body"

_TryExceptStarStatement_excepts = Core.Name "excepts"

_TryExceptStarStatement_else = Core.Name "else"

_TryExceptStarStatement_finally = Core.Name "finally"

data ExceptBlock =
  ExceptBlock {
    exceptBlockExpression :: (Maybe ExceptExpression),
    exceptBlockBody :: Block}
  deriving (Eq, Ord, Read, Show)

_ExceptBlock = Core.Name "hydra.python.syntax.ExceptBlock"

_ExceptBlock_expression = Core.Name "expression"

_ExceptBlock_body = Core.Name "body"

data ExceptExpression =
  ExceptExpression {
    exceptExpressionExpression :: Expression,
    exceptExpressionAs :: (Maybe Name)}
  deriving (Eq, Ord, Read, Show)

_ExceptExpression = Core.Name "hydra.python.syntax.ExceptExpression"

_ExceptExpression_expression = Core.Name "expression"

_ExceptExpression_as = Core.Name "as"

data ExceptStarBlock =
  ExceptStarBlock {
    exceptStarBlockExpression :: Expression,
    exceptStarBlockAs :: (Maybe Name),
    exceptStarBlockBody :: Block}
  deriving (Eq, Ord, Read, Show)

_ExceptStarBlock = Core.Name "hydra.python.syntax.ExceptStarBlock"

_ExceptStarBlock_expression = Core.Name "expression"

_ExceptStarBlock_as = Core.Name "as"

_ExceptStarBlock_body = Core.Name "body"

data MatchStatement =
  MatchStatement {
    matchStatementSubject :: SubjectExpression,
    matchStatementCases :: [CaseBlock]}
  deriving (Eq, Ord, Read, Show)

_MatchStatement = Core.Name "hydra.python.syntax.MatchStatement"

_MatchStatement_subject = Core.Name "subject"

_MatchStatement_cases = Core.Name "cases"

data SubjectExpression =
  SubjectExpressionTuple [StarNamedExpression] |
  SubjectExpressionSimple NamedExpression
  deriving (Eq, Ord, Read, Show)

_SubjectExpression = Core.Name "hydra.python.syntax.SubjectExpression"

_SubjectExpression_tuple = Core.Name "tuple"

_SubjectExpression_simple = Core.Name "simple"

data CaseBlock =
  CaseBlock {
    caseBlockPatterns :: Patterns,
    caseBlockGuard :: (Maybe Guard),
    caseBlockBody :: Block}
  deriving (Eq, Ord, Read, Show)

_CaseBlock = Core.Name "hydra.python.syntax.CaseBlock"

_CaseBlock_patterns = Core.Name "patterns"

_CaseBlock_guard = Core.Name "guard"

_CaseBlock_body = Core.Name "body"

newtype Guard =
  Guard {
    unGuard :: NamedExpression}
  deriving (Eq, Ord, Read, Show)

_Guard = Core.Name "hydra.python.syntax.Guard"

data Patterns =
  PatternsSequence OpenSequencePattern |
  PatternsPattern Pattern
  deriving (Eq, Ord, Read, Show)

_Patterns = Core.Name "hydra.python.syntax.Patterns"

_Patterns_sequence = Core.Name "sequence"

_Patterns_pattern = Core.Name "pattern"

data Pattern =
  PatternAs AsPattern |
  PatternOr OrPattern
  deriving (Eq, Ord, Read, Show)

_Pattern = Core.Name "hydra.python.syntax.Pattern"

_Pattern_as = Core.Name "as"

_Pattern_or = Core.Name "or"

data AsPattern =
  AsPattern {
    asPatternPattern :: OrPattern,
    asPatternAs :: PatternCaptureTarget}
  deriving (Eq, Ord, Read, Show)

_AsPattern = Core.Name "hydra.python.syntax.AsPattern"

_AsPattern_pattern = Core.Name "pattern"

_AsPattern_as = Core.Name "as"

newtype OrPattern =
  OrPattern {
    unOrPattern :: [ClosedPattern]}
  deriving (Eq, Ord, Read, Show)

_OrPattern = Core.Name "hydra.python.syntax.OrPattern"

data ClosedPattern =
  ClosedPatternLiteral LiteralExpression |
  ClosedPatternCapture CapturePattern |
  ClosedPatternWildcard |
  ClosedPatternValue ValuePattern |
  ClosedPatternGroup GroupPattern |
  ClosedPatternSequence SequencePattern |
  ClosedPatternMapping MappingPattern |
  ClosedPatternClass ClassPattern
  deriving (Eq, Ord, Read, Show)

_ClosedPattern = Core.Name "hydra.python.syntax.ClosedPattern"

_ClosedPattern_literal = Core.Name "literal"

_ClosedPattern_capture = Core.Name "capture"

_ClosedPattern_wildcard = Core.Name "wildcard"

_ClosedPattern_value = Core.Name "value"

_ClosedPattern_group = Core.Name "group"

_ClosedPattern_sequence = Core.Name "sequence"

_ClosedPattern_mapping = Core.Name "mapping"

_ClosedPattern_class = Core.Name "class"

data LiteralExpression =
  LiteralExpressionNumber SignedNumber |
  LiteralExpressionComplex ComplexNumber |
  LiteralExpressionString String_ |
  LiteralExpressionNone |
  LiteralExpressionTrue |
  LiteralExpressionFalse
  deriving (Eq, Ord, Read, Show)

_LiteralExpression = Core.Name "hydra.python.syntax.LiteralExpression"

_LiteralExpression_number = Core.Name "number"

_LiteralExpression_complex = Core.Name "complex"

_LiteralExpression_string = Core.Name "string"

_LiteralExpression_none = Core.Name "none"

_LiteralExpression_true = Core.Name "true"

_LiteralExpression_false = Core.Name "false"

data ComplexNumber =
  ComplexNumber {
    complexNumberReal :: SignedRealNumber,
    complexNumberPlusOrMinus :: PlusOrMinus,
    complexNumberImaginary :: ImaginaryNumber}
  deriving (Eq, Ord, Read, Show)

_ComplexNumber = Core.Name "hydra.python.syntax.ComplexNumber"

_ComplexNumber_real = Core.Name "real"

_ComplexNumber_plusOrMinus = Core.Name "plusOrMinus"

_ComplexNumber_imaginary = Core.Name "imaginary"

data PlusOrMinus =
  PlusOrMinusPlus |
  PlusOrMinusMinus
  deriving (Eq, Ord, Read, Show)

_PlusOrMinus = Core.Name "hydra.python.syntax.PlusOrMinus"

_PlusOrMinus_plus = Core.Name "plus"

_PlusOrMinus_minus = Core.Name "minus"

data SignedNumber =
  SignedNumberSign PlusOrMinus |
  SignedNumberNumber Number
  deriving (Eq, Ord, Read, Show)

_SignedNumber = Core.Name "hydra.python.syntax.SignedNumber"

_SignedNumber_sign = Core.Name "sign"

_SignedNumber_number = Core.Name "number"

data SignedRealNumber =
  SignedRealNumberSign PlusOrMinus |
  SignedRealNumberNumber RealNumber
  deriving (Eq, Ord, Read, Show)

_SignedRealNumber = Core.Name "hydra.python.syntax.SignedRealNumber"

_SignedRealNumber_sign = Core.Name "sign"

_SignedRealNumber_number = Core.Name "number"

data RealNumber =
  RealNumberInteger Integer |
  RealNumberFloat Double
  deriving (Eq, Ord, Read, Show)

_RealNumber = Core.Name "hydra.python.syntax.RealNumber"

_RealNumber_integer = Core.Name "integer"

_RealNumber_float = Core.Name "float"

newtype ImaginaryNumber =
  ImaginaryNumber {
    unImaginaryNumber :: Double}
  deriving (Eq, Ord, Read, Show)

_ImaginaryNumber = Core.Name "hydra.python.syntax.ImaginaryNumber"

newtype CapturePattern =
  CapturePattern {
    unCapturePattern :: PatternCaptureTarget}
  deriving (Eq, Ord, Read, Show)

_CapturePattern = Core.Name "hydra.python.syntax.CapturePattern"

newtype PatternCaptureTarget =
  PatternCaptureTarget {
    unPatternCaptureTarget :: Name}
  deriving (Eq, Ord, Read, Show)

_PatternCaptureTarget = Core.Name "hydra.python.syntax.PatternCaptureTarget"

newtype ValuePattern =
  ValuePattern {
    unValuePattern :: Attribute}
  deriving (Eq, Ord, Read, Show)

_ValuePattern = Core.Name "hydra.python.syntax.ValuePattern"

newtype Attribute =
  Attribute {
    unAttribute :: [Name]}
  deriving (Eq, Ord, Read, Show)

_Attribute = Core.Name "hydra.python.syntax.Attribute"

newtype NameOrAttribute =
  NameOrAttribute {
    unNameOrAttribute :: [Name]}
  deriving (Eq, Ord, Read, Show)

_NameOrAttribute = Core.Name "hydra.python.syntax.NameOrAttribute"

newtype GroupPattern =
  GroupPattern {
    unGroupPattern :: Pattern}
  deriving (Eq, Ord, Read, Show)

_GroupPattern = Core.Name "hydra.python.syntax.GroupPattern"

data SequencePattern =
  SequencePatternList (Maybe MaybeSequencePattern) |
  SequencePatternTuple (Maybe OpenSequencePattern)
  deriving (Eq, Ord, Read, Show)

_SequencePattern = Core.Name "hydra.python.syntax.SequencePattern"

_SequencePattern_list = Core.Name "list"

_SequencePattern_tuple = Core.Name "tuple"

data OpenSequencePattern =
  OpenSequencePattern {
    openSequencePatternHead :: MaybeStarPattern,
    openSequencePatternTail :: (Maybe MaybeSequencePattern)}
  deriving (Eq, Ord, Read, Show)

_OpenSequencePattern = Core.Name "hydra.python.syntax.OpenSequencePattern"

_OpenSequencePattern_head = Core.Name "head"

_OpenSequencePattern_tail = Core.Name "tail"

newtype MaybeSequencePattern =
  MaybeSequencePattern {
    unMaybeSequencePattern :: [MaybeStarPattern]}
  deriving (Eq, Ord, Read, Show)

_MaybeSequencePattern = Core.Name "hydra.python.syntax.MaybeSequencePattern"

data MaybeStarPattern =
  MaybeStarPatternStar StarPattern |
  MaybeStarPatternPattern Pattern
  deriving (Eq, Ord, Read, Show)

_MaybeStarPattern = Core.Name "hydra.python.syntax.MaybeStarPattern"

_MaybeStarPattern_star = Core.Name "star"

_MaybeStarPattern_pattern = Core.Name "pattern"

data StarPattern =
  StarPatternCapture PatternCaptureTarget |
  StarPatternWildcard
  deriving (Eq, Ord, Read, Show)

_StarPattern = Core.Name "hydra.python.syntax.StarPattern"

_StarPattern_capture = Core.Name "capture"

_StarPattern_wildcard = Core.Name "wildcard"

data MappingPattern =
  MappingPattern {
    mappingPatternItems :: (Maybe ItemsPattern),
    mappingPatternDoubleStar :: (Maybe DoubleStarPattern)}
  deriving (Eq, Ord, Read, Show)

_MappingPattern = Core.Name "hydra.python.syntax.MappingPattern"

_MappingPattern_items = Core.Name "items"

_MappingPattern_doubleStar = Core.Name "doubleStar"

newtype ItemsPattern =
  ItemsPattern {
    unItemsPattern :: [KeyValuePattern]}
  deriving (Eq, Ord, Read, Show)

_ItemsPattern = Core.Name "hydra.python.syntax.ItemsPattern"

data KeyValuePattern =
  KeyValuePattern {
    keyValuePatternKey :: LiteralExpressionOrAttribute,
    keyValuePatternValue :: Pattern}
  deriving (Eq, Ord, Read, Show)

_KeyValuePattern = Core.Name "hydra.python.syntax.KeyValuePattern"

_KeyValuePattern_key = Core.Name "key"

_KeyValuePattern_value = Core.Name "value"

data LiteralExpressionOrAttribute =
  LiteralExpressionOrAttributeLiteral LiteralExpression |
  LiteralExpressionOrAttributeAttribute Attribute
  deriving (Eq, Ord, Read, Show)

_LiteralExpressionOrAttribute = Core.Name "hydra.python.syntax.LiteralExpressionOrAttribute"

_LiteralExpressionOrAttribute_literal = Core.Name "literal"

_LiteralExpressionOrAttribute_attribute = Core.Name "attribute"

newtype DoubleStarPattern =
  DoubleStarPattern {
    unDoubleStarPattern :: PatternCaptureTarget}
  deriving (Eq, Ord, Read, Show)

_DoubleStarPattern = Core.Name "hydra.python.syntax.DoubleStarPattern"

data ClassPattern =
  ClassPattern {
    classPatternNameOrAttribute :: NameOrAttribute,
    classPatternPositionalPatterns :: (Maybe PositionalPatterns),
    classPatternKeywordPatterns :: (Maybe KeywordPatterns)}
  deriving (Eq, Ord, Read, Show)

_ClassPattern = Core.Name "hydra.python.syntax.ClassPattern"

_ClassPattern_nameOrAttribute = Core.Name "nameOrAttribute"

_ClassPattern_positionalPatterns = Core.Name "positionalPatterns"

_ClassPattern_keywordPatterns = Core.Name "keywordPatterns"

newtype PositionalPatterns =
  PositionalPatterns {
    unPositionalPatterns :: [Pattern]}
  deriving (Eq, Ord, Read, Show)

_PositionalPatterns = Core.Name "hydra.python.syntax.PositionalPatterns"

newtype KeywordPatterns =
  KeywordPatterns {
    unKeywordPatterns :: [KeywordPattern]}
  deriving (Eq, Ord, Read, Show)

_KeywordPatterns = Core.Name "hydra.python.syntax.KeywordPatterns"

data KeywordPattern =
  KeywordPattern {
    keywordPatternName :: Name,
    keywordPatternPattern :: Pattern}
  deriving (Eq, Ord, Read, Show)

_KeywordPattern = Core.Name "hydra.python.syntax.KeywordPattern"

_KeywordPattern_name = Core.Name "name"

_KeywordPattern_pattern = Core.Name "pattern"

data TypeAlias =
  TypeAlias {
    typeAliasName :: Name,
    typeAliasTypeParams :: [TypeParameter],
    typeAliasExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_TypeAlias = Core.Name "hydra.python.syntax.TypeAlias"

_TypeAlias_name = Core.Name "name"

_TypeAlias_typeParams = Core.Name "typeParams"

_TypeAlias_expression = Core.Name "expression"

data TypeParameter =
  TypeParameterSimple SimpleTypeParameter |
  TypeParameterStar StarTypeParameter |
  TypeParameterDoubleStar DoubleStarTypeParameter
  deriving (Eq, Ord, Read, Show)

_TypeParameter = Core.Name "hydra.python.syntax.TypeParameter"

_TypeParameter_simple = Core.Name "simple"

_TypeParameter_star = Core.Name "star"

_TypeParameter_doubleStar = Core.Name "doubleStar"

data SimpleTypeParameter =
  SimpleTypeParameter {
    simpleTypeParameterName :: Name,
    simpleTypeParameterBound :: (Maybe Expression),
    simpleTypeParameterDefault :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_SimpleTypeParameter = Core.Name "hydra.python.syntax.SimpleTypeParameter"

_SimpleTypeParameter_name = Core.Name "name"

_SimpleTypeParameter_bound = Core.Name "bound"

_SimpleTypeParameter_default = Core.Name "default"

data StarTypeParameter =
  StarTypeParameter {
    starTypeParameterName :: Name,
    starTypeParameterDefault :: (Maybe StarExpression)}
  deriving (Eq, Ord, Read, Show)

_StarTypeParameter = Core.Name "hydra.python.syntax.StarTypeParameter"

_StarTypeParameter_name = Core.Name "name"

_StarTypeParameter_default = Core.Name "default"

data DoubleStarTypeParameter =
  DoubleStarTypeParameter {
    doubleStarTypeParameterName :: Name,
    doubleStarTypeParameterDefault :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_DoubleStarTypeParameter = Core.Name "hydra.python.syntax.DoubleStarTypeParameter"

_DoubleStarTypeParameter_name = Core.Name "name"

_DoubleStarTypeParameter_default = Core.Name "default"

data Expression =
  ExpressionConditional Conditional |
  ExpressionSimple Disjunction |
  ExpressionLambda Lambda
  deriving (Eq, Ord, Read, Show)

_Expression = Core.Name "hydra.python.syntax.Expression"

_Expression_conditional = Core.Name "conditional"

_Expression_simple = Core.Name "simple"

_Expression_lambda = Core.Name "lambda"

data Conditional =
  Conditional {
    conditionalBody :: Disjunction,
    conditionalIf :: Disjunction,
    conditionalElse :: Expression}
  deriving (Eq, Ord, Read, Show)

_Conditional = Core.Name "hydra.python.syntax.Conditional"

_Conditional_body = Core.Name "body"

_Conditional_if = Core.Name "if"

_Conditional_else = Core.Name "else"

data YieldExpression =
  YieldExpressionFrom Expression |
  YieldExpressionSimple [StarExpression]
  deriving (Eq, Ord, Read, Show)

_YieldExpression = Core.Name "hydra.python.syntax.YieldExpression"

_YieldExpression_from = Core.Name "from"

_YieldExpression_simple = Core.Name "simple"

data StarExpression =
  StarExpressionStar BitwiseOr |
  StarExpressionSimple Expression
  deriving (Eq, Ord, Read, Show)

_StarExpression = Core.Name "hydra.python.syntax.StarExpression"

_StarExpression_star = Core.Name "star"

_StarExpression_simple = Core.Name "simple"

newtype StarNamedExpressions =
  StarNamedExpressions {
    unStarNamedExpressions :: [StarNamedExpression]}
  deriving (Eq, Ord, Read, Show)

_StarNamedExpressions = Core.Name "hydra.python.syntax.StarNamedExpressions"

data StarNamedExpression =
  StarNamedExpressionStar BitwiseOr |
  StarNamedExpressionSimple NamedExpression
  deriving (Eq, Ord, Read, Show)

_StarNamedExpression = Core.Name "hydra.python.syntax.StarNamedExpression"

_StarNamedExpression_star = Core.Name "star"

_StarNamedExpression_simple = Core.Name "simple"

data AssignmentExpression =
  AssignmentExpression {
    assignmentExpressionName :: Name,
    assignmentExpressionExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_AssignmentExpression = Core.Name "hydra.python.syntax.AssignmentExpression"

_AssignmentExpression_name = Core.Name "name"

_AssignmentExpression_expression = Core.Name "expression"

data NamedExpression =
  NamedExpressionAssignment AssignmentExpression |
  NamedExpressionSimple Expression
  deriving (Eq, Ord, Read, Show)

_NamedExpression = Core.Name "hydra.python.syntax.NamedExpression"

_NamedExpression_assignment = Core.Name "assignment"

_NamedExpression_simple = Core.Name "simple"

newtype Disjunction =
  Disjunction {
    unDisjunction :: [Conjunction]}
  deriving (Eq, Ord, Read, Show)

_Disjunction = Core.Name "hydra.python.syntax.Disjunction"

newtype Conjunction =
  Conjunction {
    unConjunction :: [Inversion]}
  deriving (Eq, Ord, Read, Show)

_Conjunction = Core.Name "hydra.python.syntax.Conjunction"

data Inversion =
  InversionNot Inversion |
  InversionSimple Comparison
  deriving (Eq, Ord, Read, Show)

_Inversion = Core.Name "hydra.python.syntax.Inversion"

_Inversion_not = Core.Name "not"

_Inversion_simple = Core.Name "simple"

data Comparison =
  Comparison {
    comparisonLhs :: BitwiseOr,
    comparisonRhs :: [CompareOpBitwiseOrPair]}
  deriving (Eq, Ord, Read, Show)

_Comparison = Core.Name "hydra.python.syntax.Comparison"

_Comparison_lhs = Core.Name "lhs"

_Comparison_rhs = Core.Name "rhs"

data CompareOpBitwiseOrPair =
  CompareOpBitwiseOrPair {
    compareOpBitwiseOrPairOperator :: CompareOp,
    compareOpBitwiseOrPairRhs :: BitwiseOr}
  deriving (Eq, Ord, Read, Show)

_CompareOpBitwiseOrPair = Core.Name "hydra.python.syntax.CompareOpBitwiseOrPair"

_CompareOpBitwiseOrPair_operator = Core.Name "operator"

_CompareOpBitwiseOrPair_rhs = Core.Name "rhs"

data CompareOp =
  CompareOpEq |
  CompareOpNoteq |
  CompareOpLte |
  CompareOpLt |
  CompareOpGte |
  CompareOpGt |
  CompareOpNotin |
  CompareOpIn |
  CompareOpIsnot |
  CompareOpIs
  deriving (Eq, Ord, Read, Show)

_CompareOp = Core.Name "hydra.python.syntax.CompareOp"

_CompareOp_eq = Core.Name "eq"

_CompareOp_noteq = Core.Name "noteq"

_CompareOp_lte = Core.Name "lte"

_CompareOp_lt = Core.Name "lt"

_CompareOp_gte = Core.Name "gte"

_CompareOp_gt = Core.Name "gt"

_CompareOp_notin = Core.Name "notin"

_CompareOp_in = Core.Name "in"

_CompareOp_isnot = Core.Name "isnot"

_CompareOp_is = Core.Name "is"

data BitwiseOr =
  BitwiseOr {
    bitwiseOrLhs :: (Maybe BitwiseOr),
    bitwiseOrRhs :: BitwiseXor}
  deriving (Eq, Ord, Read, Show)

_BitwiseOr = Core.Name "hydra.python.syntax.BitwiseOr"

_BitwiseOr_lhs = Core.Name "lhs"

_BitwiseOr_rhs = Core.Name "rhs"

data BitwiseXor =
  BitwiseXor {
    bitwiseXorLhs :: (Maybe BitwiseXor),
    bitwiseXorRhs :: BitwiseAnd}
  deriving (Eq, Ord, Read, Show)

_BitwiseXor = Core.Name "hydra.python.syntax.BitwiseXor"

_BitwiseXor_lhs = Core.Name "lhs"

_BitwiseXor_rhs = Core.Name "rhs"

data BitwiseAnd =
  BitwiseAnd {
    bitwiseAndLhs :: (Maybe BitwiseAnd),
    bitwiseAndRhs :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)

_BitwiseAnd = Core.Name "hydra.python.syntax.BitwiseAnd"

_BitwiseAnd_lhs = Core.Name "lhs"

_BitwiseAnd_rhs = Core.Name "rhs"

data ShiftExpression =
  ShiftExpression {
    shiftExpressionLhs :: (Maybe ShiftLhs),
    shiftExpressionRhs :: Sum}
  deriving (Eq, Ord, Read, Show)

_ShiftExpression = Core.Name "hydra.python.syntax.ShiftExpression"

_ShiftExpression_lhs = Core.Name "lhs"

_ShiftExpression_rhs = Core.Name "rhs"

data ShiftLhs =
  ShiftLhs {
    shiftLhsOperand :: ShiftExpression,
    shiftLhsOperator :: ShiftOp}
  deriving (Eq, Ord, Read, Show)

_ShiftLhs = Core.Name "hydra.python.syntax.ShiftLhs"

_ShiftLhs_operand = Core.Name "operand"

_ShiftLhs_operator = Core.Name "operator"

data ShiftOp =
  ShiftOpLeft |
  ShiftOpRight
  deriving (Eq, Ord, Read, Show)

_ShiftOp = Core.Name "hydra.python.syntax.ShiftOp"

_ShiftOp_left = Core.Name "left"

_ShiftOp_right = Core.Name "right"

data Sum =
  Sum {
    sumLhs :: (Maybe SumLhs),
    sumRhs :: Term}
  deriving (Eq, Ord, Read, Show)

_Sum = Core.Name "hydra.python.syntax.Sum"

_Sum_lhs = Core.Name "lhs"

_Sum_rhs = Core.Name "rhs"

data SumLhs =
  SumLhs {
    sumLhsOperand :: Sum,
    sumLhsOperator :: SumOp}
  deriving (Eq, Ord, Read, Show)

_SumLhs = Core.Name "hydra.python.syntax.SumLhs"

_SumLhs_operand = Core.Name "operand"

_SumLhs_operator = Core.Name "operator"

data SumOp =
  SumOpAdd |
  SumOpSub
  deriving (Eq, Ord, Read, Show)

_SumOp = Core.Name "hydra.python.syntax.SumOp"

_SumOp_add = Core.Name "add"

_SumOp_sub = Core.Name "sub"

data Term =
  Term {
    termLhs :: (Maybe TermLhs),
    termRhs :: Factor}
  deriving (Eq, Ord, Read, Show)

_Term = Core.Name "hydra.python.syntax.Term"

_Term_lhs = Core.Name "lhs"

_Term_rhs = Core.Name "rhs"

data TermLhs =
  TermLhs {
    termLhsOperand :: Term,
    termLhsOperator :: TermOp}
  deriving (Eq, Ord, Read, Show)

_TermLhs = Core.Name "hydra.python.syntax.TermLhs"

_TermLhs_operand = Core.Name "operand"

_TermLhs_operator = Core.Name "operator"

data TermOp =
  TermOpMul |
  TermOpDiv |
  TermOpFloordiv |
  TermOpMod |
  TermOpMatmul
  deriving (Eq, Ord, Read, Show)

_TermOp = Core.Name "hydra.python.syntax.TermOp"

_TermOp_mul = Core.Name "mul"

_TermOp_div = Core.Name "div"

_TermOp_floordiv = Core.Name "floordiv"

_TermOp_mod = Core.Name "mod"

_TermOp_matmul = Core.Name "matmul"

data Factor =
  FactorPositive Factor |
  FactorNegative Factor |
  FactorComplement Factor |
  FactorSimple Power
  deriving (Eq, Ord, Read, Show)

_Factor = Core.Name "hydra.python.syntax.Factor"

_Factor_positive = Core.Name "positive"

_Factor_negative = Core.Name "negative"

_Factor_complement = Core.Name "complement"

_Factor_simple = Core.Name "simple"

data Power =
  Power {
    powerLhs :: AwaitPrimary,
    powerRhs :: (Maybe Factor)}
  deriving (Eq, Ord, Read, Show)

_Power = Core.Name "hydra.python.syntax.Power"

_Power_lhs = Core.Name "lhs"

_Power_rhs = Core.Name "rhs"

data AwaitPrimary =
  AwaitPrimary {
    awaitPrimaryAwait :: Bool,
    awaitPrimaryPrimary :: Primary}
  deriving (Eq, Ord, Read, Show)

_AwaitPrimary = Core.Name "hydra.python.syntax.AwaitPrimary"

_AwaitPrimary_await = Core.Name "await"

_AwaitPrimary_primary = Core.Name "primary"

data Primary =
  PrimarySimple Atom |
  PrimaryCompound PrimaryWithRhs
  deriving (Eq, Ord, Read, Show)

_Primary = Core.Name "hydra.python.syntax.Primary"

_Primary_simple = Core.Name "simple"

_Primary_compound = Core.Name "compound"

data PrimaryWithRhs =
  PrimaryWithRhs {
    primaryWithRhsPrimary :: Primary,
    primaryWithRhsRhs :: PrimaryRhs}
  deriving (Eq, Ord, Read, Show)

_PrimaryWithRhs = Core.Name "hydra.python.syntax.PrimaryWithRhs"

_PrimaryWithRhs_primary = Core.Name "primary"

_PrimaryWithRhs_rhs = Core.Name "rhs"

data PrimaryRhs =
  PrimaryRhsProject Name |
  PrimaryRhsGenexp Genexp |
  PrimaryRhsCall Args |
  PrimaryRhsSlices Slices
  deriving (Eq, Ord, Read, Show)

_PrimaryRhs = Core.Name "hydra.python.syntax.PrimaryRhs"

_PrimaryRhs_project = Core.Name "project"

_PrimaryRhs_genexp = Core.Name "genexp"

_PrimaryRhs_call = Core.Name "call"

_PrimaryRhs_slices = Core.Name "slices"

data Slices =
  Slices {
    slicesHead :: Slice,
    slicesTail :: [SliceOrStarredExpression]}
  deriving (Eq, Ord, Read, Show)

_Slices = Core.Name "hydra.python.syntax.Slices"

_Slices_head = Core.Name "head"

_Slices_tail = Core.Name "tail"

data SliceOrStarredExpression =
  SliceOrStarredExpressionSlice Slice |
  SliceOrStarredExpressionStarred StarredExpression
  deriving (Eq, Ord, Read, Show)

_SliceOrStarredExpression = Core.Name "hydra.python.syntax.SliceOrStarredExpression"

_SliceOrStarredExpression_slice = Core.Name "slice"

_SliceOrStarredExpression_starred = Core.Name "starred"

data Slice =
  SliceNamed NamedExpression |
  SliceSlice_ SliceExpression
  deriving (Eq, Ord, Read, Show)

_Slice = Core.Name "hydra.python.syntax.Slice"

_Slice_named = Core.Name "named"

_Slice_slice_ = Core.Name "slice_"

data SliceExpression =
  SliceExpression {
    sliceExpressionStart :: (Maybe Expression),
    sliceExpressionStop :: (Maybe Expression),
    sliceExpressionStep :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_SliceExpression = Core.Name "hydra.python.syntax.SliceExpression"

_SliceExpression_start = Core.Name "start"

_SliceExpression_stop = Core.Name "stop"

_SliceExpression_step = Core.Name "step"

data Atom =
  AtomName Name |
  AtomTrue |
  AtomFalse |
  AtomNone |
  AtomString String_ |
  AtomNumber Number |
  AtomTuple Tuple |
  AtomGroup Group |
  AtomGenexp Genexp |
  AtomList List |
  AtomListcomp Listcomp |
  AtomDict Dict |
  AtomSet Set |
  AtomDictcomp Dictcomp |
  AtomSetcomp Setcomp |
  AtomEllipsis
  deriving (Eq, Ord, Read, Show)

_Atom = Core.Name "hydra.python.syntax.Atom"

_Atom_name = Core.Name "name"

_Atom_true = Core.Name "true"

_Atom_false = Core.Name "false"

_Atom_none = Core.Name "none"

_Atom_string = Core.Name "string"

_Atom_number = Core.Name "number"

_Atom_tuple = Core.Name "tuple"

_Atom_group = Core.Name "group"

_Atom_genexp = Core.Name "genexp"

_Atom_list = Core.Name "list"

_Atom_listcomp = Core.Name "listcomp"

_Atom_dict = Core.Name "dict"

_Atom_set = Core.Name "set"

_Atom_dictcomp = Core.Name "dictcomp"

_Atom_setcomp = Core.Name "setcomp"

_Atom_ellipsis = Core.Name "ellipsis"

data Group =
  GroupYield YieldExpression |
  GroupExpression NamedExpression
  deriving (Eq, Ord, Read, Show)

_Group = Core.Name "hydra.python.syntax.Group"

_Group_yield = Core.Name "yield"

_Group_expression = Core.Name "expression"

data Lambda =
  Lambda {
    lambdaParams :: LambdaParameters,
    lambdaBody :: Expression}
  deriving (Eq, Ord, Read, Show)

_Lambda = Core.Name "hydra.python.syntax.Lambda"

_Lambda_params = Core.Name "params"

_Lambda_body = Core.Name "body"

data LambdaParameters =
  LambdaParameters {
    lambdaParametersSlashNoDefault :: (Maybe LambdaSlashNoDefault),
    lambdaParametersParamNoDefault :: [LambdaParamNoDefault],
    lambdaParametersParamWithDefault :: [LambdaParamWithDefault],
    lambdaParametersStarEtc :: (Maybe LambdaStarEtc)}
  deriving (Eq, Ord, Read, Show)

_LambdaParameters = Core.Name "hydra.python.syntax.LambdaParameters"

_LambdaParameters_slashNoDefault = Core.Name "slashNoDefault"

_LambdaParameters_paramNoDefault = Core.Name "paramNoDefault"

_LambdaParameters_paramWithDefault = Core.Name "paramWithDefault"

_LambdaParameters_starEtc = Core.Name "starEtc"

data LambdaSlashNoDefault =
  LambdaSlashNoDefault {
    lambdaSlashNoDefaultParameters :: [LambdaParamNoDefault]}
  deriving (Eq, Ord, Read, Show)

_LambdaSlashNoDefault = Core.Name "hydra.python.syntax.LambdaSlashNoDefault"

_LambdaSlashNoDefault_parameters = Core.Name "parameters"

data LambdaSlashWithDefault =
  LambdaSlashWithDefault {
    lambdaSlashWithDefaultParamNoDefault :: [LambdaParamNoDefault],
    lambdaSlashWithDefaultParamWithDefault :: [LambdaParamWithDefault]}
  deriving (Eq, Ord, Read, Show)

_LambdaSlashWithDefault = Core.Name "hydra.python.syntax.LambdaSlashWithDefault"

_LambdaSlashWithDefault_paramNoDefault = Core.Name "paramNoDefault"

_LambdaSlashWithDefault_paramWithDefault = Core.Name "paramWithDefault"

data LambdaStarEtc =
  LambdaStarEtcStar Bool |
  LambdaStarEtcParamNoDefault LambdaParamNoDefault |
  LambdaStarEtcParamMaybeDefault [LambdaParamMaybeDefault] |
  LambdaStarEtcKwds LambdaKwds
  deriving (Eq, Ord, Read, Show)

_LambdaStarEtc = Core.Name "hydra.python.syntax.LambdaStarEtc"

_LambdaStarEtc_star = Core.Name "star"

_LambdaStarEtc_paramNoDefault = Core.Name "paramNoDefault"

_LambdaStarEtc_paramMaybeDefault = Core.Name "paramMaybeDefault"

_LambdaStarEtc_kwds = Core.Name "kwds"

newtype LambdaKwds =
  LambdaKwds {
    unLambdaKwds :: LambdaParamNoDefault}
  deriving (Eq, Ord, Read, Show)

_LambdaKwds = Core.Name "hydra.python.syntax.LambdaKwds"

newtype LambdaParamNoDefault =
  LambdaParamNoDefault {
    unLambdaParamNoDefault :: Name}
  deriving (Eq, Ord, Read, Show)

_LambdaParamNoDefault = Core.Name "hydra.python.syntax.LambdaParamNoDefault"

data LambdaParamWithDefault =
  LambdaParamWithDefault {
    lambdaParamWithDefaultParam :: Name,
    lambdaParamWithDefaultDefault :: (Maybe Default)}
  deriving (Eq, Ord, Read, Show)

_LambdaParamWithDefault = Core.Name "hydra.python.syntax.LambdaParamWithDefault"

_LambdaParamWithDefault_param = Core.Name "param"

_LambdaParamWithDefault_default = Core.Name "default"

data LambdaParamMaybeDefault =
  LambdaParamMaybeDefault {
    lambdaParamMaybeDefaultParam :: Name,
    lambdaParamMaybeDefaultDefault :: (Maybe Default)}
  deriving (Eq, Ord, Read, Show)

_LambdaParamMaybeDefault = Core.Name "hydra.python.syntax.LambdaParamMaybeDefault"

_LambdaParamMaybeDefault_param = Core.Name "param"

_LambdaParamMaybeDefault_default = Core.Name "default"

newtype List =
  List {
    unList :: [StarNamedExpression]}
  deriving (Eq, Ord, Read, Show)

_List = Core.Name "hydra.python.syntax.List"

newtype Tuple =
  Tuple {
    unTuple :: [StarNamedExpression]}
  deriving (Eq, Ord, Read, Show)

_Tuple = Core.Name "hydra.python.syntax.Tuple"

newtype Set =
  Set {
    unSet :: [StarNamedExpression]}
  deriving (Eq, Ord, Read, Show)

_Set = Core.Name "hydra.python.syntax.Set"

newtype Dict =
  Dict {
    unDict :: [DoubleStarredKvpair]}
  deriving (Eq, Ord, Read, Show)

_Dict = Core.Name "hydra.python.syntax.Dict"

data DoubleStarredKvpair =
  DoubleStarredKvpairStarred BitwiseOr |
  DoubleStarredKvpairPair Kvpair
  deriving (Eq, Ord, Read, Show)

_DoubleStarredKvpair = Core.Name "hydra.python.syntax.DoubleStarredKvpair"

_DoubleStarredKvpair_starred = Core.Name "starred"

_DoubleStarredKvpair_pair = Core.Name "pair"

data Kvpair =
  Kvpair {
    kvpairKey :: Expression,
    kvpairValue :: Expression}
  deriving (Eq, Ord, Read, Show)

_Kvpair = Core.Name "hydra.python.syntax.Kvpair"

_Kvpair_key = Core.Name "key"

_Kvpair_value = Core.Name "value"

newtype ForIfClauses =
  ForIfClauses {
    unForIfClauses :: [ForIfClause]}
  deriving (Eq, Ord, Read, Show)

_ForIfClauses = Core.Name "hydra.python.syntax.ForIfClauses"

data ForIfClause =
  ForIfClause {
    forIfClauseAsync :: Bool,
    forIfClauseTargets :: [StarTarget],
    forIfClauseIn :: Disjunction,
    forIfClauseIfs :: [Disjunction]}
  deriving (Eq, Ord, Read, Show)

_ForIfClause = Core.Name "hydra.python.syntax.ForIfClause"

_ForIfClause_async = Core.Name "async"

_ForIfClause_targets = Core.Name "targets"

_ForIfClause_in = Core.Name "in"

_ForIfClause_ifs = Core.Name "ifs"

data Listcomp =
  Listcomp {
    listcompExpression :: NamedExpression,
    listcompForIfClauses :: ForIfClauses}
  deriving (Eq, Ord, Read, Show)

_Listcomp = Core.Name "hydra.python.syntax.Listcomp"

_Listcomp_expression = Core.Name "expression"

_Listcomp_forIfClauses = Core.Name "forIfClauses"

data Setcomp =
  Setcomp {
    setcompExpression :: NamedExpression,
    setcompForIfClauses :: ForIfClauses}
  deriving (Eq, Ord, Read, Show)

_Setcomp = Core.Name "hydra.python.syntax.Setcomp"

_Setcomp_expression = Core.Name "expression"

_Setcomp_forIfClauses = Core.Name "forIfClauses"

data Genexp =
  Genexp {
    genexpHead :: GenexpHead,
    genexpTail :: ForIfClauses}
  deriving (Eq, Ord, Read, Show)

_Genexp = Core.Name "hydra.python.syntax.Genexp"

_Genexp_head = Core.Name "head"

_Genexp_tail = Core.Name "tail"

data GenexpHead =
  GenexpHeadAssignment AssignmentExpression |
  GenexpHeadExpression Expression
  deriving (Eq, Ord, Read, Show)

_GenexpHead = Core.Name "hydra.python.syntax.GenexpHead"

_GenexpHead_assignment = Core.Name "assignment"

_GenexpHead_expression = Core.Name "expression"

data Dictcomp =
  Dictcomp {
    dictcompKvpair :: Kvpair,
    dictcompForIfClauses :: ForIfClauses}
  deriving (Eq, Ord, Read, Show)

_Dictcomp = Core.Name "hydra.python.syntax.Dictcomp"

_Dictcomp_kvpair = Core.Name "kvpair"

_Dictcomp_forIfClauses = Core.Name "forIfClauses"

data Args =
  Args {
    argsPositional :: [PosArg],
    argsKwargOrStarred :: [KwargOrStarred],
    argsKwargOrDoubleStarred :: [KwargOrDoubleStarred]}
  deriving (Eq, Ord, Read, Show)

_Args = Core.Name "hydra.python.syntax.Args"

_Args_positional = Core.Name "positional"

_Args_kwargOrStarred = Core.Name "kwargOrStarred"

_Args_kwargOrDoubleStarred = Core.Name "kwargOrDoubleStarred"

data PosArg =
  PosArgStarred StarredExpression |
  PosArgAssignment AssignmentExpression |
  PosArgExpression Expression
  deriving (Eq, Ord, Read, Show)

_PosArg = Core.Name "hydra.python.syntax.PosArg"

_PosArg_starred = Core.Name "starred"

_PosArg_assignment = Core.Name "assignment"

_PosArg_expression = Core.Name "expression"

newtype StarredExpression =
  StarredExpression {
    unStarredExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_StarredExpression = Core.Name "hydra.python.syntax.StarredExpression"

data KwargOrStarred =
  KwargOrStarredKwarg Kwarg |
  KwargOrStarredStarred StarredExpression
  deriving (Eq, Ord, Read, Show)

_KwargOrStarred = Core.Name "hydra.python.syntax.KwargOrStarred"

_KwargOrStarred_kwarg = Core.Name "kwarg"

_KwargOrStarred_starred = Core.Name "starred"

data Kwarg =
  Kwarg {
    kwargName :: Name,
    kwargValue :: Expression}
  deriving (Eq, Ord, Read, Show)

_Kwarg = Core.Name "hydra.python.syntax.Kwarg"

_Kwarg_name = Core.Name "name"

_Kwarg_value = Core.Name "value"

data KwargOrDoubleStarred =
  KwargOrDoubleStarredKwarg Kwarg |
  KwargOrDoubleStarredDoubleStarred Expression
  deriving (Eq, Ord, Read, Show)

_KwargOrDoubleStarred = Core.Name "hydra.python.syntax.KwargOrDoubleStarred"

_KwargOrDoubleStarred_kwarg = Core.Name "kwarg"

_KwargOrDoubleStarred_doubleStarred = Core.Name "doubleStarred"

newtype StarTargetsListSeq =
  StarTargetsListSeq {
    unStarTargetsListSeq :: [StarTarget]}
  deriving (Eq, Ord, Read, Show)

_StarTargetsListSeq = Core.Name "hydra.python.syntax.StarTargetsListSeq"

newtype StarTargetsTupleSeq =
  StarTargetsTupleSeq {
    unStarTargetsTupleSeq :: [StarTarget]}
  deriving (Eq, Ord, Read, Show)

_StarTargetsTupleSeq = Core.Name "hydra.python.syntax.StarTargetsTupleSeq"

data StarTarget =
  StarTargetStarred StarTarget |
  StarTargetUnstarred TargetWithStarAtom
  deriving (Eq, Ord, Read, Show)

_StarTarget = Core.Name "hydra.python.syntax.StarTarget"

_StarTarget_starred = Core.Name "starred"

_StarTarget_unstarred = Core.Name "unstarred"

data TargetWithStarAtom =
  TargetWithStarAtomProject TPrimaryAndName |
  TargetWithStarAtomSlices TPrimaryAndSlices |
  TargetWithStarAtomAtom StarAtom
  deriving (Eq, Ord, Read, Show)

_TargetWithStarAtom = Core.Name "hydra.python.syntax.TargetWithStarAtom"

_TargetWithStarAtom_project = Core.Name "project"

_TargetWithStarAtom_slices = Core.Name "slices"

_TargetWithStarAtom_atom = Core.Name "atom"

data TPrimaryAndName =
  TPrimaryAndName {
    tPrimaryAndNamePrimary :: TPrimary,
    tPrimaryAndNameName :: Name}
  deriving (Eq, Ord, Read, Show)

_TPrimaryAndName = Core.Name "hydra.python.syntax.TPrimaryAndName"

_TPrimaryAndName_primary = Core.Name "primary"

_TPrimaryAndName_name = Core.Name "name"

data TPrimaryAndSlices =
  TPrimaryAndSlices {
    tPrimaryAndSlicesPrimary :: TPrimary,
    tPrimaryAndSlicesSlices :: Slices}
  deriving (Eq, Ord, Read, Show)

_TPrimaryAndSlices = Core.Name "hydra.python.syntax.TPrimaryAndSlices"

_TPrimaryAndSlices_primary = Core.Name "primary"

_TPrimaryAndSlices_slices = Core.Name "slices"

data StarAtom =
  StarAtomName Name |
  StarAtomTargetWithStarAtom TargetWithStarAtom |
  StarAtomStarTargetsTupleSeq (Maybe StarTargetsTupleSeq) |
  StarAtomStarTargetsListSeq (Maybe StarTargetsListSeq)
  deriving (Eq, Ord, Read, Show)

_StarAtom = Core.Name "hydra.python.syntax.StarAtom"

_StarAtom_name = Core.Name "name"

_StarAtom_targetWithStarAtom = Core.Name "targetWithStarAtom"

_StarAtom_starTargetsTupleSeq = Core.Name "starTargetsTupleSeq"

_StarAtom_starTargetsListSeq = Core.Name "starTargetsListSeq"

data SingleTarget =
  SingleTargetSubscriptAttributeTarget SingleSubscriptAttributeTarget |
  SingleTargetName Name |
  SingleTargetParens SingleTarget
  deriving (Eq, Ord, Read, Show)

_SingleTarget = Core.Name "hydra.python.syntax.SingleTarget"

_SingleTarget_subscriptAttributeTarget = Core.Name "subscriptAttributeTarget"

_SingleTarget_name = Core.Name "name"

_SingleTarget_parens = Core.Name "parens"

data SingleSubscriptAttributeTarget =
  SingleSubscriptAttributeTargetPrimaryAndName TPrimaryAndName |
  SingleSubscriptAttributeTargetPrimaryAndSlices TPrimaryAndSlices
  deriving (Eq, Ord, Read, Show)

_SingleSubscriptAttributeTarget = Core.Name "hydra.python.syntax.SingleSubscriptAttributeTarget"

_SingleSubscriptAttributeTarget_primaryAndName = Core.Name "primaryAndName"

_SingleSubscriptAttributeTarget_primaryAndSlices = Core.Name "primaryAndSlices"

data TPrimary =
  TPrimaryPrimaryAndName TPrimaryAndName |
  TPrimaryPrimaryAndSlices TPrimaryAndSlices |
  TPrimaryPrimaryAndGenexp TPrimaryAndGenexp |
  TPrimaryPrimaryAndArguments TPrimaryAndArguments |
  TPrimaryAtom Atom
  deriving (Eq, Ord, Read, Show)

_TPrimary = Core.Name "hydra.python.syntax.TPrimary"

_TPrimary_primaryAndName = Core.Name "primaryAndName"

_TPrimary_primaryAndSlices = Core.Name "primaryAndSlices"

_TPrimary_primaryAndGenexp = Core.Name "primaryAndGenexp"

_TPrimary_primaryAndArguments = Core.Name "primaryAndArguments"

_TPrimary_atom = Core.Name "atom"

data TPrimaryAndGenexp =
  TPrimaryAndGenexp {
    tPrimaryAndGenexpPrimary :: TPrimary,
    tPrimaryAndGenexpGenexp :: Genexp}
  deriving (Eq, Ord, Read, Show)

_TPrimaryAndGenexp = Core.Name "hydra.python.syntax.TPrimaryAndGenexp"

_TPrimaryAndGenexp_primary = Core.Name "primary"

_TPrimaryAndGenexp_genexp = Core.Name "genexp"

data TPrimaryAndArguments =
  TPrimaryAndArguments {
    tPrimaryAndArgumentsPrimary :: TPrimary,
    tPrimaryAndArgumentsArguments :: (Maybe Args)}
  deriving (Eq, Ord, Read, Show)

_TPrimaryAndArguments = Core.Name "hydra.python.syntax.TPrimaryAndArguments"

_TPrimaryAndArguments_primary = Core.Name "primary"

_TPrimaryAndArguments_arguments = Core.Name "arguments"

newtype DelTargets =
  DelTargets {
    unDelTargets :: [DelTarget]}
  deriving (Eq, Ord, Read, Show)

_DelTargets = Core.Name "hydra.python.syntax.DelTargets"

data DelTarget =
  DelTargetPrimaryAndName TPrimaryAndName |
  DelTargetPrimaryAndSlices TPrimaryAndSlices |
  DelTargetDelTAtom DelTAtom
  deriving (Eq, Ord, Read, Show)

_DelTarget = Core.Name "hydra.python.syntax.DelTarget"

_DelTarget_primaryAndName = Core.Name "primaryAndName"

_DelTarget_primaryAndSlices = Core.Name "primaryAndSlices"

_DelTarget_delTAtom = Core.Name "delTAtom"

data DelTAtom =
  DelTAtomName Name |
  DelTAtomTarget DelTarget |
  DelTAtomTargets DelTargets
  deriving (Eq, Ord, Read, Show)

_DelTAtom = Core.Name "hydra.python.syntax.DelTAtom"

_DelTAtom_name = Core.Name "name"

_DelTAtom_target = Core.Name "target"

_DelTAtom_targets = Core.Name "targets"

data TypeExpression =
  TypeExpressionExpression Expression |
  TypeExpressionStarredExpression Expression |
  TypeExpressionDoubleStarredExpression Expression
  deriving (Eq, Ord, Read, Show)

_TypeExpression = Core.Name "hydra.python.syntax.TypeExpression"

_TypeExpression_expression = Core.Name "expression"

_TypeExpression_starredExpression = Core.Name "starredExpression"

_TypeExpression_doubleStarredExpression = Core.Name "doubleStarredExpression"

newtype FuncTypeComment =
  FuncTypeComment {
    unFuncTypeComment :: TypeComment}
  deriving (Eq, Ord, Read, Show)

_FuncTypeComment = Core.Name "hydra.python.syntax.FuncTypeComment"