packages feed

hydra-0.15.0: src/main/haskell/Hydra/Cypher/OpenCypher.hs

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

-- | A Cypher model based on the OpenCypher specification (version 23), copyright Neo Technology, available at:
-- |   https://opencypher.org/resources/

module Hydra.Cypher.OpenCypher 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 Query =
  QueryRegular RegularQuery |
  QueryStandalone StandaloneCall
  deriving (Eq, Ord, Read, Show)

_Query = Core.Name "hydra.cypher.openCypher.Query"

_Query_regular = Core.Name "regular"

_Query_standalone = Core.Name "standalone"

data RegularQuery =
  RegularQuery {
    regularQueryHead :: SingleQuery,
    regularQueryRest :: [Union]}
  deriving (Eq, Ord, Read, Show)

_RegularQuery = Core.Name "hydra.cypher.openCypher.RegularQuery"

_RegularQuery_head = Core.Name "head"

_RegularQuery_rest = Core.Name "rest"

data Union =
  Union {
    unionAll :: Bool,
    unionQuery :: SingleQuery}
  deriving (Eq, Ord, Read, Show)

_Union = Core.Name "hydra.cypher.openCypher.Union"

_Union_all = Core.Name "all"

_Union_query = Core.Name "query"

data SingleQuery =
  SingleQuerySinglePart SinglePartQuery |
  SingleQueryMultiPart MultiPartQuery
  deriving (Eq, Ord, Read, Show)

_SingleQuery = Core.Name "hydra.cypher.openCypher.SingleQuery"

_SingleQuery_singlePart = Core.Name "singlePart"

_SingleQuery_multiPart = Core.Name "multiPart"

data SinglePartQuery =
  SinglePartQuery {
    singlePartQueryReading :: [ReadingClause],
    singlePartQueryUpdating :: [UpdatingClause],
    singlePartQueryReturn :: (Maybe Return)}
  deriving (Eq, Ord, Read, Show)

_SinglePartQuery = Core.Name "hydra.cypher.openCypher.SinglePartQuery"

_SinglePartQuery_reading = Core.Name "reading"

_SinglePartQuery_updating = Core.Name "updating"

_SinglePartQuery_return = Core.Name "return"

data WithClause =
  WithClause {
    withClauseReading :: [ReadingClause],
    withClauseUpdating :: [UpdatingClause],
    withClauseWith :: With}
  deriving (Eq, Ord, Read, Show)

_WithClause = Core.Name "hydra.cypher.openCypher.WithClause"

_WithClause_reading = Core.Name "reading"

_WithClause_updating = Core.Name "updating"

_WithClause_with = Core.Name "with"

data MultiPartQuery =
  MultiPartQuery {
    multiPartQueryWith :: [WithClause],
    multiPartQueryBody :: SinglePartQuery}
  deriving (Eq, Ord, Read, Show)

_MultiPartQuery = Core.Name "hydra.cypher.openCypher.MultiPartQuery"

_MultiPartQuery_with = Core.Name "with"

_MultiPartQuery_body = Core.Name "body"

data UpdatingClause =
  UpdatingClauseCreate Create |
  UpdatingClauseMerge Merge |
  UpdatingClauseDelete Delete |
  UpdatingClauseSet Set |
  UpdatingClauseRemove Remove
  deriving (Eq, Ord, Read, Show)

_UpdatingClause = Core.Name "hydra.cypher.openCypher.UpdatingClause"

_UpdatingClause_create = Core.Name "create"

_UpdatingClause_merge = Core.Name "merge"

_UpdatingClause_delete = Core.Name "delete"

_UpdatingClause_set = Core.Name "set"

_UpdatingClause_remove = Core.Name "remove"

data ReadingClause =
  ReadingClauseMatch Match |
  ReadingClauseUnwind Unwind |
  ReadingClauseInQueryCall InQueryCall
  deriving (Eq, Ord, Read, Show)

_ReadingClause = Core.Name "hydra.cypher.openCypher.ReadingClause"

_ReadingClause_match = Core.Name "match"

_ReadingClause_unwind = Core.Name "unwind"

_ReadingClause_inQueryCall = Core.Name "inQueryCall"

data Match =
  Match {
    matchOptional :: Bool,
    matchPattern :: Pattern,
    matchWhere :: (Maybe Where)}
  deriving (Eq, Ord, Read, Show)

_Match = Core.Name "hydra.cypher.openCypher.Match"

_Match_optional = Core.Name "optional"

_Match_pattern = Core.Name "pattern"

_Match_where = Core.Name "where"

data Unwind =
  Unwind {
    unwindExpression :: Expression,
    unwindVariable :: Variable}
  deriving (Eq, Ord, Read, Show)

_Unwind = Core.Name "hydra.cypher.openCypher.Unwind"

_Unwind_expression = Core.Name "expression"

_Unwind_variable = Core.Name "variable"

data Merge =
  Merge {
    mergePatternPart :: PatternPart,
    mergeActions :: [MergeAction]}
  deriving (Eq, Ord, Read, Show)

_Merge = Core.Name "hydra.cypher.openCypher.Merge"

_Merge_patternPart = Core.Name "patternPart"

_Merge_actions = Core.Name "actions"

data MatchOrCreate =
  MatchOrCreateMatch  |
  MatchOrCreateCreate
  deriving (Eq, Ord, Read, Show)

_MatchOrCreate = Core.Name "hydra.cypher.openCypher.MatchOrCreate"

_MatchOrCreate_match = Core.Name "match"

_MatchOrCreate_create = Core.Name "create"

data MergeAction =
  MergeAction {
    mergeActionAction :: MatchOrCreate,
    mergeActionSet :: Set}
  deriving (Eq, Ord, Read, Show)

_MergeAction = Core.Name "hydra.cypher.openCypher.MergeAction"

_MergeAction_action = Core.Name "action"

_MergeAction_set = Core.Name "set"

newtype Create =
  Create {
    unCreate :: Pattern}
  deriving (Eq, Ord, Read, Show)

_Create = Core.Name "hydra.cypher.openCypher.Create"

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

_Set = Core.Name "hydra.cypher.openCypher.Set"

data SetItem =
  SetItemProperty PropertyEquals |
  SetItemVariableEqual VariableEquals |
  SetItemVariablePlusEqual VariablePlusEquals |
  SetItemVariableLabels VariableAndNodeLabels
  deriving (Eq, Ord, Read, Show)

_SetItem = Core.Name "hydra.cypher.openCypher.SetItem"

_SetItem_property = Core.Name "property"

_SetItem_variableEqual = Core.Name "variableEqual"

_SetItem_variablePlusEqual = Core.Name "variablePlusEqual"

_SetItem_variableLabels = Core.Name "variableLabels"

data PropertyEquals =
  PropertyEquals {
    propertyEqualsLhs :: PropertyExpression,
    propertyEqualsRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_PropertyEquals = Core.Name "hydra.cypher.openCypher.PropertyEquals"

_PropertyEquals_lhs = Core.Name "lhs"

_PropertyEquals_rhs = Core.Name "rhs"

data VariableEquals =
  VariableEquals {
    variableEqualsLhs :: Variable,
    variableEqualsRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_VariableEquals = Core.Name "hydra.cypher.openCypher.VariableEquals"

_VariableEquals_lhs = Core.Name "lhs"

_VariableEquals_rhs = Core.Name "rhs"

data VariablePlusEquals =
  VariablePlusEquals {
    variablePlusEqualsLhs :: Variable,
    variablePlusEqualsRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_VariablePlusEquals = Core.Name "hydra.cypher.openCypher.VariablePlusEquals"

_VariablePlusEquals_lhs = Core.Name "lhs"

_VariablePlusEquals_rhs = Core.Name "rhs"

data VariableAndNodeLabels =
  VariableAndNodeLabels {
    variableAndNodeLabelsVariable :: Variable,
    variableAndNodeLabelsLabels :: NodeLabels}
  deriving (Eq, Ord, Read, Show)

_VariableAndNodeLabels = Core.Name "hydra.cypher.openCypher.VariableAndNodeLabels"

_VariableAndNodeLabels_variable = Core.Name "variable"

_VariableAndNodeLabels_labels = Core.Name "labels"

data Delete =
  Delete {
    deleteDetach :: Bool,
    deleteExpressions :: [Expression]}
  deriving (Eq, Ord, Read, Show)

_Delete = Core.Name "hydra.cypher.openCypher.Delete"

_Delete_detach = Core.Name "detach"

_Delete_expressions = Core.Name "expressions"

newtype Remove =
  Remove {
    unRemove :: [RemoveItem]}
  deriving (Eq, Ord, Read, Show)

_Remove = Core.Name "hydra.cypher.openCypher.Remove"

data RemoveItem =
  RemoveItemVariableLabels VariableAndNodeLabels |
  RemoveItemProperty PropertyExpression
  deriving (Eq, Ord, Read, Show)

_RemoveItem = Core.Name "hydra.cypher.openCypher.RemoveItem"

_RemoveItem_variableLabels = Core.Name "variableLabels"

_RemoveItem_property = Core.Name "property"

data InQueryCall =
  InQueryCall {
    inQueryCallCall :: ExplicitProcedureInvocation,
    inQueryCallYieldItems :: (Maybe YieldItems)}
  deriving (Eq, Ord, Read, Show)

_InQueryCall = Core.Name "hydra.cypher.openCypher.InQueryCall"

_InQueryCall_call = Core.Name "call"

_InQueryCall_yieldItems = Core.Name "yieldItems"

data ProcedureInvocation =
  ProcedureInvocationExplicit ExplicitProcedureInvocation |
  ProcedureInvocationImplicit ImplicitProcedureInvocation
  deriving (Eq, Ord, Read, Show)

_ProcedureInvocation = Core.Name "hydra.cypher.openCypher.ProcedureInvocation"

_ProcedureInvocation_explicit = Core.Name "explicit"

_ProcedureInvocation_implicit = Core.Name "implicit"

data StarOrYieldItems =
  StarOrYieldItemsStar  |
  StarOrYieldItemsItems YieldItems
  deriving (Eq, Ord, Read, Show)

_StarOrYieldItems = Core.Name "hydra.cypher.openCypher.StarOrYieldItems"

_StarOrYieldItems_star = Core.Name "star"

_StarOrYieldItems_items = Core.Name "items"

data StandaloneCall =
  StandaloneCall {
    standaloneCallCall :: ProcedureInvocation,
    standaloneCallYieldItems :: (Maybe StarOrYieldItems)}
  deriving (Eq, Ord, Read, Show)

_StandaloneCall = Core.Name "hydra.cypher.openCypher.StandaloneCall"

_StandaloneCall_call = Core.Name "call"

_StandaloneCall_yieldItems = Core.Name "yieldItems"

data YieldItems =
  YieldItems {
    yieldItemsItems :: [YieldItem],
    yieldItemsWhere :: (Maybe Where)}
  deriving (Eq, Ord, Read, Show)

_YieldItems = Core.Name "hydra.cypher.openCypher.YieldItems"

_YieldItems_items = Core.Name "items"

_YieldItems_where = Core.Name "where"

data YieldItem =
  YieldItem {
    yieldItemField :: (Maybe ProcedureResultField),
    yieldItemVariable :: Variable}
  deriving (Eq, Ord, Read, Show)

_YieldItem = Core.Name "hydra.cypher.openCypher.YieldItem"

_YieldItem_field = Core.Name "field"

_YieldItem_variable = Core.Name "variable"

data With =
  With {
    withProjection :: ProjectionBody,
    withWhere :: (Maybe Where)}
  deriving (Eq, Ord, Read, Show)

_With = Core.Name "hydra.cypher.openCypher.With"

_With_projection = Core.Name "projection"

_With_where = Core.Name "where"

newtype Return =
  Return {
    unReturn :: ProjectionBody}
  deriving (Eq, Ord, Read, Show)

_Return = Core.Name "hydra.cypher.openCypher.Return"

data ProjectionBody =
  ProjectionBody {
    projectionBodyDistinct :: Bool,
    projectionBodyProjectionItems :: ProjectionItems,
    projectionBodyOrder :: (Maybe Order),
    projectionBodySkip :: (Maybe Skip),
    projectionBodyLimit :: (Maybe Limit)}
  deriving (Eq, Ord, Read, Show)

_ProjectionBody = Core.Name "hydra.cypher.openCypher.ProjectionBody"

_ProjectionBody_distinct = Core.Name "distinct"

_ProjectionBody_projectionItems = Core.Name "projectionItems"

_ProjectionBody_order = Core.Name "order"

_ProjectionBody_skip = Core.Name "skip"

_ProjectionBody_limit = Core.Name "limit"

data ProjectionItems =
  ProjectionItems {
    projectionItemsStar :: Bool,
    projectionItemsExplicit :: [ProjectionItem]}
  deriving (Eq, Ord, Read, Show)

_ProjectionItems = Core.Name "hydra.cypher.openCypher.ProjectionItems"

_ProjectionItems_star = Core.Name "star"

_ProjectionItems_explicit = Core.Name "explicit"

data ProjectionItem =
  ProjectionItem {
    projectionItemExpression :: Expression,
    projectionItemVariable :: (Maybe Variable)}
  deriving (Eq, Ord, Read, Show)

_ProjectionItem = Core.Name "hydra.cypher.openCypher.ProjectionItem"

_ProjectionItem_expression = Core.Name "expression"

_ProjectionItem_variable = Core.Name "variable"

newtype Order =
  Order {
    unOrder :: [SortItem]}
  deriving (Eq, Ord, Read, Show)

_Order = Core.Name "hydra.cypher.openCypher.Order"

newtype Skip =
  Skip {
    unSkip :: Expression}
  deriving (Eq, Ord, Read, Show)

_Skip = Core.Name "hydra.cypher.openCypher.Skip"

newtype Limit =
  Limit {
    unLimit :: Expression}
  deriving (Eq, Ord, Read, Show)

_Limit = Core.Name "hydra.cypher.openCypher.Limit"

data SortOrder =
  SortOrderAscending  |
  SortOrderDescending
  deriving (Eq, Ord, Read, Show)

_SortOrder = Core.Name "hydra.cypher.openCypher.SortOrder"

_SortOrder_ascending = Core.Name "ascending"

_SortOrder_descending = Core.Name "descending"

data SortItem =
  SortItem {
    sortItemExpression :: Expression,
    sortItemOrder :: (Maybe SortOrder)}
  deriving (Eq, Ord, Read, Show)

_SortItem = Core.Name "hydra.cypher.openCypher.SortItem"

_SortItem_expression = Core.Name "expression"

_SortItem_order = Core.Name "order"

newtype Where =
  Where {
    unWhere :: Expression}
  deriving (Eq, Ord, Read, Show)

_Where = Core.Name "hydra.cypher.openCypher.Where"

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

_Pattern = Core.Name "hydra.cypher.openCypher.Pattern"

data PatternPart =
  PatternPart {
    patternPartVariable :: (Maybe Variable),
    patternPartPattern :: AnonymousPatternPart}
  deriving (Eq, Ord, Read, Show)

_PatternPart = Core.Name "hydra.cypher.openCypher.PatternPart"

_PatternPart_variable = Core.Name "variable"

_PatternPart_pattern = Core.Name "pattern"

newtype AnonymousPatternPart =
  AnonymousPatternPart {
    unAnonymousPatternPart :: PatternElement}
  deriving (Eq, Ord, Read, Show)

_AnonymousPatternPart = Core.Name "hydra.cypher.openCypher.AnonymousPatternPart"

data NodePatternChain =
  NodePatternChain {
    nodePatternChainNodePattern :: NodePattern,
    nodePatternChainChain :: [PatternElementChain]}
  deriving (Eq, Ord, Read, Show)

_NodePatternChain = Core.Name "hydra.cypher.openCypher.NodePatternChain"

_NodePatternChain_nodePattern = Core.Name "nodePattern"

_NodePatternChain_chain = Core.Name "chain"

data PatternElement =
  PatternElementChained NodePatternChain |
  PatternElementParenthesized PatternElement
  deriving (Eq, Ord, Read, Show)

_PatternElement = Core.Name "hydra.cypher.openCypher.PatternElement"

_PatternElement_chained = Core.Name "chained"

_PatternElement_parenthesized = Core.Name "parenthesized"

data RelationshipsPattern =
  RelationshipsPattern {
    relationshipsPatternNodePattern :: NodePattern,
    relationshipsPatternChain :: [PatternElementChain]}
  deriving (Eq, Ord, Read, Show)

_RelationshipsPattern = Core.Name "hydra.cypher.openCypher.RelationshipsPattern"

_RelationshipsPattern_nodePattern = Core.Name "nodePattern"

_RelationshipsPattern_chain = Core.Name "chain"

data NodePattern =
  NodePattern {
    nodePatternVariable :: (Maybe Variable),
    nodePatternLabels :: (Maybe NodeLabels),
    nodePatternProperties :: (Maybe Properties)}
  deriving (Eq, Ord, Read, Show)

_NodePattern = Core.Name "hydra.cypher.openCypher.NodePattern"

_NodePattern_variable = Core.Name "variable"

_NodePattern_labels = Core.Name "labels"

_NodePattern_properties = Core.Name "properties"

data PatternElementChain =
  PatternElementChain {
    patternElementChainRelationship :: RelationshipPattern,
    patternElementChainNode :: NodePattern}
  deriving (Eq, Ord, Read, Show)

_PatternElementChain = Core.Name "hydra.cypher.openCypher.PatternElementChain"

_PatternElementChain_relationship = Core.Name "relationship"

_PatternElementChain_node = Core.Name "node"

data RelationshipPattern =
  RelationshipPattern {
    relationshipPatternLeftArrow :: Bool,
    relationshipPatternDetail :: (Maybe RelationshipDetail),
    relationshipPatternRightArrow :: Bool}
  deriving (Eq, Ord, Read, Show)

_RelationshipPattern = Core.Name "hydra.cypher.openCypher.RelationshipPattern"

_RelationshipPattern_leftArrow = Core.Name "leftArrow"

_RelationshipPattern_detail = Core.Name "detail"

_RelationshipPattern_rightArrow = Core.Name "rightArrow"

data RelationshipDetail =
  RelationshipDetail {
    relationshipDetailVariable :: (Maybe Variable),
    relationshipDetailTypes :: (Maybe RelationshipTypes),
    relationshipDetailRange :: (Maybe RangeLiteral),
    relationshipDetailProperties :: (Maybe Properties)}
  deriving (Eq, Ord, Read, Show)

_RelationshipDetail = Core.Name "hydra.cypher.openCypher.RelationshipDetail"

_RelationshipDetail_variable = Core.Name "variable"

_RelationshipDetail_types = Core.Name "types"

_RelationshipDetail_range = Core.Name "range"

_RelationshipDetail_properties = Core.Name "properties"

data Properties =
  PropertiesMap MapLiteral |
  PropertiesParameter Parameter
  deriving (Eq, Ord, Read, Show)

_Properties = Core.Name "hydra.cypher.openCypher.Properties"

_Properties_map = Core.Name "map"

_Properties_parameter = Core.Name "parameter"

newtype RelationshipTypes =
  RelationshipTypes {
    unRelationshipTypes :: [RelTypeName]}
  deriving (Eq, Ord, Read, Show)

_RelationshipTypes = Core.Name "hydra.cypher.openCypher.RelationshipTypes"

newtype NodeLabels =
  NodeLabels {
    unNodeLabels :: [NodeLabel]}
  deriving (Eq, Ord, Read, Show)

_NodeLabels = Core.Name "hydra.cypher.openCypher.NodeLabels"

newtype NodeLabel =
  NodeLabel {
    unNodeLabel :: String}
  deriving (Eq, Ord, Read, Show)

_NodeLabel = Core.Name "hydra.cypher.openCypher.NodeLabel"

data RangeLiteral =
  RangeLiteral {
    rangeLiteralStart :: (Maybe Integer),
    rangeLiteralEnd :: (Maybe Integer)}
  deriving (Eq, Ord, Read, Show)

_RangeLiteral = Core.Name "hydra.cypher.openCypher.RangeLiteral"

_RangeLiteral_start = Core.Name "start"

_RangeLiteral_end = Core.Name "end"

newtype RelTypeName =
  RelTypeName {
    unRelTypeName :: String}
  deriving (Eq, Ord, Read, Show)

_RelTypeName = Core.Name "hydra.cypher.openCypher.RelTypeName"

data PropertyExpression =
  PropertyExpression {
    propertyExpressionAtom :: Atom,
    propertyExpressionLookups :: [PropertyLookup]}
  deriving (Eq, Ord, Read, Show)

_PropertyExpression = Core.Name "hydra.cypher.openCypher.PropertyExpression"

_PropertyExpression_atom = Core.Name "atom"

_PropertyExpression_lookups = Core.Name "lookups"

newtype Expression =
  Expression {
    unExpression :: OrExpression}
  deriving (Eq, Ord, Read, Show)

_Expression = Core.Name "hydra.cypher.openCypher.Expression"

newtype OrExpression =
  OrExpression {
    unOrExpression :: [XorExpression]}
  deriving (Eq, Ord, Read, Show)

_OrExpression = Core.Name "hydra.cypher.openCypher.OrExpression"

newtype XorExpression =
  XorExpression {
    unXorExpression :: [AndExpression]}
  deriving (Eq, Ord, Read, Show)

_XorExpression = Core.Name "hydra.cypher.openCypher.XorExpression"

newtype AndExpression =
  AndExpression {
    unAndExpression :: [NotExpression]}
  deriving (Eq, Ord, Read, Show)

_AndExpression = Core.Name "hydra.cypher.openCypher.AndExpression"

data NotExpression =
  NotExpression {
    notExpressionNot :: Bool,
    notExpressionExpression :: ComparisonExpression}
  deriving (Eq, Ord, Read, Show)

_NotExpression = Core.Name "hydra.cypher.openCypher.NotExpression"

_NotExpression_not = Core.Name "not"

_NotExpression_expression = Core.Name "expression"

data ComparisonExpression =
  ComparisonExpression {
    comparisonExpressionLeft :: StringListNullPredicateExpression,
    comparisonExpressionRight :: [PartialComparisonExpression]}
  deriving (Eq, Ord, Read, Show)

_ComparisonExpression = Core.Name "hydra.cypher.openCypher.ComparisonExpression"

_ComparisonExpression_left = Core.Name "left"

_ComparisonExpression_right = Core.Name "right"

data ComparisonOperator =
  ComparisonOperatorEq  |
  ComparisonOperatorNeq  |
  ComparisonOperatorLt  |
  ComparisonOperatorGt  |
  ComparisonOperatorLte  |
  ComparisonOperatorGte
  deriving (Eq, Ord, Read, Show)

_ComparisonOperator = Core.Name "hydra.cypher.openCypher.ComparisonOperator"

_ComparisonOperator_eq = Core.Name "eq"

_ComparisonOperator_neq = Core.Name "neq"

_ComparisonOperator_lt = Core.Name "lt"

_ComparisonOperator_gt = Core.Name "gt"

_ComparisonOperator_lte = Core.Name "lte"

_ComparisonOperator_gte = Core.Name "gte"

data PartialComparisonExpression =
  PartialComparisonExpression {
    partialComparisonExpressionOperator :: ComparisonOperator,
    partialComparisonExpressionRight :: StringListNullPredicateExpression}
  deriving (Eq, Ord, Read, Show)

_PartialComparisonExpression = Core.Name "hydra.cypher.openCypher.PartialComparisonExpression"

_PartialComparisonExpression_operator = Core.Name "operator"

_PartialComparisonExpression_right = Core.Name "right"

data StringListNullPredicateExpression =
  StringListNullPredicateExpression {
    stringListNullPredicateExpressionLeft :: AddOrSubtractExpression,
    stringListNullPredicateExpressionRight :: [StringListNullPredicateRightHandSide]}
  deriving (Eq, Ord, Read, Show)

_StringListNullPredicateExpression = Core.Name "hydra.cypher.openCypher.StringListNullPredicateExpression"

_StringListNullPredicateExpression_left = Core.Name "left"

_StringListNullPredicateExpression_right = Core.Name "right"

data StringListNullPredicateRightHandSide =
  StringListNullPredicateRightHandSideString StringPredicateExpression |
  StringListNullPredicateRightHandSideList ListPredicateExpression |
  StringListNullPredicateRightHandSideNull NullPredicateExpression
  deriving (Eq, Ord, Read, Show)

_StringListNullPredicateRightHandSide = Core.Name "hydra.cypher.openCypher.StringListNullPredicateRightHandSide"

_StringListNullPredicateRightHandSide_string = Core.Name "string"

_StringListNullPredicateRightHandSide_list = Core.Name "list"

_StringListNullPredicateRightHandSide_null = Core.Name "null"

data StringPredicateExpression =
  StringPredicateExpression {
    stringPredicateExpressionOperator :: StringPredicateOperator,
    stringPredicateExpressionExpression :: AddOrSubtractExpression}
  deriving (Eq, Ord, Read, Show)

_StringPredicateExpression = Core.Name "hydra.cypher.openCypher.StringPredicateExpression"

_StringPredicateExpression_operator = Core.Name "operator"

_StringPredicateExpression_expression = Core.Name "expression"

data StringPredicateOperator =
  StringPredicateOperatorStartsWith  |
  StringPredicateOperatorEndsWith  |
  StringPredicateOperatorContains
  deriving (Eq, Ord, Read, Show)

_StringPredicateOperator = Core.Name "hydra.cypher.openCypher.StringPredicateOperator"

_StringPredicateOperator_startsWith = Core.Name "startsWith"

_StringPredicateOperator_endsWith = Core.Name "endsWith"

_StringPredicateOperator_contains = Core.Name "contains"

newtype ListPredicateExpression =
  ListPredicateExpression {
    unListPredicateExpression :: AddOrSubtractExpression}
  deriving (Eq, Ord, Read, Show)

_ListPredicateExpression = Core.Name "hydra.cypher.openCypher.ListPredicateExpression"

newtype NullPredicateExpression =
  NullPredicateExpression {
    unNullPredicateExpression :: Bool}
  deriving (Eq, Ord, Read, Show)

_NullPredicateExpression = Core.Name "hydra.cypher.openCypher.NullPredicateExpression"

data AddOrSubtractExpression =
  AddOrSubtractExpression {
    addOrSubtractExpressionLeft :: MultiplyDivideModuloExpression,
    addOrSubtractExpressionRight :: [AddOrSubtractRightHandSide]}
  deriving (Eq, Ord, Read, Show)

_AddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.AddOrSubtractExpression"

_AddOrSubtractExpression_left = Core.Name "left"

_AddOrSubtractExpression_right = Core.Name "right"

data AddOrSubtractRightHandSide =
  AddOrSubtractRightHandSide {
    addOrSubtractRightHandSideOperator :: AddOrSubtractOperator,
    addOrSubtractRightHandSideExpression :: MultiplyDivideModuloExpression}
  deriving (Eq, Ord, Read, Show)

_AddOrSubtractRightHandSide = Core.Name "hydra.cypher.openCypher.AddOrSubtractRightHandSide"

_AddOrSubtractRightHandSide_operator = Core.Name "operator"

_AddOrSubtractRightHandSide_expression = Core.Name "expression"

data AddOrSubtractOperator =
  AddOrSubtractOperatorAdd  |
  AddOrSubtractOperatorSubtract
  deriving (Eq, Ord, Read, Show)

_AddOrSubtractOperator = Core.Name "hydra.cypher.openCypher.AddOrSubtractOperator"

_AddOrSubtractOperator_add = Core.Name "add"

_AddOrSubtractOperator_subtract = Core.Name "subtract"

data MultiplyDivideModuloExpression =
  MultiplyDivideModuloExpression {
    multiplyDivideModuloExpressionLeft :: PowerOfExpression,
    multiplyDivideModuloExpressionRight :: [MultiplyDivideModuloRightHandSide]}
  deriving (Eq, Ord, Read, Show)

_MultiplyDivideModuloExpression = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloExpression"

_MultiplyDivideModuloExpression_left = Core.Name "left"

_MultiplyDivideModuloExpression_right = Core.Name "right"

data MultiplyDivideModuloRightHandSide =
  MultiplyDivideModuloRightHandSide {
    multiplyDivideModuloRightHandSideOperator :: MultiplyDivideModuloOperator,
    multiplyDivideModuloRightHandSideExpression :: PowerOfExpression}
  deriving (Eq, Ord, Read, Show)

_MultiplyDivideModuloRightHandSide = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloRightHandSide"

_MultiplyDivideModuloRightHandSide_operator = Core.Name "operator"

_MultiplyDivideModuloRightHandSide_expression = Core.Name "expression"

data MultiplyDivideModuloOperator =
  MultiplyDivideModuloOperatorMultiply  |
  MultiplyDivideModuloOperatorDivide  |
  MultiplyDivideModuloOperatorModulo
  deriving (Eq, Ord, Read, Show)

_MultiplyDivideModuloOperator = Core.Name "hydra.cypher.openCypher.MultiplyDivideModuloOperator"

_MultiplyDivideModuloOperator_multiply = Core.Name "multiply"

_MultiplyDivideModuloOperator_divide = Core.Name "divide"

_MultiplyDivideModuloOperator_modulo = Core.Name "modulo"

newtype PowerOfExpression =
  PowerOfExpression {
    unPowerOfExpression :: [UnaryAddOrSubtractExpression]}
  deriving (Eq, Ord, Read, Show)

_PowerOfExpression = Core.Name "hydra.cypher.openCypher.PowerOfExpression"

data UnaryAddOrSubtractExpression =
  UnaryAddOrSubtractExpression {
    unaryAddOrSubtractExpressionOperator :: (Maybe AddOrSubtractOperator),
    unaryAddOrSubtractExpressionExpression :: NonArithmeticOperatorExpression}
  deriving (Eq, Ord, Read, Show)

_UnaryAddOrSubtractExpression = Core.Name "hydra.cypher.openCypher.UnaryAddOrSubtractExpression"

_UnaryAddOrSubtractExpression_operator = Core.Name "operator"

_UnaryAddOrSubtractExpression_expression = Core.Name "expression"

data ListOperatorExpressionOrPropertyLookup =
  ListOperatorExpressionOrPropertyLookupList ListOperatorExpression |
  ListOperatorExpressionOrPropertyLookupProperty PropertyLookup
  deriving (Eq, Ord, Read, Show)

_ListOperatorExpressionOrPropertyLookup = Core.Name "hydra.cypher.openCypher.ListOperatorExpressionOrPropertyLookup"

_ListOperatorExpressionOrPropertyLookup_list = Core.Name "list"

_ListOperatorExpressionOrPropertyLookup_property = Core.Name "property"

data NonArithmeticOperatorExpression =
  NonArithmeticOperatorExpression {
    nonArithmeticOperatorExpressionAtom :: Atom,
    nonArithmeticOperatorExpressionListsAndLookups :: [ListOperatorExpressionOrPropertyLookup],
    nonArithmeticOperatorExpressionLabels :: (Maybe NodeLabels)}
  deriving (Eq, Ord, Read, Show)

_NonArithmeticOperatorExpression = Core.Name "hydra.cypher.openCypher.NonArithmeticOperatorExpression"

_NonArithmeticOperatorExpression_atom = Core.Name "atom"

_NonArithmeticOperatorExpression_listsAndLookups = Core.Name "listsAndLookups"

_NonArithmeticOperatorExpression_labels = Core.Name "labels"

data RangeExpression =
  RangeExpression {
    rangeExpressionStart :: (Maybe Expression),
    rangeExpressionEnd :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_RangeExpression = Core.Name "hydra.cypher.openCypher.RangeExpression"

_RangeExpression_start = Core.Name "start"

_RangeExpression_end = Core.Name "end"

data ListOperatorExpression =
  ListOperatorExpressionSingle Expression |
  ListOperatorExpressionRange RangeExpression
  deriving (Eq, Ord, Read, Show)

_ListOperatorExpression = Core.Name "hydra.cypher.openCypher.ListOperatorExpression"

_ListOperatorExpression_single = Core.Name "single"

_ListOperatorExpression_range = Core.Name "range"

newtype PropertyLookup =
  PropertyLookup {
    unPropertyLookup :: PropertyKeyName}
  deriving (Eq, Ord, Read, Show)

_PropertyLookup = Core.Name "hydra.cypher.openCypher.PropertyLookup"

data Atom =
  AtomLiteral Literal |
  AtomParameter Parameter |
  AtomCase CaseExpression |
  AtomCountStar  |
  AtomListComprehension ListComprehension |
  AtomPatternComprehension PatternComprehension |
  AtomQuantifier Quantifier |
  AtomPatternPredicate PatternPredicate |
  AtomParenthesized ParenthesizedExpression |
  AtomFunctionInvocation FunctionInvocation |
  AtomExistentialSubquery ExistentialSubquery |
  AtomVariable Variable
  deriving (Eq, Ord, Read, Show)

_Atom = Core.Name "hydra.cypher.openCypher.Atom"

_Atom_literal = Core.Name "literal"

_Atom_parameter = Core.Name "parameter"

_Atom_case = Core.Name "case"

_Atom_countStar = Core.Name "countStar"

_Atom_listComprehension = Core.Name "listComprehension"

_Atom_patternComprehension = Core.Name "patternComprehension"

_Atom_quantifier = Core.Name "quantifier"

_Atom_patternPredicate = Core.Name "patternPredicate"

_Atom_parenthesized = Core.Name "parenthesized"

_Atom_functionInvocation = Core.Name "functionInvocation"

_Atom_existentialSubquery = Core.Name "existentialSubquery"

_Atom_variable = Core.Name "variable"

data CaseExpression =
  CaseExpression {
    caseExpressionExpression :: (Maybe Expression),
    caseExpressionAlternatives :: [CaseAlternative],
    caseExpressionElse :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_CaseExpression = Core.Name "hydra.cypher.openCypher.CaseExpression"

_CaseExpression_expression = Core.Name "expression"

_CaseExpression_alternatives = Core.Name "alternatives"

_CaseExpression_else = Core.Name "else"

data CaseAlternative =
  CaseAlternative {
    caseAlternativeCondition :: Expression,
    caseAlternativeResult :: Expression}
  deriving (Eq, Ord, Read, Show)

_CaseAlternative = Core.Name "hydra.cypher.openCypher.CaseAlternative"

_CaseAlternative_condition = Core.Name "condition"

_CaseAlternative_result = Core.Name "result"

data ListComprehension =
  ListComprehension {
    listComprehensionLeft :: FilterExpression,
    listComprehensionRight :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_ListComprehension = Core.Name "hydra.cypher.openCypher.ListComprehension"

_ListComprehension_left = Core.Name "left"

_ListComprehension_right = Core.Name "right"

data PatternComprehension =
  PatternComprehension {
    patternComprehensionVariable :: (Maybe Variable),
    patternComprehensionPattern :: RelationshipsPattern,
    patternComprehensionWhere :: (Maybe Where),
    patternComprehensionRight :: Expression}
  deriving (Eq, Ord, Read, Show)

_PatternComprehension = Core.Name "hydra.cypher.openCypher.PatternComprehension"

_PatternComprehension_variable = Core.Name "variable"

_PatternComprehension_pattern = Core.Name "pattern"

_PatternComprehension_where = Core.Name "where"

_PatternComprehension_right = Core.Name "right"

data Quantifier =
  Quantifier {
    quantifierOperator :: QuantifierOperator,
    quantifierExpression :: FilterExpression}
  deriving (Eq, Ord, Read, Show)

_Quantifier = Core.Name "hydra.cypher.openCypher.Quantifier"

_Quantifier_operator = Core.Name "operator"

_Quantifier_expression = Core.Name "expression"

data QuantifierOperator =
  QuantifierOperatorAll  |
  QuantifierOperatorAny  |
  QuantifierOperatorNone  |
  QuantifierOperatorSingle
  deriving (Eq, Ord, Read, Show)

_QuantifierOperator = Core.Name "hydra.cypher.openCypher.QuantifierOperator"

_QuantifierOperator_all = Core.Name "all"

_QuantifierOperator_any = Core.Name "any"

_QuantifierOperator_none = Core.Name "none"

_QuantifierOperator_single = Core.Name "single"

data FilterExpression =
  FilterExpression {
    filterExpressionIdInColl :: IdInColl,
    filterExpressionWhere :: (Maybe Where)}
  deriving (Eq, Ord, Read, Show)

_FilterExpression = Core.Name "hydra.cypher.openCypher.FilterExpression"

_FilterExpression_idInColl = Core.Name "idInColl"

_FilterExpression_where = Core.Name "where"

newtype PatternPredicate =
  PatternPredicate {
    unPatternPredicate :: RelationshipsPattern}
  deriving (Eq, Ord, Read, Show)

_PatternPredicate = Core.Name "hydra.cypher.openCypher.PatternPredicate"

newtype ParenthesizedExpression =
  ParenthesizedExpression {
    unParenthesizedExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_ParenthesizedExpression = Core.Name "hydra.cypher.openCypher.ParenthesizedExpression"

data IdInColl =
  IdInColl {
    idInCollVariable :: Variable,
    idInCollExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_IdInColl = Core.Name "hydra.cypher.openCypher.IdInColl"

_IdInColl_variable = Core.Name "variable"

_IdInColl_expression = Core.Name "expression"

data FunctionInvocation =
  FunctionInvocation {
    functionInvocationName :: QualifiedName,
    functionInvocationDistinct :: Bool,
    functionInvocationArguments :: [Expression]}
  deriving (Eq, Ord, Read, Show)

_FunctionInvocation = Core.Name "hydra.cypher.openCypher.FunctionInvocation"

_FunctionInvocation_name = Core.Name "name"

_FunctionInvocation_distinct = Core.Name "distinct"

_FunctionInvocation_arguments = Core.Name "arguments"

data QualifiedName =
  QualifiedName {
    qualifiedNameNamespace :: String,
    qualifiedNameLocal :: String}
  deriving (Eq, Ord, Read, Show)

_QualifiedName = Core.Name "hydra.cypher.openCypher.QualifiedName"

_QualifiedName_namespace = Core.Name "namespace"

_QualifiedName_local = Core.Name "local"

data PatternWhere =
  PatternWhere {
    patternWherePattern :: Pattern,
    patternWhereWhere :: (Maybe Where)}
  deriving (Eq, Ord, Read, Show)

_PatternWhere = Core.Name "hydra.cypher.openCypher.PatternWhere"

_PatternWhere_pattern = Core.Name "pattern"

_PatternWhere_where = Core.Name "where"

data ExistentialSubquery =
  ExistentialSubqueryRegular RegularQuery |
  ExistentialSubqueryPattern PatternWhere
  deriving (Eq, Ord, Read, Show)

_ExistentialSubquery = Core.Name "hydra.cypher.openCypher.ExistentialSubquery"

_ExistentialSubquery_regular = Core.Name "regular"

_ExistentialSubquery_pattern = Core.Name "pattern"

data ExplicitProcedureInvocation =
  ExplicitProcedureInvocation {
    explicitProcedureInvocationName :: QualifiedName,
    explicitProcedureInvocationArguments :: [Expression]}
  deriving (Eq, Ord, Read, Show)

_ExplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ExplicitProcedureInvocation"

_ExplicitProcedureInvocation_name = Core.Name "name"

_ExplicitProcedureInvocation_arguments = Core.Name "arguments"

newtype ImplicitProcedureInvocation =
  ImplicitProcedureInvocation {
    unImplicitProcedureInvocation :: QualifiedName}
  deriving (Eq, Ord, Read, Show)

_ImplicitProcedureInvocation = Core.Name "hydra.cypher.openCypher.ImplicitProcedureInvocation"

newtype ProcedureResultField =
  ProcedureResultField {
    unProcedureResultField :: String}
  deriving (Eq, Ord, Read, Show)

_ProcedureResultField = Core.Name "hydra.cypher.openCypher.ProcedureResultField"

newtype Variable =
  Variable {
    unVariable :: String}
  deriving (Eq, Ord, Read, Show)

_Variable = Core.Name "hydra.cypher.openCypher.Variable"

data Literal =
  LiteralBoolean Bool |
  LiteralNull  |
  LiteralNumber NumberLiteral |
  LiteralString StringLiteral |
  LiteralList ListLiteral |
  LiteralMap MapLiteral
  deriving (Eq, Ord, Read, Show)

_Literal = Core.Name "hydra.cypher.openCypher.Literal"

_Literal_boolean = Core.Name "boolean"

_Literal_null = Core.Name "null"

_Literal_number = Core.Name "number"

_Literal_string = Core.Name "string"

_Literal_list = Core.Name "list"

_Literal_map = Core.Name "map"

data NumberLiteral =
  NumberLiteralDouble Double |
  NumberLiteralInteger Integer
  deriving (Eq, Ord, Read, Show)

_NumberLiteral = Core.Name "hydra.cypher.openCypher.NumberLiteral"

_NumberLiteral_double = Core.Name "double"

_NumberLiteral_integer = Core.Name "integer"

newtype StringLiteral =
  StringLiteral {
    unStringLiteral :: String}
  deriving (Eq, Ord, Read, Show)

_StringLiteral = Core.Name "hydra.cypher.openCypher.StringLiteral"

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

_ListLiteral = Core.Name "hydra.cypher.openCypher.ListLiteral"

newtype MapLiteral =
  MapLiteral {
    unMapLiteral :: [KeyValuePair]}
  deriving (Eq, Ord, Read, Show)

_MapLiteral = Core.Name "hydra.cypher.openCypher.MapLiteral"

data KeyValuePair =
  KeyValuePair {
    keyValuePairKey :: PropertyKeyName,
    keyValuePairValue :: Expression}
  deriving (Eq, Ord, Read, Show)

_KeyValuePair = Core.Name "hydra.cypher.openCypher.KeyValuePair"

_KeyValuePair_key = Core.Name "key"

_KeyValuePair_value = Core.Name "value"

newtype PropertyKeyName =
  PropertyKeyName {
    unPropertyKeyName :: String}
  deriving (Eq, Ord, Read, Show)

_PropertyKeyName = Core.Name "hydra.cypher.openCypher.PropertyKeyName"

data Parameter =
  ParameterSymbolic String |
  ParameterInteger Integer
  deriving (Eq, Ord, Read, Show)

_Parameter = Core.Name "hydra.cypher.openCypher.Parameter"

_Parameter_symbolic = Core.Name "symbolic"

_Parameter_integer = Core.Name "integer"