packages feed

hydra-0.1.0: src/gen-main/haskell/Hydra/Ext/Haskell/Ast.hs

-- | A Haskell syntax model, loosely based on Language.Haskell.Tools.AST

module Hydra.Ext.Haskell.Ast where

import qualified Hydra.Core as Core
import Data.List
import Data.Map
import Data.Set

-- | A pattern-matching alternative
data Alternative = 
  Alternative {
    alternativePattern :: Pattern,
    alternativeRhs :: CaseRhs,
    alternativeBinds :: (Maybe LocalBindings)}
  deriving (Eq, Ord, Read, Show)

_Alternative = (Core.Name "hydra/ext/haskell/ast.Alternative")

_Alternative_pattern = (Core.FieldName "pattern")

_Alternative_rhs = (Core.FieldName "rhs")

_Alternative_binds = (Core.FieldName "binds")

-- | A type assertion
data Assertion = 
  Assertion {
    assertionName :: Name,
    assertionTypes :: [Type]}
  deriving (Eq, Ord, Read, Show)

_Assertion = (Core.Name "hydra/ext/haskell/ast.Assertion")

_Assertion_name = (Core.FieldName "name")

_Assertion_types = (Core.FieldName "types")

-- | The right-hand side of a pattern-matching alternative
newtype CaseRhs = 
  CaseRhs {
    -- | The right-hand side of a pattern-matching alternative
    unCaseRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_CaseRhs = (Core.Name "hydra/ext/haskell/ast.CaseRhs")

-- | A data constructor
data Constructor = 
  ConstructorOrdinary Constructor_Ordinary |
  ConstructorRecord Constructor_Record
  deriving (Eq, Ord, Read, Show)

_Constructor = (Core.Name "hydra/ext/haskell/ast.Constructor")

_Constructor_ordinary = (Core.FieldName "ordinary")

_Constructor_record = (Core.FieldName "record")

-- | An ordinary (positional) data constructor
data Constructor_Ordinary = 
  Constructor_Ordinary {
    constructor_OrdinaryName :: Name,
    constructor_OrdinaryFields :: [Type]}
  deriving (Eq, Ord, Read, Show)

_Constructor_Ordinary = (Core.Name "hydra/ext/haskell/ast.Constructor.Ordinary")

_Constructor_Ordinary_name = (Core.FieldName "name")

_Constructor_Ordinary_fields = (Core.FieldName "fields")

-- | A record-style data constructor
data Constructor_Record = 
  Constructor_Record {
    constructor_RecordName :: Name,
    constructor_RecordFields :: [FieldWithComments]}
  deriving (Eq, Ord, Read, Show)

_Constructor_Record = (Core.Name "hydra/ext/haskell/ast.Constructor.Record")

_Constructor_Record_name = (Core.FieldName "name")

_Constructor_Record_fields = (Core.FieldName "fields")

-- | A data constructor together with any comments
data ConstructorWithComments = 
  ConstructorWithComments {
    constructorWithCommentsBody :: Constructor,
    constructorWithCommentsComments :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)

_ConstructorWithComments = (Core.Name "hydra/ext/haskell/ast.ConstructorWithComments")

_ConstructorWithComments_body = (Core.FieldName "body")

_ConstructorWithComments_comments = (Core.FieldName "comments")

-- | A data type declaration
data DataDeclaration = 
  DataDeclaration {
    dataDeclarationKeyword :: DataDeclaration_Keyword,
    dataDeclarationContext :: [Assertion],
    dataDeclarationHead :: DeclarationHead,
    dataDeclarationConstructors :: [ConstructorWithComments],
    dataDeclarationDeriving :: [Deriving]}
  deriving (Eq, Ord, Read, Show)

_DataDeclaration = (Core.Name "hydra/ext/haskell/ast.DataDeclaration")

_DataDeclaration_keyword = (Core.FieldName "keyword")

_DataDeclaration_context = (Core.FieldName "context")

_DataDeclaration_head = (Core.FieldName "head")

_DataDeclaration_constructors = (Core.FieldName "constructors")

_DataDeclaration_deriving = (Core.FieldName "deriving")

-- | The 'data' versus 'newtype keyword
data DataDeclaration_Keyword = 
  DataDeclaration_KeywordData  |
  DataDeclaration_KeywordNewtype 
  deriving (Eq, Ord, Read, Show)

_DataDeclaration_Keyword = (Core.Name "hydra/ext/haskell/ast.DataDeclaration.Keyword")

_DataDeclaration_Keyword_data = (Core.FieldName "data")

_DataDeclaration_Keyword_newtype = (Core.FieldName "newtype")

-- | A data declaration together with any comments
data DeclarationWithComments = 
  DeclarationWithComments {
    declarationWithCommentsBody :: Declaration,
    declarationWithCommentsComments :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)

_DeclarationWithComments = (Core.Name "hydra/ext/haskell/ast.DeclarationWithComments")

_DeclarationWithComments_body = (Core.FieldName "body")

_DeclarationWithComments_comments = (Core.FieldName "comments")

-- | A data or value declaration
data Declaration = 
  DeclarationData DataDeclaration |
  DeclarationType TypeDeclaration |
  DeclarationValueBinding ValueBinding |
  DeclarationTypedBinding TypedBinding
  deriving (Eq, Ord, Read, Show)

_Declaration = (Core.Name "hydra/ext/haskell/ast.Declaration")

_Declaration_data = (Core.FieldName "data")

_Declaration_type = (Core.FieldName "type")

_Declaration_valueBinding = (Core.FieldName "valueBinding")

_Declaration_typedBinding = (Core.FieldName "typedBinding")

-- | The left-hand side of a declaration
data DeclarationHead = 
  DeclarationHeadApplication DeclarationHead_Application |
  DeclarationHeadParens DeclarationHead |
  DeclarationHeadSimple Name
  deriving (Eq, Ord, Read, Show)

_DeclarationHead = (Core.Name "hydra/ext/haskell/ast.DeclarationHead")

_DeclarationHead_application = (Core.FieldName "application")

_DeclarationHead_parens = (Core.FieldName "parens")

_DeclarationHead_simple = (Core.FieldName "simple")

-- | An application-style declaration head
data DeclarationHead_Application = 
  DeclarationHead_Application {
    declarationHead_ApplicationFunction :: DeclarationHead,
    declarationHead_ApplicationOperand :: Variable}
  deriving (Eq, Ord, Read, Show)

_DeclarationHead_Application = (Core.Name "hydra/ext/haskell/ast.DeclarationHead.Application")

_DeclarationHead_Application_function = (Core.FieldName "function")

_DeclarationHead_Application_operand = (Core.FieldName "operand")

-- | A 'deriving' statement
newtype Deriving = 
  Deriving {
    -- | A 'deriving' statement
    unDeriving :: [Name]}
  deriving (Eq, Ord, Read, Show)

_Deriving = (Core.Name "hydra/ext/haskell/ast.Deriving")

-- | An export statement
data Export = 
  ExportDeclaration ImportExportSpec |
  ExportModule ModuleName
  deriving (Eq, Ord, Read, Show)

_Export = (Core.Name "hydra/ext/haskell/ast.Export")

_Export_declaration = (Core.FieldName "declaration")

_Export_module = (Core.FieldName "module")

-- | A data expression
data Expression = 
  ExpressionApplication Expression_Application |
  ExpressionCase Expression_Case |
  ExpressionConstructRecord Expression_ConstructRecord |
  ExpressionDo [Statement] |
  ExpressionIf Expression_If |
  ExpressionInfixApplication Expression_InfixApplication |
  ExpressionLiteral Literal |
  ExpressionLambda Expression_Lambda |
  ExpressionLeftSection Expression_Section |
  ExpressionLet Expression_Let |
  ExpressionList [Expression] |
  ExpressionParens Expression |
  ExpressionPrefixApplication Expression_PrefixApplication |
  ExpressionRightSection Expression_Section |
  ExpressionTuple [Expression] |
  ExpressionTypeSignature Expression_TypeSignature |
  ExpressionUpdateRecord Expression_UpdateRecord |
  ExpressionVariable Name
  deriving (Eq, Ord, Read, Show)

_Expression = (Core.Name "hydra/ext/haskell/ast.Expression")

_Expression_application = (Core.FieldName "application")

_Expression_case = (Core.FieldName "case")

_Expression_constructRecord = (Core.FieldName "constructRecord")

_Expression_do = (Core.FieldName "do")

_Expression_if = (Core.FieldName "if")

_Expression_infixApplication = (Core.FieldName "infixApplication")

_Expression_literal = (Core.FieldName "literal")

_Expression_lambda = (Core.FieldName "lambda")

_Expression_leftSection = (Core.FieldName "leftSection")

_Expression_let = (Core.FieldName "let")

_Expression_list = (Core.FieldName "list")

_Expression_parens = (Core.FieldName "parens")

_Expression_prefixApplication = (Core.FieldName "prefixApplication")

_Expression_rightSection = (Core.FieldName "rightSection")

_Expression_tuple = (Core.FieldName "tuple")

_Expression_typeSignature = (Core.FieldName "typeSignature")

_Expression_updateRecord = (Core.FieldName "updateRecord")

_Expression_variable = (Core.FieldName "variable")

-- | An application expression
data Expression_Application = 
  Expression_Application {
    expression_ApplicationFunction :: Expression,
    expression_ApplicationArgument :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_Application = (Core.Name "hydra/ext/haskell/ast.Expression.Application")

_Expression_Application_function = (Core.FieldName "function")

_Expression_Application_argument = (Core.FieldName "argument")

-- | A case expression
data Expression_Case = 
  Expression_Case {
    expression_CaseCase :: Expression,
    expression_CaseAlternatives :: [Alternative]}
  deriving (Eq, Ord, Read, Show)

_Expression_Case = (Core.Name "hydra/ext/haskell/ast.Expression.Case")

_Expression_Case_case = (Core.FieldName "case")

_Expression_Case_alternatives = (Core.FieldName "alternatives")

-- | A record constructor expression
data Expression_ConstructRecord = 
  Expression_ConstructRecord {
    expression_ConstructRecordName :: Name,
    expression_ConstructRecordFields :: [FieldUpdate]}
  deriving (Eq, Ord, Read, Show)

_Expression_ConstructRecord = (Core.Name "hydra/ext/haskell/ast.Expression.ConstructRecord")

_Expression_ConstructRecord_name = (Core.FieldName "name")

_Expression_ConstructRecord_fields = (Core.FieldName "fields")

-- | An 'if' expression
data Expression_If = 
  Expression_If {
    expression_IfCondition :: Expression,
    expression_IfThen :: Expression,
    expression_IfElse :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_If = (Core.Name "hydra/ext/haskell/ast.Expression.If")

_Expression_If_condition = (Core.FieldName "condition")

_Expression_If_then = (Core.FieldName "then")

_Expression_If_else = (Core.FieldName "else")

-- | An infix application expression
data Expression_InfixApplication = 
  Expression_InfixApplication {
    expression_InfixApplicationLhs :: Expression,
    expression_InfixApplicationOperator :: Operator,
    expression_InfixApplicationRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_InfixApplication = (Core.Name "hydra/ext/haskell/ast.Expression.InfixApplication")

_Expression_InfixApplication_lhs = (Core.FieldName "lhs")

_Expression_InfixApplication_operator = (Core.FieldName "operator")

_Expression_InfixApplication_rhs = (Core.FieldName "rhs")

-- | A lambda expression
data Expression_Lambda = 
  Expression_Lambda {
    expression_LambdaBindings :: [Pattern],
    expression_LambdaInner :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_Lambda = (Core.Name "hydra/ext/haskell/ast.Expression.Lambda")

_Expression_Lambda_bindings = (Core.FieldName "bindings")

_Expression_Lambda_inner = (Core.FieldName "inner")

-- | A 'let' expression
data Expression_Let = 
  Expression_Let {
    expression_LetBindings :: [Pattern],
    expression_LetInner :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_Let = (Core.Name "hydra/ext/haskell/ast.Expression.Let")

_Expression_Let_bindings = (Core.FieldName "bindings")

_Expression_Let_inner = (Core.FieldName "inner")

-- | A prefix expression
data Expression_PrefixApplication = 
  Expression_PrefixApplication {
    expression_PrefixApplicationOperator :: Operator,
    expression_PrefixApplicationRhs :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_PrefixApplication = (Core.Name "hydra/ext/haskell/ast.Expression.PrefixApplication")

_Expression_PrefixApplication_operator = (Core.FieldName "operator")

_Expression_PrefixApplication_rhs = (Core.FieldName "rhs")

-- | A section expression
data Expression_Section = 
  Expression_Section {
    expression_SectionOperator :: Operator,
    expression_SectionExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_Expression_Section = (Core.Name "hydra/ext/haskell/ast.Expression.Section")

_Expression_Section_operator = (Core.FieldName "operator")

_Expression_Section_expression = (Core.FieldName "expression")

-- | A type signature expression
data Expression_TypeSignature = 
  Expression_TypeSignature {
    expression_TypeSignatureInner :: Expression,
    expression_TypeSignatureType :: Type}
  deriving (Eq, Ord, Read, Show)

_Expression_TypeSignature = (Core.Name "hydra/ext/haskell/ast.Expression.TypeSignature")

_Expression_TypeSignature_inner = (Core.FieldName "inner")

_Expression_TypeSignature_type = (Core.FieldName "type")

-- | An update record expression
data Expression_UpdateRecord = 
  Expression_UpdateRecord {
    expression_UpdateRecordInner :: Expression,
    expression_UpdateRecordFields :: [FieldUpdate]}
  deriving (Eq, Ord, Read, Show)

_Expression_UpdateRecord = (Core.Name "hydra/ext/haskell/ast.Expression.UpdateRecord")

_Expression_UpdateRecord_inner = (Core.FieldName "inner")

_Expression_UpdateRecord_fields = (Core.FieldName "fields")

-- | A field (name/type pair)
data Field = 
  Field {
    fieldName :: Name,
    fieldType :: Type}
  deriving (Eq, Ord, Read, Show)

_Field = (Core.Name "hydra/ext/haskell/ast.Field")

_Field_name = (Core.FieldName "name")

_Field_type = (Core.FieldName "type")

-- | A field together with any comments
data FieldWithComments = 
  FieldWithComments {
    fieldWithCommentsField :: Field,
    fieldWithCommentsComments :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)

_FieldWithComments = (Core.Name "hydra/ext/haskell/ast.FieldWithComments")

_FieldWithComments_field = (Core.FieldName "field")

_FieldWithComments_comments = (Core.FieldName "comments")

-- | A field name and value
data FieldUpdate = 
  FieldUpdate {
    fieldUpdateName :: Name,
    fieldUpdateValue :: Expression}
  deriving (Eq, Ord, Read, Show)

_FieldUpdate = (Core.Name "hydra/ext/haskell/ast.FieldUpdate")

_FieldUpdate_name = (Core.FieldName "name")

_FieldUpdate_value = (Core.FieldName "value")

-- | An import statement
data Import = 
  Import {
    importQualified :: Bool,
    importModule :: ModuleName,
    importAs :: (Maybe ModuleName),
    importSpec :: (Maybe Import_Spec)}
  deriving (Eq, Ord, Read, Show)

_Import = (Core.Name "hydra/ext/haskell/ast.Import")

_Import_qualified = (Core.FieldName "qualified")

_Import_module = (Core.FieldName "module")

_Import_as = (Core.FieldName "as")

_Import_spec = (Core.FieldName "spec")

-- | An import specification
data Import_Spec = 
  Import_SpecList [ImportExportSpec] |
  Import_SpecHiding [ImportExportSpec]
  deriving (Eq, Ord, Read, Show)

_Import_Spec = (Core.Name "hydra/ext/haskell/ast.Import.Spec")

_Import_Spec_list = (Core.FieldName "list")

_Import_Spec_hiding = (Core.FieldName "hiding")

-- | An import modifier ('pattern' or 'type')
data ImportModifier = 
  ImportModifierPattern  |
  ImportModifierType 
  deriving (Eq, Ord, Read, Show)

_ImportModifier = (Core.Name "hydra/ext/haskell/ast.ImportModifier")

_ImportModifier_pattern = (Core.FieldName "pattern")

_ImportModifier_type = (Core.FieldName "type")

-- | An import or export specification
data ImportExportSpec = 
  ImportExportSpec {
    importExportSpecModifier :: (Maybe ImportModifier),
    importExportSpecName :: Name,
    importExportSpecSubspec :: (Maybe ImportExportSpec_Subspec)}
  deriving (Eq, Ord, Read, Show)

_ImportExportSpec = (Core.Name "hydra/ext/haskell/ast.ImportExportSpec")

_ImportExportSpec_modifier = (Core.FieldName "modifier")

_ImportExportSpec_name = (Core.FieldName "name")

_ImportExportSpec_subspec = (Core.FieldName "subspec")

data ImportExportSpec_Subspec = 
  ImportExportSpec_SubspecAll  |
  ImportExportSpec_SubspecList [Name]
  deriving (Eq, Ord, Read, Show)

_ImportExportSpec_Subspec = (Core.Name "hydra/ext/haskell/ast.ImportExportSpec.Subspec")

_ImportExportSpec_Subspec_all = (Core.FieldName "all")

_ImportExportSpec_Subspec_list = (Core.FieldName "list")

-- | A literal value
data Literal = 
  LiteralChar Int |
  LiteralDouble Double |
  LiteralFloat Float |
  LiteralInt Int |
  LiteralInteger Integer |
  LiteralString String
  deriving (Eq, Ord, Read, Show)

_Literal = (Core.Name "hydra/ext/haskell/ast.Literal")

_Literal_char = (Core.FieldName "char")

_Literal_double = (Core.FieldName "double")

_Literal_float = (Core.FieldName "float")

_Literal_int = (Core.FieldName "int")

_Literal_integer = (Core.FieldName "integer")

_Literal_string = (Core.FieldName "string")

data LocalBinding = 
  LocalBindingSignature TypeSignature |
  LocalBindingValue ValueBinding
  deriving (Eq, Ord, Read, Show)

_LocalBinding = (Core.Name "hydra/ext/haskell/ast.LocalBinding")

_LocalBinding_signature = (Core.FieldName "signature")

_LocalBinding_value = (Core.FieldName "value")

newtype LocalBindings = 
  LocalBindings {
    unLocalBindings :: [LocalBinding]}
  deriving (Eq, Ord, Read, Show)

_LocalBindings = (Core.Name "hydra/ext/haskell/ast.LocalBindings")

data Module = 
  Module {
    moduleHead :: (Maybe ModuleHead),
    moduleImports :: [Import],
    moduleDeclarations :: [DeclarationWithComments]}
  deriving (Eq, Ord, Read, Show)

_Module = (Core.Name "hydra/ext/haskell/ast.Module")

_Module_head = (Core.FieldName "head")

_Module_imports = (Core.FieldName "imports")

_Module_declarations = (Core.FieldName "declarations")

data ModuleHead = 
  ModuleHead {
    moduleHeadComments :: (Maybe String),
    moduleHeadName :: ModuleName,
    moduleHeadExports :: [Export]}
  deriving (Eq, Ord, Read, Show)

_ModuleHead = (Core.Name "hydra/ext/haskell/ast.ModuleHead")

_ModuleHead_comments = (Core.FieldName "comments")

_ModuleHead_name = (Core.FieldName "name")

_ModuleHead_exports = (Core.FieldName "exports")

newtype ModuleName = 
  ModuleName {
    unModuleName :: String}
  deriving (Eq, Ord, Read, Show)

_ModuleName = (Core.Name "hydra/ext/haskell/ast.ModuleName")

data Name = 
  NameImplicit QualifiedName |
  NameNormal QualifiedName |
  NameParens QualifiedName
  deriving (Eq, Ord, Read, Show)

_Name = (Core.Name "hydra/ext/haskell/ast.Name")

_Name_implicit = (Core.FieldName "implicit")

_Name_normal = (Core.FieldName "normal")

_Name_parens = (Core.FieldName "parens")

newtype NamePart = 
  NamePart {
    unNamePart :: String}
  deriving (Eq, Ord, Read, Show)

_NamePart = (Core.Name "hydra/ext/haskell/ast.NamePart")

data Operator = 
  OperatorBacktick QualifiedName |
  OperatorNormal QualifiedName
  deriving (Eq, Ord, Read, Show)

_Operator = (Core.Name "hydra/ext/haskell/ast.Operator")

_Operator_backtick = (Core.FieldName "backtick")

_Operator_normal = (Core.FieldName "normal")

data Pattern = 
  PatternApplication Pattern_Application |
  PatternAs Pattern_As |
  PatternList [Pattern] |
  PatternLiteral Literal |
  PatternName Name |
  PatternParens Pattern |
  PatternRecord Pattern_Record |
  PatternTuple [Pattern] |
  PatternTyped Pattern_Typed |
  PatternWildcard 
  deriving (Eq, Ord, Read, Show)

_Pattern = (Core.Name "hydra/ext/haskell/ast.Pattern")

_Pattern_application = (Core.FieldName "application")

_Pattern_as = (Core.FieldName "as")

_Pattern_list = (Core.FieldName "list")

_Pattern_literal = (Core.FieldName "literal")

_Pattern_name = (Core.FieldName "name")

_Pattern_parens = (Core.FieldName "parens")

_Pattern_record = (Core.FieldName "record")

_Pattern_tuple = (Core.FieldName "tuple")

_Pattern_typed = (Core.FieldName "typed")

_Pattern_wildcard = (Core.FieldName "wildcard")

data Pattern_Application = 
  Pattern_Application {
    pattern_ApplicationName :: Name,
    pattern_ApplicationArgs :: [Pattern]}
  deriving (Eq, Ord, Read, Show)

_Pattern_Application = (Core.Name "hydra/ext/haskell/ast.Pattern.Application")

_Pattern_Application_name = (Core.FieldName "name")

_Pattern_Application_args = (Core.FieldName "args")

data Pattern_As = 
  Pattern_As {
    pattern_AsName :: Name,
    pattern_AsInner :: Pattern}
  deriving (Eq, Ord, Read, Show)

_Pattern_As = (Core.Name "hydra/ext/haskell/ast.Pattern.As")

_Pattern_As_name = (Core.FieldName "name")

_Pattern_As_inner = (Core.FieldName "inner")

data Pattern_Record = 
  Pattern_Record {
    pattern_RecordName :: Name,
    pattern_RecordFields :: [PatternField]}
  deriving (Eq, Ord, Read, Show)

_Pattern_Record = (Core.Name "hydra/ext/haskell/ast.Pattern.Record")

_Pattern_Record_name = (Core.FieldName "name")

_Pattern_Record_fields = (Core.FieldName "fields")

data Pattern_Typed = 
  Pattern_Typed {
    pattern_TypedInner :: Pattern,
    pattern_TypedType :: Type}
  deriving (Eq, Ord, Read, Show)

_Pattern_Typed = (Core.Name "hydra/ext/haskell/ast.Pattern.Typed")

_Pattern_Typed_inner = (Core.FieldName "inner")

_Pattern_Typed_type = (Core.FieldName "type")

data PatternField = 
  PatternField {
    patternFieldName :: Name,
    patternFieldPattern :: Pattern}
  deriving (Eq, Ord, Read, Show)

_PatternField = (Core.Name "hydra/ext/haskell/ast.PatternField")

_PatternField_name = (Core.FieldName "name")

_PatternField_pattern = (Core.FieldName "pattern")

data QualifiedName = 
  QualifiedName {
    qualifiedNameQualifiers :: [NamePart],
    qualifiedNameUnqualified :: NamePart}
  deriving (Eq, Ord, Read, Show)

_QualifiedName = (Core.Name "hydra/ext/haskell/ast.QualifiedName")

_QualifiedName_qualifiers = (Core.FieldName "qualifiers")

_QualifiedName_unqualified = (Core.FieldName "unqualified")

newtype RightHandSide = 
  RightHandSide {
    unRightHandSide :: Expression}
  deriving (Eq, Ord, Read, Show)

_RightHandSide = (Core.Name "hydra/ext/haskell/ast.RightHandSide")

newtype Statement = 
  Statement {
    unStatement :: Expression}
  deriving (Eq, Ord, Read, Show)

_Statement = (Core.Name "hydra/ext/haskell/ast.Statement")

data Type = 
  TypeApplication Type_Application |
  TypeFunction Type_Function |
  TypeInfix Type_Infix |
  TypeList Type |
  TypeParens Type |
  TypeTuple [Type] |
  TypeVariable Name
  deriving (Eq, Ord, Read, Show)

_Type = (Core.Name "hydra/ext/haskell/ast.Type")

_Type_application = (Core.FieldName "application")

_Type_function = (Core.FieldName "function")

_Type_infix = (Core.FieldName "infix")

_Type_list = (Core.FieldName "list")

_Type_parens = (Core.FieldName "parens")

_Type_tuple = (Core.FieldName "tuple")

_Type_variable = (Core.FieldName "variable")

data Type_Application = 
  Type_Application {
    type_ApplicationContext :: Type,
    type_ApplicationArgument :: Type}
  deriving (Eq, Ord, Read, Show)

_Type_Application = (Core.Name "hydra/ext/haskell/ast.Type.Application")

_Type_Application_context = (Core.FieldName "context")

_Type_Application_argument = (Core.FieldName "argument")

data Type_Function = 
  Type_Function {
    type_FunctionDomain :: Type,
    type_FunctionCodomain :: Type}
  deriving (Eq, Ord, Read, Show)

_Type_Function = (Core.Name "hydra/ext/haskell/ast.Type.Function")

_Type_Function_domain = (Core.FieldName "domain")

_Type_Function_codomain = (Core.FieldName "codomain")

data Type_Infix = 
  Type_Infix {
    type_InfixLhs :: Type,
    type_InfixOperator :: Operator,
    type_InfixRhs :: Operator}
  deriving (Eq, Ord, Read, Show)

_Type_Infix = (Core.Name "hydra/ext/haskell/ast.Type.Infix")

_Type_Infix_lhs = (Core.FieldName "lhs")

_Type_Infix_operator = (Core.FieldName "operator")

_Type_Infix_rhs = (Core.FieldName "rhs")

data TypeDeclaration = 
  TypeDeclaration {
    typeDeclarationName :: DeclarationHead,
    typeDeclarationType :: Type}
  deriving (Eq, Ord, Read, Show)

_TypeDeclaration = (Core.Name "hydra/ext/haskell/ast.TypeDeclaration")

_TypeDeclaration_name = (Core.FieldName "name")

_TypeDeclaration_type = (Core.FieldName "type")

data TypeSignature = 
  TypeSignature {
    typeSignatureName :: Name,
    typeSignatureType :: Type}
  deriving (Eq, Ord, Read, Show)

_TypeSignature = (Core.Name "hydra/ext/haskell/ast.TypeSignature")

_TypeSignature_name = (Core.FieldName "name")

_TypeSignature_type = (Core.FieldName "type")

data TypedBinding = 
  TypedBinding {
    typedBindingTypeSignature :: TypeSignature,
    typedBindingValueBinding :: ValueBinding}
  deriving (Eq, Ord, Read, Show)

_TypedBinding = (Core.Name "hydra/ext/haskell/ast.TypedBinding")

_TypedBinding_typeSignature = (Core.FieldName "typeSignature")

_TypedBinding_valueBinding = (Core.FieldName "valueBinding")

data ValueBinding = 
  ValueBindingSimple ValueBinding_Simple
  deriving (Eq, Ord, Read, Show)

_ValueBinding = (Core.Name "hydra/ext/haskell/ast.ValueBinding")

_ValueBinding_simple = (Core.FieldName "simple")

data ValueBinding_Simple = 
  ValueBinding_Simple {
    valueBinding_SimplePattern :: Pattern,
    valueBinding_SimpleRhs :: RightHandSide,
    valueBinding_SimpleLocalBindings :: (Maybe LocalBindings)}
  deriving (Eq, Ord, Read, Show)

_ValueBinding_Simple = (Core.Name "hydra/ext/haskell/ast.ValueBinding.Simple")

_ValueBinding_Simple_pattern = (Core.FieldName "pattern")

_ValueBinding_Simple_rhs = (Core.FieldName "rhs")

_ValueBinding_Simple_localBindings = (Core.FieldName "localBindings")

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

_Variable = (Core.Name "hydra/ext/haskell/ast.Variable")