hydra-0.14.0: src/gen-main/haskell/Hydra/Ext/Haskell/Syntax.hs
-- Note: this is an automatically generated file. Do not edit.
-- | A Haskell syntax model, loosely based on Language.Haskell.Tools.AST
module Hydra.Ext.Haskell.Syntax where
import qualified Hydra.Core as Core
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.ByteString as B
import qualified Data.Int as I
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
-- | A pattern-matching alternative
data Alternative =
Alternative {
-- | The pattern to match
alternativePattern :: Pattern,
-- | The right-hand side of the alternative
alternativeRhs :: CaseRhs,
-- | Optional local bindings
alternativeBinds :: (Maybe LocalBindings)}
deriving (Eq, Ord, Read, Show)
_Alternative = Core.Name "hydra.ext.haskell.syntax.Alternative"
_Alternative_pattern = Core.Name "pattern"
_Alternative_rhs = Core.Name "rhs"
_Alternative_binds = Core.Name "binds"
-- | A type assertion
data Assertion =
-- | A class assertion
AssertionClass ClassAssertion |
-- | A tuple of assertions
AssertionTuple [Assertion]
deriving (Eq, Ord, Read, Show)
_Assertion = Core.Name "hydra.ext.haskell.syntax.Assertion"
_Assertion_class = Core.Name "class"
_Assertion_tuple = Core.Name "tuple"
-- | A class assertion
data ClassAssertion =
ClassAssertion {
-- | The name of the class
classAssertionName :: Name,
-- | The types to which the class is applied
classAssertionTypes :: [Type]}
deriving (Eq, Ord, Read, Show)
_ClassAssertion = Core.Name "hydra.ext.haskell.syntax.ClassAssertion"
_ClassAssertion_name = Core.Name "name"
_ClassAssertion_types = Core.Name "types"
-- | The right-hand side of a pattern-matching alternative
newtype CaseRhs =
CaseRhs {
unCaseRhs :: Expression}
deriving (Eq, Ord, Read, Show)
_CaseRhs = Core.Name "hydra.ext.haskell.syntax.CaseRhs"
-- | A data constructor
data Constructor =
-- | An ordinary (positional) constructor
ConstructorOrdinary OrdinaryConstructor |
-- | A record constructor
ConstructorRecord RecordConstructor
deriving (Eq, Ord, Read, Show)
_Constructor = Core.Name "hydra.ext.haskell.syntax.Constructor"
_Constructor_ordinary = Core.Name "ordinary"
_Constructor_record = Core.Name "record"
-- | An ordinary (positional) data constructor
data OrdinaryConstructor =
OrdinaryConstructor {
-- | The name of the constructor
ordinaryConstructorName :: Name,
-- | The types of the positional fields
ordinaryConstructorFields :: [Type]}
deriving (Eq, Ord, Read, Show)
_OrdinaryConstructor = Core.Name "hydra.ext.haskell.syntax.OrdinaryConstructor"
_OrdinaryConstructor_name = Core.Name "name"
_OrdinaryConstructor_fields = Core.Name "fields"
-- | A record-style data constructor
data RecordConstructor =
RecordConstructor {
-- | The name of the constructor
recordConstructorName :: Name,
-- | The named fields of the record
recordConstructorFields :: [FieldWithComments]}
deriving (Eq, Ord, Read, Show)
_RecordConstructor = Core.Name "hydra.ext.haskell.syntax.RecordConstructor"
_RecordConstructor_name = Core.Name "name"
_RecordConstructor_fields = Core.Name "fields"
-- | A data constructor together with any comments
data ConstructorWithComments =
ConstructorWithComments {
-- | The constructor
constructorWithCommentsBody :: Constructor,
-- | Optional comments
constructorWithCommentsComments :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_ConstructorWithComments = Core.Name "hydra.ext.haskell.syntax.ConstructorWithComments"
_ConstructorWithComments_body = Core.Name "body"
_ConstructorWithComments_comments = Core.Name "comments"
-- | A data type declaration
data DataDeclaration =
DataDeclaration {
-- | The 'data' or 'newtype' keyword
dataDeclarationKeyword :: DataOrNewtype,
-- | Type class constraints
dataDeclarationContext :: [Assertion],
-- | The declaration head
dataDeclarationHead :: DeclarationHead,
-- | The data constructors
dataDeclarationConstructors :: [ConstructorWithComments],
-- | Derived type class instances
dataDeclarationDeriving :: [Deriving]}
deriving (Eq, Ord, Read, Show)
_DataDeclaration = Core.Name "hydra.ext.haskell.syntax.DataDeclaration"
_DataDeclaration_keyword = Core.Name "keyword"
_DataDeclaration_context = Core.Name "context"
_DataDeclaration_head = Core.Name "head"
_DataDeclaration_constructors = Core.Name "constructors"
_DataDeclaration_deriving = Core.Name "deriving"
-- | The 'data' versus 'newtype keyword
data DataOrNewtype =
DataOrNewtypeData |
DataOrNewtypeNewtype
deriving (Eq, Ord, Read, Show)
_DataOrNewtype = Core.Name "hydra.ext.haskell.syntax.DataOrNewtype"
_DataOrNewtype_data = Core.Name "data"
_DataOrNewtype_newtype = Core.Name "newtype"
-- | A data declaration together with any comments
data DeclarationWithComments =
DeclarationWithComments {
-- | The declaration
declarationWithCommentsBody :: Declaration,
-- | Optional comments
declarationWithCommentsComments :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_DeclarationWithComments = Core.Name "hydra.ext.haskell.syntax.DeclarationWithComments"
_DeclarationWithComments_body = Core.Name "body"
_DeclarationWithComments_comments = Core.Name "comments"
-- | A data or value declaration
data Declaration =
-- | A data type declaration
DeclarationData DataDeclaration |
-- | A type synonym declaration
DeclarationType TypeDeclaration |
-- | A value binding
DeclarationValueBinding ValueBinding |
-- | A typed binding
DeclarationTypedBinding TypedBinding
deriving (Eq, Ord, Read, Show)
_Declaration = Core.Name "hydra.ext.haskell.syntax.Declaration"
_Declaration_data = Core.Name "data"
_Declaration_type = Core.Name "type"
_Declaration_valueBinding = Core.Name "valueBinding"
_Declaration_typedBinding = Core.Name "typedBinding"
-- | The left-hand side of a declaration
data DeclarationHead =
-- | An application-style declaration head
DeclarationHeadApplication ApplicationDeclarationHead |
-- | A parenthesized declaration head
DeclarationHeadParens DeclarationHead |
-- | A simple name
DeclarationHeadSimple Name
deriving (Eq, Ord, Read, Show)
_DeclarationHead = Core.Name "hydra.ext.haskell.syntax.DeclarationHead"
_DeclarationHead_application = Core.Name "application"
_DeclarationHead_parens = Core.Name "parens"
_DeclarationHead_simple = Core.Name "simple"
-- | An application-style declaration head
data ApplicationDeclarationHead =
ApplicationDeclarationHead {
-- | The function being applied
applicationDeclarationHeadFunction :: DeclarationHead,
-- | The type variable operand
applicationDeclarationHeadOperand :: Variable}
deriving (Eq, Ord, Read, Show)
_ApplicationDeclarationHead = Core.Name "hydra.ext.haskell.syntax.ApplicationDeclarationHead"
_ApplicationDeclarationHead_function = Core.Name "function"
_ApplicationDeclarationHead_operand = Core.Name "operand"
-- | A 'deriving' statement
newtype Deriving =
Deriving {
unDeriving :: [Name]}
deriving (Eq, Ord, Read, Show)
_Deriving = Core.Name "hydra.ext.haskell.syntax.Deriving"
-- | An export statement
data Export =
-- | An exported declaration
ExportDeclaration ImportExportSpec |
-- | An exported module
ExportModule ModuleName
deriving (Eq, Ord, Read, Show)
_Export = Core.Name "hydra.ext.haskell.syntax.Export"
_Export_declaration = Core.Name "declaration"
_Export_module = Core.Name "module"
-- | A data expression
data Expression =
-- | A function application
ExpressionApplication ApplicationExpression |
-- | A case expression
ExpressionCase CaseExpression |
-- | A record constructor expression
ExpressionConstructRecord ConstructRecordExpression |
-- | A 'do' expression
ExpressionDo [Statement] |
-- | An 'if' expression
ExpressionIf IfExpression |
-- | An infix application
ExpressionInfixApplication InfixApplicationExpression |
-- | A literal value
ExpressionLiteral Literal |
-- | A lambda expression
ExpressionLambda LambdaExpression |
-- | A left section expression
ExpressionLeftSection SectionExpression |
-- | A 'let' expression
ExpressionLet LetExpression |
-- | A list expression
ExpressionList [Expression] |
-- | A parenthesized expression
ExpressionParens Expression |
-- | A prefix application
ExpressionPrefixApplication PrefixApplicationExpression |
-- | A right section expression
ExpressionRightSection SectionExpression |
-- | A tuple expression
ExpressionTuple [Expression] |
-- | A type signature expression
ExpressionTypeSignature TypeSignatureExpression |
-- | A record update expression
ExpressionUpdateRecord UpdateRecordExpression |
-- | A variable reference
ExpressionVariable Name
deriving (Eq, Ord, Read, Show)
_Expression = Core.Name "hydra.ext.haskell.syntax.Expression"
_Expression_application = Core.Name "application"
_Expression_case = Core.Name "case"
_Expression_constructRecord = Core.Name "constructRecord"
_Expression_do = Core.Name "do"
_Expression_if = Core.Name "if"
_Expression_infixApplication = Core.Name "infixApplication"
_Expression_literal = Core.Name "literal"
_Expression_lambda = Core.Name "lambda"
_Expression_leftSection = Core.Name "leftSection"
_Expression_let = Core.Name "let"
_Expression_list = Core.Name "list"
_Expression_parens = Core.Name "parens"
_Expression_prefixApplication = Core.Name "prefixApplication"
_Expression_rightSection = Core.Name "rightSection"
_Expression_tuple = Core.Name "tuple"
_Expression_typeSignature = Core.Name "typeSignature"
_Expression_updateRecord = Core.Name "updateRecord"
_Expression_variable = Core.Name "variable"
-- | An application expression
data ApplicationExpression =
ApplicationExpression {
-- | The function being applied
applicationExpressionFunction :: Expression,
-- | The argument
applicationExpressionArgument :: Expression}
deriving (Eq, Ord, Read, Show)
_ApplicationExpression = Core.Name "hydra.ext.haskell.syntax.ApplicationExpression"
_ApplicationExpression_function = Core.Name "function"
_ApplicationExpression_argument = Core.Name "argument"
-- | A case expression
data CaseExpression =
CaseExpression {
-- | The expression being matched
caseExpressionCase :: Expression,
-- | The pattern-matching alternatives
caseExpressionAlternatives :: [Alternative]}
deriving (Eq, Ord, Read, Show)
_CaseExpression = Core.Name "hydra.ext.haskell.syntax.CaseExpression"
_CaseExpression_case = Core.Name "case"
_CaseExpression_alternatives = Core.Name "alternatives"
-- | A record constructor expression
data ConstructRecordExpression =
ConstructRecordExpression {
-- | The constructor name
constructRecordExpressionName :: Name,
-- | The field assignments
constructRecordExpressionFields :: [FieldUpdate]}
deriving (Eq, Ord, Read, Show)
_ConstructRecordExpression = Core.Name "hydra.ext.haskell.syntax.ConstructRecordExpression"
_ConstructRecordExpression_name = Core.Name "name"
_ConstructRecordExpression_fields = Core.Name "fields"
-- | An 'if' expression
data IfExpression =
IfExpression {
-- | The condition expression
ifExpressionCondition :: Expression,
-- | The 'then' branch
ifExpressionThen :: Expression,
-- | The 'else' branch
ifExpressionElse :: Expression}
deriving (Eq, Ord, Read, Show)
_IfExpression = Core.Name "hydra.ext.haskell.syntax.IfExpression"
_IfExpression_condition = Core.Name "condition"
_IfExpression_then = Core.Name "then"
_IfExpression_else = Core.Name "else"
-- | An infix application expression
data InfixApplicationExpression =
InfixApplicationExpression {
-- | The left-hand operand
infixApplicationExpressionLhs :: Expression,
-- | The infix operator
infixApplicationExpressionOperator :: Operator,
-- | The right-hand operand
infixApplicationExpressionRhs :: Expression}
deriving (Eq, Ord, Read, Show)
_InfixApplicationExpression = Core.Name "hydra.ext.haskell.syntax.InfixApplicationExpression"
_InfixApplicationExpression_lhs = Core.Name "lhs"
_InfixApplicationExpression_operator = Core.Name "operator"
_InfixApplicationExpression_rhs = Core.Name "rhs"
-- | A lambda expression
data LambdaExpression =
LambdaExpression {
-- | The patterns binding parameters
lambdaExpressionBindings :: [Pattern],
-- | The body of the lambda
lambdaExpressionInner :: Expression}
deriving (Eq, Ord, Read, Show)
_LambdaExpression = Core.Name "hydra.ext.haskell.syntax.LambdaExpression"
_LambdaExpression_bindings = Core.Name "bindings"
_LambdaExpression_inner = Core.Name "inner"
-- | A 'let' expression
data LetExpression =
LetExpression {
-- | The local bindings
letExpressionBindings :: [LocalBinding],
-- | The body of the let expression
letExpressionInner :: Expression}
deriving (Eq, Ord, Read, Show)
_LetExpression = Core.Name "hydra.ext.haskell.syntax.LetExpression"
_LetExpression_bindings = Core.Name "bindings"
_LetExpression_inner = Core.Name "inner"
-- | A prefix expression
data PrefixApplicationExpression =
PrefixApplicationExpression {
-- | The prefix operator
prefixApplicationExpressionOperator :: Operator,
-- | The operand
prefixApplicationExpressionRhs :: Expression}
deriving (Eq, Ord, Read, Show)
_PrefixApplicationExpression = Core.Name "hydra.ext.haskell.syntax.PrefixApplicationExpression"
_PrefixApplicationExpression_operator = Core.Name "operator"
_PrefixApplicationExpression_rhs = Core.Name "rhs"
-- | A section expression
data SectionExpression =
SectionExpression {
-- | The operator
sectionExpressionOperator :: Operator,
-- | The operand
sectionExpressionExpression :: Expression}
deriving (Eq, Ord, Read, Show)
_SectionExpression = Core.Name "hydra.ext.haskell.syntax.SectionExpression"
_SectionExpression_operator = Core.Name "operator"
_SectionExpression_expression = Core.Name "expression"
-- | A type signature expression
data TypeSignatureExpression =
TypeSignatureExpression {
-- | The expression being typed
typeSignatureExpressionInner :: Expression,
-- | The type signature
typeSignatureExpressionType :: Type}
deriving (Eq, Ord, Read, Show)
_TypeSignatureExpression = Core.Name "hydra.ext.haskell.syntax.TypeSignatureExpression"
_TypeSignatureExpression_inner = Core.Name "inner"
_TypeSignatureExpression_type = Core.Name "type"
-- | An update record expression
data UpdateRecordExpression =
UpdateRecordExpression {
-- | The record being updated
updateRecordExpressionInner :: Expression,
-- | The field updates
updateRecordExpressionFields :: [FieldUpdate]}
deriving (Eq, Ord, Read, Show)
_UpdateRecordExpression = Core.Name "hydra.ext.haskell.syntax.UpdateRecordExpression"
_UpdateRecordExpression_inner = Core.Name "inner"
_UpdateRecordExpression_fields = Core.Name "fields"
-- | A field (name/type pair)
data Field =
Field {
-- | The field name
fieldName :: Name,
-- | The field type
fieldType :: Type}
deriving (Eq, Ord, Read, Show)
_Field = Core.Name "hydra.ext.haskell.syntax.Field"
_Field_name = Core.Name "name"
_Field_type = Core.Name "type"
-- | A field together with any comments
data FieldWithComments =
FieldWithComments {
-- | The field
fieldWithCommentsField :: Field,
-- | Optional comments
fieldWithCommentsComments :: (Maybe String)}
deriving (Eq, Ord, Read, Show)
_FieldWithComments = Core.Name "hydra.ext.haskell.syntax.FieldWithComments"
_FieldWithComments_field = Core.Name "field"
_FieldWithComments_comments = Core.Name "comments"
-- | A field name and value
data FieldUpdate =
FieldUpdate {
-- | The field name
fieldUpdateName :: Name,
-- | The field value
fieldUpdateValue :: Expression}
deriving (Eq, Ord, Read, Show)
_FieldUpdate = Core.Name "hydra.ext.haskell.syntax.FieldUpdate"
_FieldUpdate_name = Core.Name "name"
_FieldUpdate_value = Core.Name "value"
-- | An import statement
data Import =
Import {
-- | Whether the import is qualified
importQualified :: Bool,
-- | The module being imported
importModule :: ModuleName,
-- | Optional alias for the module
importAs :: (Maybe ModuleName),
-- | Optional import specification
importSpec :: (Maybe SpecImport)}
deriving (Eq, Ord, Read, Show)
_Import = Core.Name "hydra.ext.haskell.syntax.Import"
_Import_qualified = Core.Name "qualified"
_Import_module = Core.Name "module"
_Import_as = Core.Name "as"
_Import_spec = Core.Name "spec"
-- | An import specification
data SpecImport =
-- | A list of imports to include
SpecImportList [ImportExportSpec] |
-- | A list of imports to exclude
SpecImportHiding [ImportExportSpec]
deriving (Eq, Ord, Read, Show)
_SpecImport = Core.Name "hydra.ext.haskell.syntax.SpecImport"
_SpecImport_list = Core.Name "list"
_SpecImport_hiding = Core.Name "hiding"
-- | An import modifier ('pattern' or 'type')
data ImportModifier =
ImportModifierPattern |
ImportModifierType
deriving (Eq, Ord, Read, Show)
_ImportModifier = Core.Name "hydra.ext.haskell.syntax.ImportModifier"
_ImportModifier_pattern = Core.Name "pattern"
_ImportModifier_type = Core.Name "type"
-- | An import or export specification
data ImportExportSpec =
ImportExportSpec {
-- | Optional import modifier
importExportSpecModifier :: (Maybe ImportModifier),
-- | The name being imported or exported
importExportSpecName :: Name,
-- | Optional subspecification
importExportSpecSubspec :: (Maybe SubspecImportExportSpec)}
deriving (Eq, Ord, Read, Show)
_ImportExportSpec = Core.Name "hydra.ext.haskell.syntax.ImportExportSpec"
_ImportExportSpec_modifier = Core.Name "modifier"
_ImportExportSpec_name = Core.Name "name"
_ImportExportSpec_subspec = Core.Name "subspec"
-- | A subspecification within an import/export
data SubspecImportExportSpec =
-- | Import/export all
SubspecImportExportSpecAll |
-- | Import/export specific names
SubspecImportExportSpecList [Name]
deriving (Eq, Ord, Read, Show)
_SubspecImportExportSpec = Core.Name "hydra.ext.haskell.syntax.SubspecImportExportSpec"
_SubspecImportExportSpec_all = Core.Name "all"
_SubspecImportExportSpec_list = Core.Name "list"
-- | A literal value
data Literal =
-- | A character literal
LiteralChar Int |
-- | A double-precision floating point literal
LiteralDouble Double |
-- | A single-precision floating point literal
LiteralFloat Float |
-- | A 32-bit integer literal
LiteralInt Int |
-- | An arbitrary-precision integer literal
LiteralInteger Integer |
-- | A string literal
LiteralString String
deriving (Eq, Ord, Read, Show)
_Literal = Core.Name "hydra.ext.haskell.syntax.Literal"
_Literal_char = Core.Name "char"
_Literal_double = Core.Name "double"
_Literal_float = Core.Name "float"
_Literal_int = Core.Name "int"
_Literal_integer = Core.Name "integer"
_Literal_string = Core.Name "string"
-- | A local binding
data LocalBinding =
-- | A type signature
LocalBindingSignature TypeSignature |
-- | A value binding
LocalBindingValue ValueBinding
deriving (Eq, Ord, Read, Show)
_LocalBinding = Core.Name "hydra.ext.haskell.syntax.LocalBinding"
_LocalBinding_signature = Core.Name "signature"
_LocalBinding_value = Core.Name "value"
-- | A collection of local bindings
newtype LocalBindings =
LocalBindings {
unLocalBindings :: [LocalBinding]}
deriving (Eq, Ord, Read, Show)
_LocalBindings = Core.Name "hydra.ext.haskell.syntax.LocalBindings"
-- | A Haskell module
data Module =
Module {
-- | Optional module head
moduleHead :: (Maybe ModuleHead),
-- | Import statements
moduleImports :: [Import],
-- | Module declarations
moduleDeclarations :: [DeclarationWithComments]}
deriving (Eq, Ord, Read, Show)
_Module = Core.Name "hydra.ext.haskell.syntax.Module"
_Module_head = Core.Name "head"
_Module_imports = Core.Name "imports"
_Module_declarations = Core.Name "declarations"
-- | A module head
data ModuleHead =
ModuleHead {
-- | Optional module-level comments
moduleHeadComments :: (Maybe String),
-- | The module name
moduleHeadName :: ModuleName,
-- | Export list
moduleHeadExports :: [Export]}
deriving (Eq, Ord, Read, Show)
_ModuleHead = Core.Name "hydra.ext.haskell.syntax.ModuleHead"
_ModuleHead_comments = Core.Name "comments"
_ModuleHead_name = Core.Name "name"
_ModuleHead_exports = Core.Name "exports"
-- | A module name
newtype ModuleName =
ModuleName {
unModuleName :: String}
deriving (Eq, Ord, Read, Show)
_ModuleName = Core.Name "hydra.ext.haskell.syntax.ModuleName"
-- | A name
data Name =
-- | An implicit name
NameImplicit QualifiedName |
-- | A normal name
NameNormal QualifiedName |
-- | A parenthesized name
NameParens QualifiedName
deriving (Eq, Ord, Read, Show)
_Name = Core.Name "hydra.ext.haskell.syntax.Name"
_Name_implicit = Core.Name "implicit"
_Name_normal = Core.Name "normal"
_Name_parens = Core.Name "parens"
-- | A component of a qualified name
newtype NamePart =
NamePart {
unNamePart :: String}
deriving (Eq, Ord, Read, Show)
_NamePart = Core.Name "hydra.ext.haskell.syntax.NamePart"
-- | An operator
data Operator =
-- | A function used as an infix operator
OperatorBacktick QualifiedName |
-- | A normal infix operator
OperatorNormal QualifiedName
deriving (Eq, Ord, Read, Show)
_Operator = Core.Name "hydra.ext.haskell.syntax.Operator"
_Operator_backtick = Core.Name "backtick"
_Operator_normal = Core.Name "normal"
-- | A pattern
data Pattern =
-- | An application pattern
PatternApplication ApplicationPattern |
-- | An 'as' pattern
PatternAs AsPattern |
-- | A list pattern
PatternList [Pattern] |
-- | A literal pattern
PatternLiteral Literal |
-- | A name pattern
PatternName Name |
-- | A parenthesized pattern
PatternParens Pattern |
-- | A record pattern
PatternRecord RecordPattern |
-- | A tuple pattern
PatternTuple [Pattern] |
-- | A typed pattern
PatternTyped TypedPattern |
-- | A wildcard pattern
PatternWildcard
deriving (Eq, Ord, Read, Show)
_Pattern = Core.Name "hydra.ext.haskell.syntax.Pattern"
_Pattern_application = Core.Name "application"
_Pattern_as = Core.Name "as"
_Pattern_list = Core.Name "list"
_Pattern_literal = Core.Name "literal"
_Pattern_name = Core.Name "name"
_Pattern_parens = Core.Name "parens"
_Pattern_record = Core.Name "record"
_Pattern_tuple = Core.Name "tuple"
_Pattern_typed = Core.Name "typed"
_Pattern_wildcard = Core.Name "wildcard"
-- | An application pattern
data ApplicationPattern =
ApplicationPattern {
-- | The constructor name
applicationPatternName :: Name,
-- | The pattern arguments
applicationPatternArgs :: [Pattern]}
deriving (Eq, Ord, Read, Show)
_ApplicationPattern = Core.Name "hydra.ext.haskell.syntax.ApplicationPattern"
_ApplicationPattern_name = Core.Name "name"
_ApplicationPattern_args = Core.Name "args"
-- | An 'as' pattern
data AsPattern =
AsPattern {
-- | The bound name
asPatternName :: Name,
-- | The inner pattern
asPatternInner :: Pattern}
deriving (Eq, Ord, Read, Show)
_AsPattern = Core.Name "hydra.ext.haskell.syntax.AsPattern"
_AsPattern_name = Core.Name "name"
_AsPattern_inner = Core.Name "inner"
-- | A record pattern
data RecordPattern =
RecordPattern {
-- | The constructor name
recordPatternName :: Name,
-- | The field patterns
recordPatternFields :: [PatternField]}
deriving (Eq, Ord, Read, Show)
_RecordPattern = Core.Name "hydra.ext.haskell.syntax.RecordPattern"
_RecordPattern_name = Core.Name "name"
_RecordPattern_fields = Core.Name "fields"
-- | A typed pattern
data TypedPattern =
TypedPattern {
-- | The inner pattern
typedPatternInner :: Pattern,
-- | The type annotation
typedPatternType :: Type}
deriving (Eq, Ord, Read, Show)
_TypedPattern = Core.Name "hydra.ext.haskell.syntax.TypedPattern"
_TypedPattern_inner = Core.Name "inner"
_TypedPattern_type = Core.Name "type"
-- | A pattern field
data PatternField =
PatternField {
-- | The field name
patternFieldName :: Name,
-- | The field pattern
patternFieldPattern :: Pattern}
deriving (Eq, Ord, Read, Show)
_PatternField = Core.Name "hydra.ext.haskell.syntax.PatternField"
_PatternField_name = Core.Name "name"
_PatternField_pattern = Core.Name "pattern"
-- | A qualified name
data QualifiedName =
QualifiedName {
-- | The qualifier parts
qualifiedNameQualifiers :: [NamePart],
-- | The unqualified name part
qualifiedNameUnqualified :: NamePart}
deriving (Eq, Ord, Read, Show)
_QualifiedName = Core.Name "hydra.ext.haskell.syntax.QualifiedName"
_QualifiedName_qualifiers = Core.Name "qualifiers"
_QualifiedName_unqualified = Core.Name "unqualified"
-- | A right-hand side of a binding
newtype RightHandSide =
RightHandSide {
unRightHandSide :: Expression}
deriving (Eq, Ord, Read, Show)
_RightHandSide = Core.Name "hydra.ext.haskell.syntax.RightHandSide"
-- | A do-notation statement
newtype Statement =
Statement {
unStatement :: Expression}
deriving (Eq, Ord, Read, Show)
_Statement = Core.Name "hydra.ext.haskell.syntax.Statement"
-- | A type expression
data Type =
-- | An application type
TypeApplication ApplicationType |
-- | A context type
TypeCtx ContextType |
-- | A function type
TypeFunction FunctionType |
-- | An infix type
TypeInfix InfixType |
-- | A list type
TypeList Type |
-- | A parenthesized type
TypeParens Type |
-- | A tuple type
TypeTuple [Type] |
-- | A type variable or type name
TypeVariable Name
deriving (Eq, Ord, Read, Show)
_Type = Core.Name "hydra.ext.haskell.syntax.Type"
_Type_application = Core.Name "application"
_Type_ctx = Core.Name "ctx"
_Type_function = Core.Name "function"
_Type_infix = Core.Name "infix"
_Type_list = Core.Name "list"
_Type_parens = Core.Name "parens"
_Type_tuple = Core.Name "tuple"
_Type_variable = Core.Name "variable"
-- | An application type
data ApplicationType =
ApplicationType {
-- | The type being applied
applicationTypeContext :: Type,
-- | The type argument
applicationTypeArgument :: Type}
deriving (Eq, Ord, Read, Show)
_ApplicationType = Core.Name "hydra.ext.haskell.syntax.ApplicationType"
_ApplicationType_context = Core.Name "context"
_ApplicationType_argument = Core.Name "argument"
-- | A type with a context (type class constraints)
data ContextType =
ContextType {
-- | The type class context
contextTypeCtx :: Assertion,
-- | The constrained type
contextTypeType :: Type}
deriving (Eq, Ord, Read, Show)
_ContextType = Core.Name "hydra.ext.haskell.syntax.ContextType"
_ContextType_ctx = Core.Name "ctx"
_ContextType_type = Core.Name "type"
-- | A function type
data FunctionType =
FunctionType {
-- | The domain type
functionTypeDomain :: Type,
-- | The codomain type
functionTypeCodomain :: Type}
deriving (Eq, Ord, Read, Show)
_FunctionType = Core.Name "hydra.ext.haskell.syntax.FunctionType"
_FunctionType_domain = Core.Name "domain"
_FunctionType_codomain = Core.Name "codomain"
-- | An infix type application
data InfixType =
InfixType {
-- | The left-hand type
infixTypeLhs :: Type,
-- | The type operator
infixTypeOperator :: Operator,
-- | The right-hand operator
infixTypeRhs :: Operator}
deriving (Eq, Ord, Read, Show)
_InfixType = Core.Name "hydra.ext.haskell.syntax.InfixType"
_InfixType_lhs = Core.Name "lhs"
_InfixType_operator = Core.Name "operator"
_InfixType_rhs = Core.Name "rhs"
-- | A type synonym declaration
data TypeDeclaration =
TypeDeclaration {
-- | The declaration head
typeDeclarationName :: DeclarationHead,
-- | The type being defined
typeDeclarationType :: Type}
deriving (Eq, Ord, Read, Show)
_TypeDeclaration = Core.Name "hydra.ext.haskell.syntax.TypeDeclaration"
_TypeDeclaration_name = Core.Name "name"
_TypeDeclaration_type = Core.Name "type"
-- | A type signature
data TypeSignature =
TypeSignature {
-- | The name being typed
typeSignatureName :: Name,
-- | The type
typeSignatureType :: Type}
deriving (Eq, Ord, Read, Show)
_TypeSignature = Core.Name "hydra.ext.haskell.syntax.TypeSignature"
_TypeSignature_name = Core.Name "name"
_TypeSignature_type = Core.Name "type"
-- | A binding with its type signature
data TypedBinding =
TypedBinding {
-- | The type signature
typedBindingTypeSignature :: TypeSignature,
-- | The value binding
typedBindingValueBinding :: ValueBinding}
deriving (Eq, Ord, Read, Show)
_TypedBinding = Core.Name "hydra.ext.haskell.syntax.TypedBinding"
_TypedBinding_typeSignature = Core.Name "typeSignature"
_TypedBinding_valueBinding = Core.Name "valueBinding"
-- | A value binding
data ValueBinding =
-- | A simple value binding
ValueBindingSimple SimpleValueBinding
deriving (Eq, Ord, Read, Show)
_ValueBinding = Core.Name "hydra.ext.haskell.syntax.ValueBinding"
_ValueBinding_simple = Core.Name "simple"
-- | A simple value binding
data SimpleValueBinding =
SimpleValueBinding {
-- | The pattern being bound
simpleValueBindingPattern :: Pattern,
-- | The right-hand side
simpleValueBindingRhs :: RightHandSide,
-- | Optional local bindings (where clause)
simpleValueBindingLocalBindings :: (Maybe LocalBindings)}
deriving (Eq, Ord, Read, Show)
_SimpleValueBinding = Core.Name "hydra.ext.haskell.syntax.SimpleValueBinding"
_SimpleValueBinding_pattern = Core.Name "pattern"
_SimpleValueBinding_rhs = Core.Name "rhs"
_SimpleValueBinding_localBindings = Core.Name "localBindings"
-- | A type variable
newtype Variable =
Variable {
unVariable :: Name}
deriving (Eq, Ord, Read, Show)
_Variable = Core.Name "hydra.ext.haskell.syntax.Variable"