-- UUAGC 0.9.52.1 (build/103/lib-ehc/UHC/Light/Compiler/HS.ag) module UHC.Light.Compiler.HS(module UU.Scanner.Position , AGItf (..), Module (..), Body (..), Declaration (..), Declarations, MaybeDeclarations, Type (..), Types, MaybeType, Expression (..), Expressions, MaybeExpression, FunctionBinding (..), FunctionBindings, LeftHandSide (..), RightHandSide (..), Pattern (..), Patterns, Literal (..), Name, Names, MaybeName, MaybeNames, Strings, Range (..), Fixity (..) , TypeAnnotation (..), ExpressionAnnotation (..), PatternAnnotation (..) , mkRngNm, mkRngNm', mkRngStr , TypeLeftHandSide (..), TypePattern (..), TypePatterns , Constructor (..), Constructors , GuardedExpression (..), GuardedExpressions, Alternative (..), Alternatives, Qualifier (..), Qualifiers , Kind (..), Kinds, KindAnnotation (..) , FieldDeclaration (..), FieldDeclarations , RecordPatternBinding (..), RecordPatternBindings , RecordExpressionBinding (..), RecordExpressionBindings , RowRecordExpressionUpdate (..), RowRecordExpressionUpdates, RowRecordPatternBinding (..), RowRecordPatternBindings, RowTypeUpdate (..), RowTypeUpdates , module UHC.Light.Compiler.Base.Target , ContextItem (..), ContextItems , Statement (..), Statements , ContextedExpression (..), ContextedExpressions, ContextedPattern (..), ContextedPatterns , FunctionalDependency (..), FunctionalDependencies , Export (..), Exports, MaybeExports, ImportDeclaration (..), ImportDeclarations, ImportSpecification (..), MaybeImportSpecification, Import (..), Imports , Deriving (..), Derivings , Pragma (..), Pragmas) where import UHC.Light.Compiler.Base.Common import UHC.Light.Compiler.Base.TermLike import UU.Scanner.Position import UHC.Util.ScanUtils import UHC.Light.Compiler.Scanner.Token import UHC.Light.Compiler.Base.Target (FFIWay) deriving instance Typeable AGItf type Name = HsName type Names = [Name] type MaybeName = Maybe Name type MaybeNames = Maybe Names mkRngNm' :: (Position t,HSNM t) => (Range -> HsName -> r) -> t -> (r,Range) mkRngNm' ast t = (ast r (mkHNm t),r) where r = mkRange1 t mkRngNm :: (Position t,HSNM t) => (Range -> HsName -> r) -> t -> r mkRngNm ast t = fst (mkRngNm' ast t) mkRngStr :: (Range -> String -> r) -> Token -> r mkRngStr ast t = ast (mkRange1 t) (tokMkStr t) instance AppLike Type () {- TypeAnnotation () -} where app1App = \e1 e2 -> Type_NormalApplication emptyRange e1 [e2] appTop = id appCon = mkRngNm Type_Constructor appPar = Type_Parenthesized emptyRange appTopApp (a:as) = if null as then a else Type_NormalApplication emptyRange a as appRngCon r n = Type_Constructor r (mkHNm n) appRngVar r n = Type_Variable r (mkHNm n) instance AppLike Expression () {- ExpressionAnnotation () -} where app1App = \e1 e2 -> Expression_NormalApplication emptyRange e1 [e2] appTop = id appCon = mkRngNm Expression_Constructor appPar = Expression_Parenthesized emptyRange appTopApp (a:as) = if null as then a else Expression_NormalApplication emptyRange a as appRngCon r n = Expression_Constructor r (mkHNm n) appRngVar r n = Expression_Variable r (mkHNm n) -- AGItf ------------------------------------------------------- data AGItf = AGItf_AGItf {module_AGItf_AGItf :: !(Module)} -- Alternative ------------------------------------------------- data Alternative = Alternative_Alternative {range_Alternative_Alternative :: !(Range),pattern_Alternative_Alternative :: !(Pattern),righthandside_Alternative_Alternative :: !(RightHandSide)} | Alternative_Empty {range_Alternative_Empty :: !(Range)} -- Alternatives ------------------------------------------------ type Alternatives = [Alternative] -- Body -------------------------------------------------------- data Body = Body_Body {range_Body_Body :: !(Range),importdeclarations_Body_Body :: !(ImportDeclarations),declarations_Body_Body :: !(Declarations)} -- Constructor ------------------------------------------------- data Constructor = Constructor_Constructor {range_Constructor_Constructor :: !(Range),constructor_Constructor_Constructor :: !(Name),types_Constructor_Constructor :: !(Types)} | Constructor_Infix {range_Constructor_Infix :: !(Range),leftType_Constructor_Infix :: !(Type),constructorOperator_Constructor_Infix :: !(Name),rightType_Constructor_Infix :: !(Type)} | Constructor_Record {range_Constructor_Record :: !(Range),constructor_Constructor_Record :: !(Name),fieldDeclarations_Constructor_Record :: !(FieldDeclarations)} | Constructor_Contexted {range_Constructor_Contexted :: !(Range),context_Constructor_Contexted :: !(ContextItems),constructor_Constructor_Contexted :: !(Constructor)} | Constructor_GADTFunction {range_Constructor_GADTFunction :: !(Range),constructor_Constructor_GADTFunction :: !(Name),type_Constructor_GADTFunction :: !(Type)} -- Constructors ------------------------------------------------ type Constructors = [Constructor] -- ContextItem ------------------------------------------------- data ContextItem = ContextItem_Class {range_ContextItem_Class :: !(Range),name_ContextItem_Class :: !(Name),types_ContextItem_Class :: !(Types)} | ContextItem_Forall {range_ContextItem_Forall :: !(Range),typevariables_ContextItem_Forall :: !(Names),context_ContextItem_Forall :: !(ContextItem)} | ContextItem_Arrow {range_ContextItem_Arrow :: !(Range),argument_ContextItem_Arrow :: !(ContextItem),result_ContextItem_Arrow :: !(ContextItem)} | ContextItem_Implicits {range_ContextItem_Implicits :: !(Range)} | ContextItem_NoImplicits {range_ContextItem_NoImplicits :: !(Range)} | ContextItem_RowLacksLabel {range_ContextItem_RowLacksLabel :: !(Range),rowvariable_ContextItem_RowLacksLabel :: !(Name),name_ContextItem_RowLacksLabel :: !(Name)} | ContextItem_Equal {range_ContextItem_Equal :: !(Range),type1_ContextItem_Equal :: !(Type),type2_ContextItem_Equal :: !(Type)} -- ContextItems ------------------------------------------------ type ContextItems = [ContextItem] -- ContextedExpression ----------------------------------------- data ContextedExpression = ContextedExpression_Contexted {range_ContextedExpression_Contexted :: !(Range),expression_ContextedExpression_Contexted :: !(Expression),context_ContextedExpression_Contexted :: !(ContextItem)} -- ContextedExpressions ---------------------------------------- type ContextedExpressions = [ContextedExpression] -- ContextedPattern -------------------------------------------- data ContextedPattern = ContextedPattern_Contexted {range_ContextedPattern_Contexted :: !(Range),pattern_ContextedPattern_Contexted :: !(Pattern),context_ContextedPattern_Contexted :: !(ContextItem)} -- ContextedPatterns ------------------------------------------- type ContextedPatterns = [ContextedPattern] -- Declaration ------------------------------------------------- data Declaration = Declaration_FunctionBindings {range_Declaration_FunctionBindings :: !(Range),bindings_Declaration_FunctionBindings :: !(FunctionBindings)} | Declaration_PatternBinding {range_Declaration_PatternBinding :: !(Range),pattern_Declaration_PatternBinding :: !(Pattern),righthandside_Declaration_PatternBinding :: !(RightHandSide)} | Declaration_TypeSignature {range_Declaration_TypeSignature :: !(Range),names_Declaration_TypeSignature :: !(Names),type_Declaration_TypeSignature :: !(Type)} | Declaration_Fixity {range_Declaration_Fixity :: !(Range),fixity_Declaration_Fixity :: !(Fixity),priority_Declaration_Fixity :: !((Maybe Int)),operators_Declaration_Fixity :: !(Names)} | Declaration_FusionDeclaration {range_Declaration_FusionDeclaration :: !(Range),fusename_Declaration_FusionDeclaration :: !(Name)} | Declaration_FusionConversion {range_Declaration_FusionConversion :: !(Range),absname_Declaration_FusionConversion :: !(Name),conname_Declaration_FusionConversion :: !(Name)} | Declaration_Empty {range_Declaration_Empty :: !(Range)} | Declaration_Data {range_Declaration_Data :: !(Range),context_Declaration_Data :: !(ContextItems),typelefthandside_Declaration_Data :: !(TypeLeftHandSide),constructors_Declaration_Data :: !(Constructors),derivings_Declaration_Data :: !(Derivings)} | Declaration_Newtype {range_Declaration_Newtype :: !(Range),context_Declaration_Newtype :: !(ContextItems),typelefthandside_Declaration_Newtype :: !(TypeLeftHandSide),constructors_Declaration_Newtype :: !(Constructor),derivings_Declaration_Newtype :: !(Derivings)} | Declaration_GADT {range_Declaration_GADT :: !(Range),context_Declaration_GADT :: !(ContextItems),typelefthandside_Declaration_GADT :: !(TypeLeftHandSide),constructors_Declaration_GADT :: !(Constructors),derivings_Declaration_GADT :: !(Derivings)} | Declaration_KindSignature {range_Declaration_KindSignature :: !(Range),names_Declaration_KindSignature :: !(Names),kind_Declaration_KindSignature :: !(Kind)} | Declaration_ForeignImport {range_Declaration_ForeignImport :: !(Range),callconvention_Declaration_ForeignImport :: !(FFIWay),safety_Declaration_ForeignImport :: !((Maybe String)),importname_Declaration_ForeignImport :: !((Maybe String)),name_Declaration_ForeignImport :: !(Name),type_Declaration_ForeignImport :: !(Type)} | Declaration_ForeignExport {range_Declaration_ForeignExport :: !(Range),callconvention_Declaration_ForeignExport :: !(FFIWay),exportname_Declaration_ForeignExport :: !((Maybe String)),name_Declaration_ForeignExport :: !(Name),type_Declaration_ForeignExport :: !(Type)} | Declaration_Class {range_Declaration_Class :: !(Range),context_Declaration_Class :: !(ContextItems),typelefthandside_Declaration_Class :: !(TypeLeftHandSide),dependencies_Declaration_Class :: !(FunctionalDependencies),where_Declaration_Class :: !(MaybeDeclarations)} | Declaration_Instance {range_Declaration_Instance :: !(Range),instVariant_Declaration_Instance :: !(InstVariant),maybeinstancename_Declaration_Instance :: !(MaybeName),useimplicitly_Declaration_Instance :: !(Bool),context_Declaration_Instance :: !(ContextItems),type_Declaration_Instance :: !(Type),where_Declaration_Instance :: !(MaybeDeclarations)} | Declaration_InstanceUseImplicitly {range_Declaration_InstanceUseImplicitly :: !(Range),expression_Declaration_InstanceUseImplicitly :: !(Expression),type_Declaration_InstanceUseImplicitly :: !(Type)} | Declaration_Default {range_Declaration_Default :: !(Range),name_Declaration_Default :: !(MaybeName),types_Declaration_Default :: !(Types)} | Declaration_Type {range_Declaration_Type :: !(Range),typelefthandside_Declaration_Type :: !(TypeLeftHandSide),type_Declaration_Type :: !(Type)} | Declaration_Pragma {range_Declaration_Pragma :: !(Range),pragma_Declaration_Pragma :: !(Pragma)} | Declaration_Module {range_Declaration_Module :: !(Range),name_Declaration_Module :: !(MaybeName),exports_Declaration_Module :: !(MaybeExports)} -- Declarations ------------------------------------------------ type Declarations = [Declaration] -- Deriving ---------------------------------------------------- data Deriving = Deriving_Deriving {range_Deriving_Deriving :: !(Range),maybeinstancename_Deriving_Deriving :: !(MaybeName),useimplicitly_Deriving_Deriving :: !(Bool),name_Deriving_Deriving :: !(Name)} -- Derivings --------------------------------------------------- type Derivings = [Deriving] -- Export ------------------------------------------------------ data Export = Export_Variable {range_Export_Variable :: !(Range),name_Export_Variable :: !(Name)} | Export_TypeOrClass {range_Export_TypeOrClass :: !(Range),name_Export_TypeOrClass :: !(Name),names_Export_TypeOrClass :: !(MaybeNames)} | Export_TypeOrClassComplete {range_Export_TypeOrClassComplete :: !(Range),name_Export_TypeOrClassComplete :: !(Name)} | Export_Module {range_Export_Module :: !(Range),name_Export_Module :: !(Name)} -- Exports ----------------------------------------------------- type Exports = [Export] -- Expression -------------------------------------------------- data Expression = Expression_Literal {range_Expression_Literal :: !(Range),literal_Expression_Literal :: !(Literal)} | Expression_Variable {range_Expression_Variable :: !(Range),name_Expression_Variable :: !(Name)} | Expression_Constructor {range_Expression_Constructor :: !(Range),name_Expression_Constructor :: !(Name)} | Expression_TupleConstructor {range_Expression_TupleConstructor :: !(Range),arity_Expression_TupleConstructor :: !(Int)} | Expression_Parenthesized {range_Expression_Parenthesized :: !(Range),expression_Expression_Parenthesized :: !(Expression)} | Expression_NormalApplication {range_Expression_NormalApplication :: !(Range),function_Expression_NormalApplication :: !(Expression),arguments_Expression_NormalApplication :: !(Expressions)} | Expression_SectionApplication {range_Expression_SectionApplication :: !(Range),leftExpression_Expression_SectionApplication :: !(MaybeExpression),operator_Expression_SectionApplication :: !(Expression),rightExpression_Expression_SectionApplication :: !(MaybeExpression)} | Expression_InfixApplication {range_Expression_InfixApplication :: !(Range),leftExpression_Expression_InfixApplication :: !(Expression),operator_Expression_InfixApplication :: !(Expression),rightExpression_Expression_InfixApplication :: !(Expression)} | Expression_InfixApplicationChainTop {range_Expression_InfixApplicationChainTop :: !(Range),expression_Expression_InfixApplicationChainTop :: !(Expression)} | Expression_Lambda {range_Expression_Lambda :: !(Range),patterns_Expression_Lambda :: !(Patterns),expression_Expression_Lambda :: !(Expression)} | Expression_Let {range_Expression_Let :: !(Range),isStrict_Expression_Let :: !(Bool),declarations_Expression_Let :: !(Declarations),expression_Expression_Let :: !(Expression)} | Expression_Tuple {range_Expression_Tuple :: !(Range),expressions_Expression_Tuple :: !(Expressions)} | Expression_Typed {range_Expression_Typed :: !(Range),expression_Expression_Typed :: !(Expression),type_Expression_Typed :: !(Type)} | Expression_Negate {range_Expression_Negate :: !(Range),expression_Expression_Negate :: !(Expression)} | Expression_Annotate {range_Expression_Annotate :: !(Range),annotation_Expression_Annotate :: !(ExpressionAnnotation),expression_Expression_Annotate :: !(Expression)} | Expression_ImpredicativeApplication {range_Expression_ImpredicativeApplication :: !(Range),function_Expression_ImpredicativeApplication :: !(Expression),arguments_Expression_ImpredicativeApplication :: !(Expressions)} | Expression_If {range_Expression_If :: !(Range),guardExpression_Expression_If :: !(Expression),thenExpression_Expression_If :: !(Expression),elseExpression_Expression_If :: !(Expression)} | Expression_Case {range_Expression_Case :: !(Range),expression_Expression_Case :: !(Expression),alternatives_Expression_Case :: !(Alternatives)} | Expression_List {range_Expression_List :: !(Range),expressions_Expression_List :: !(Expressions)} | Expression_Enum {range_Expression_Enum :: !(Range),from_Expression_Enum :: !(Expression),then_Expression_Enum :: !(MaybeExpression),to_Expression_Enum :: !(MaybeExpression)} | Expression_Comprehension {range_Expression_Comprehension :: !(Range),expression_Expression_Comprehension :: !(Expression),qualifiers_Expression_Comprehension :: !(Qualifiers)} | Expression_RecordConstruction {range_Expression_RecordConstruction :: !(Range),name_Expression_RecordConstruction :: !(Name),recordExpressionBindings_Expression_RecordConstruction :: !(RecordExpressionBindings)} | Expression_RecordUpdate {range_Expression_RecordUpdate :: !(Range),expression_Expression_RecordUpdate :: !(Expression),recordExpressionBindings_Expression_RecordUpdate :: !(RecordExpressionBindings)} | Expression_RowRecordUpdate {range_Expression_RowRecordUpdate :: !(Range),expression_Expression_RowRecordUpdate :: !(Expression),rowRecordExpressionUpdates_Expression_RowRecordUpdate :: !(RowRecordExpressionUpdates)} | Expression_RowRecordEmpty {range_Expression_RowRecordEmpty :: !(Range)} | Expression_RowRecordSelect {range_Expression_RowRecordSelect :: !(Range),expression_Expression_RowRecordSelect :: !(Expression),name_Expression_RowRecordSelect :: !(Name)} | Expression_Do {range_Expression_Do :: !(Range),statements_Expression_Do :: !(Statements)} | Expression_ImplicitApplication {range_Expression_ImplicitApplication :: !(Range),function_Expression_ImplicitApplication :: !(Expression),arguments_Expression_ImplicitApplication :: !(ContextedExpressions)} | Expression_ImplicitLambda {range_Expression_ImplicitLambda :: !(Range),patterns_Expression_ImplicitLambda :: !(ContextedPatterns),expression_Expression_ImplicitLambda :: !(Expression)} -- ExpressionAnnotation ---------------------------------------- data ExpressionAnnotation = ExpressionAnnotation_Empty {} -- Expressions ------------------------------------------------- type Expressions = [Expression] -- FieldDeclaration -------------------------------------------- data FieldDeclaration = FieldDeclaration_FieldDeclaration {range_FieldDeclaration_FieldDeclaration :: !(Range),names_FieldDeclaration_FieldDeclaration :: !(Names),type_FieldDeclaration_FieldDeclaration :: !(Type)} -- FieldDeclarations ------------------------------------------- type FieldDeclarations = [FieldDeclaration] -- FunctionBinding --------------------------------------------- data FunctionBinding = FunctionBinding_FunctionBinding {range_FunctionBinding_FunctionBinding :: !(Range),lefthandside_FunctionBinding_FunctionBinding :: !(LeftHandSide),righthandside_FunctionBinding_FunctionBinding :: !(RightHandSide)} -- FunctionBindings -------------------------------------------- type FunctionBindings = [FunctionBinding] -- FunctionalDependencies -------------------------------------- type FunctionalDependencies = [FunctionalDependency] -- FunctionalDependency ---------------------------------------- data FunctionalDependency = FunctionalDependency_Dependency {range_FunctionalDependency_Dependency :: !(Range),fromtypevariables_FunctionalDependency_Dependency :: !(Names),totypevariables_FunctionalDependency_Dependency :: !(Names)} -- GuardedExpression ------------------------------------------- data GuardedExpression = GuardedExpression_GuardedExpression {range_GuardedExpression_GuardedExpression :: !(Range),guard_GuardedExpression_GuardedExpression :: !(Expression),expression_GuardedExpression_GuardedExpression :: !(Expression)} -- GuardedExpressions ------------------------------------------ type GuardedExpressions = [GuardedExpression] -- Import ------------------------------------------------------ data Import = Import_Variable {range_Import_Variable :: !(Range),name_Import_Variable :: !(Name)} | Import_TypeOrClass {range_Import_TypeOrClass :: !(Range),name_Import_TypeOrClass :: !(Name),names_Import_TypeOrClass :: !(MaybeNames)} | Import_TypeOrClassComplete {range_Import_TypeOrClassComplete :: !(Range),name_Import_TypeOrClassComplete :: !(Name)} -- ImportDeclaration ------------------------------------------- data ImportDeclaration = ImportDeclaration_Import {range_ImportDeclaration_Import :: !(Range),qualified_ImportDeclaration_Import :: !(Bool),name_ImportDeclaration_Import :: !(Name),asname_ImportDeclaration_Import :: !(MaybeName),importspecification_ImportDeclaration_Import :: !(MaybeImportSpecification)} | ImportDeclaration_Empty {range_ImportDeclaration_Empty :: !(Range)} -- ImportDeclarations ------------------------------------------ type ImportDeclarations = [ImportDeclaration] -- ImportSpecification ----------------------------------------- data ImportSpecification = ImportSpecification_Import {range_ImportSpecification_Import :: !(Range),hiding_ImportSpecification_Import :: !(Bool),imports_ImportSpecification_Import :: !(Imports)} -- Imports ----------------------------------------------------- type Imports = [Import] -- Kind -------------------------------------------------------- data Kind = Kind_NormalApplication {range_Kind_NormalApplication :: !(Range),function_Kind_NormalApplication :: !(Kind),arguments_Kind_NormalApplication :: !(Kinds)} | Kind_InfixApplication {range_Kind_InfixApplication :: !(Range),leftKind_Kind_InfixApplication :: !(Kind),operator_Kind_InfixApplication :: !(Kind),rightKind_Kind_InfixApplication :: !(Kind)} | Kind_Constructor {range_Kind_Constructor :: !(Range),name_Kind_Constructor :: !(Name)} | Kind_Parenthesized {range_Kind_Parenthesized :: !(Range),kind_Kind_Parenthesized :: !(Kind)} | Kind_Variable {range_Kind_Variable :: !(Range),name_Kind_Variable :: !(Name)} | Kind_Forall {range_Kind_Forall :: !(Range),kindvariables_Kind_Forall :: !(Names),kind_Kind_Forall :: !(Kind)} | Kind_Annotate {range_Kind_Annotate :: !(Range),annotation_Kind_Annotate :: !(KindAnnotation),kind_Kind_Annotate :: !(Kind)} -- KindAnnotation ---------------------------------------------- data KindAnnotation = KindAnnotation_Empty {} -- Kinds ------------------------------------------------------- type Kinds = [Kind] -- LeftHandSide ------------------------------------------------ data LeftHandSide = LeftHandSide_Function {range_LeftHandSide_Function :: !(Range),name_LeftHandSide_Function :: !(Name),patterns_LeftHandSide_Function :: !(Patterns)} | LeftHandSide_Infix {range_LeftHandSide_Infix :: !(Range),leftPattern_LeftHandSide_Infix :: !(Pattern),operator_LeftHandSide_Infix :: !(Name),rightPattern_LeftHandSide_Infix :: !(Pattern)} | LeftHandSide_Parenthesized {range_LeftHandSide_Parenthesized :: !(Range),lefthandside_LeftHandSide_Parenthesized :: !(LeftHandSide),patterns_LeftHandSide_Parenthesized :: !(Patterns)} | LeftHandSide_Typed {range_LeftHandSide_Typed :: !(Range),lefthandside_LeftHandSide_Typed :: !(LeftHandSide),type_LeftHandSide_Typed :: !(Type)} -- Literal ----------------------------------------------------- data Literal = Literal_Int {range_Literal_Int :: !(Range),base_Literal_Int :: !(Int),value_Literal_Int :: !(String)} | Literal_Char {range_Literal_Char :: !(Range),value_Literal_Char :: !(String)} | Literal_String {range_Literal_String :: !(Range),value_Literal_String :: !(String)} | Literal_Float {range_Literal_Float :: !(Range),value_Literal_Float :: !(String)} -- MaybeDeclarations ------------------------------------------- type MaybeDeclarations = Maybe (Declarations) -- MaybeExports ------------------------------------------------ type MaybeExports = Maybe (Exports) -- MaybeExpression --------------------------------------------- type MaybeExpression = Maybe (Expression) -- MaybeImportSpecification ------------------------------------ type MaybeImportSpecification = Maybe (ImportSpecification) -- MaybeType --------------------------------------------------- type MaybeType = Maybe (Type) -- Module ------------------------------------------------------ data Module = Module_Module {range_Module_Module :: !(Range),name_Module_Module :: !(MaybeName),fileheaderpragmas_Module_Module :: !(Pragmas),exports_Module_Module :: !(MaybeExports),body_Module_Module :: !(Body)} -- Pattern ----------------------------------------------------- data Pattern = Pattern_Literal {range_Pattern_Literal :: !(Range),sign_Pattern_Literal :: !(Int),literal_Pattern_Literal :: !(Literal)} | Pattern_Variable {range_Pattern_Variable :: !(Range),name_Pattern_Variable :: !(Name)} | Pattern_Constructor {range_Pattern_Constructor :: !(Range),name_Pattern_Constructor :: !(Name),patterns_Pattern_Constructor :: !(Patterns)} | Pattern_Parenthesized {range_Pattern_Parenthesized :: !(Range),pattern_Pattern_Parenthesized :: !(Pattern)} | Pattern_As {range_Pattern_As :: !(Range),name_Pattern_As :: !(Name),pattern_Pattern_As :: !(Pattern)} | Pattern_Wildcard {range_Pattern_Wildcard :: !(Range)} | Pattern_Tuple {range_Pattern_Tuple :: !(Range),arity_Pattern_Tuple :: !(Int),patterns_Pattern_Tuple :: !(Patterns)} | Pattern_Annotate {range_Pattern_Annotate :: !(Range),annotation_Pattern_Annotate :: !(PatternAnnotation),pattern_Pattern_Annotate :: !(Pattern)} | Pattern_Typed {range_Pattern_Typed :: !(Range),pattern_Pattern_Typed :: !(Pattern),type_Pattern_Typed :: !(Type)} | Pattern_InfixConstructor {range_Pattern_InfixConstructor :: !(Range),leftPattern_Pattern_InfixConstructor :: !(Pattern),constructorOperator_Pattern_InfixConstructor :: !(Name),rightPattern_Pattern_InfixConstructor :: !(Pattern)} | Pattern_List {range_Pattern_List :: !(Range),patterns_Pattern_List :: !(Patterns)} | Pattern_Record {range_Pattern_Record :: !(Range),name_Pattern_Record :: !(Name),recordPatternBindings_Pattern_Record :: !(RecordPatternBindings)} | Pattern_RowRecordBinding {range_Pattern_RowRecordBinding :: !(Range),pattern_Pattern_RowRecordBinding :: !(Pattern),rowRecordPattternBindings_Pattern_RowRecordBinding :: !(RowRecordPatternBindings)} | Pattern_RowRecordEmpty {range_Pattern_RowRecordEmpty :: !(Range)} | Pattern_Irrefutable {range_Pattern_Irrefutable :: !(Range),pattern_Pattern_Irrefutable :: !(Pattern)} | Pattern_Bang {range_Pattern_Bang :: !(Range),pattern_Pattern_Bang :: !(Pattern)} -- PatternAnnotation ------------------------------------------- data PatternAnnotation = PatternAnnotation_Empty {} -- Patterns ---------------------------------------------------- type Patterns = [Pattern] -- Pragma ------------------------------------------------------ data Pragma = Pragma_Language {range_Pragma_Language :: !(Range),pragmas_Pragma_Language :: !(Names)} | Pragma_OptionsUHC {range_Pragma_OptionsUHC :: !(Range),options_Pragma_OptionsUHC :: !(String)} | Pragma_Derivable {range_Pragma_Derivable :: !(Range),className_Pragma_Derivable :: !(Name),fieldName_Pragma_Derivable :: !(Name),defaultName_Pragma_Derivable :: !(Name)} | Pragma_ExcludeIfTarget {range_Pragma_ExcludeIfTarget :: !(Range),targetNames_Pragma_ExcludeIfTarget :: !(([String]))} | Pragma_CHR {range_Pragma_CHR :: !(Range),chrRules_Pragma_CHR :: !(String)} -- Pragmas ----------------------------------------------------- type Pragmas = [Pragma] -- Qualifier --------------------------------------------------- data Qualifier = Qualifier_Guard {range_Qualifier_Guard :: !(Range),guard_Qualifier_Guard :: !(Expression)} | Qualifier_Let {range_Qualifier_Let :: !(Range),declarations_Qualifier_Let :: !(Declarations)} | Qualifier_Generator {range_Qualifier_Generator :: !(Range),pattern_Qualifier_Generator :: !(Pattern),expression_Qualifier_Generator :: !(Expression)} | Qualifier_Empty {range_Qualifier_Empty :: !(Range)} -- Qualifiers -------------------------------------------------- type Qualifiers = [Qualifier] -- RecordExpressionBinding ------------------------------------- data RecordExpressionBinding = RecordExpressionBinding_Binding {range_RecordExpressionBinding_Binding :: !(Range),name_RecordExpressionBinding_Binding :: !(Name),expression_RecordExpressionBinding_Binding :: !(Expression)} -- RecordExpressionBindings ------------------------------------ type RecordExpressionBindings = [RecordExpressionBinding] -- RecordPatternBinding ---------------------------------------- data RecordPatternBinding = RecordPatternBinding_Binding {range_RecordPatternBinding_Binding :: !(Range),name_RecordPatternBinding_Binding :: !(Name),pattern_RecordPatternBinding_Binding :: !(Pattern)} | RecordPatternBinding_Pun {range_RecordPatternBinding_Pun :: !(Range),name_RecordPatternBinding_Pun :: !(Name)} -- RecordPatternBindings --------------------------------------- type RecordPatternBindings = [RecordPatternBinding] -- RightHandSide ----------------------------------------------- data RightHandSide = RightHandSide_Expression {range_RightHandSide_Expression :: !(Range),expression_RightHandSide_Expression :: !(Expression),where_RightHandSide_Expression :: !(MaybeDeclarations)} | RightHandSide_Guarded {range_RightHandSide_Guarded :: !(Range),guardedexpressions_RightHandSide_Guarded :: !(GuardedExpressions),where_RightHandSide_Guarded :: !(MaybeDeclarations)} -- RowRecordExpressionUpdate ----------------------------------- data RowRecordExpressionUpdate = RowRecordExpressionUpdate_Update {range_RowRecordExpressionUpdate_Update :: !(Range),name_RowRecordExpressionUpdate_Update :: !(Name),expression_RowRecordExpressionUpdate_Update :: !(Expression)} | RowRecordExpressionUpdate_Extends {range_RowRecordExpressionUpdate_Extends :: !(Range),name_RowRecordExpressionUpdate_Extends :: !(MaybeName),expression_RowRecordExpressionUpdate_Extends :: !(Expression)} -- RowRecordExpressionUpdates ---------------------------------- type RowRecordExpressionUpdates = [RowRecordExpressionUpdate] -- RowRecordPatternBinding ------------------------------------- data RowRecordPatternBinding = RowRecordPatternBinding_Binding {range_RowRecordPatternBinding_Binding :: !(Range),name_RowRecordPatternBinding_Binding :: !(MaybeName),pattern_RowRecordPatternBinding_Binding :: !(Pattern)} -- RowRecordPatternBindings ------------------------------------ type RowRecordPatternBindings = [RowRecordPatternBinding] -- RowTypeUpdate ----------------------------------------------- data RowTypeUpdate = RowTypeUpdate_Extends {range_RowTypeUpdate_Extends :: !(Range),name_RowTypeUpdate_Extends :: !(MaybeName),type_RowTypeUpdate_Extends :: !(Type)} -- RowTypeUpdates ---------------------------------------------- type RowTypeUpdates = [RowTypeUpdate] -- Statement --------------------------------------------------- data Statement = Statement_Expression {range_Statement_Expression :: !(Range),expression_Statement_Expression :: !(Expression)} | Statement_Let {range_Statement_Let :: !(Range),declarations_Statement_Let :: !(Declarations)} | Statement_Generator {range_Statement_Generator :: !(Range),pattern_Statement_Generator :: !(Pattern),expression_Statement_Generator :: !(Expression)} | Statement_Empty {range_Statement_Empty :: !(Range)} -- Statements -------------------------------------------------- type Statements = [Statement] -- Strings ----------------------------------------------------- type Strings = [(String)] -- Type -------------------------------------------------------- data Type = Type_NormalApplication {range_Type_NormalApplication :: !(Range),function_Type_NormalApplication :: !(Type),arguments_Type_NormalApplication :: !(Types)} | Type_InfixApplication {range_Type_InfixApplication :: !(Range),leftType_Type_InfixApplication :: !(Type),operator_Type_InfixApplication :: !(Type),rightType_Type_InfixApplication :: !(Type)} | Type_InfixApplicationChainTop {range_Type_InfixApplicationChainTop :: !(Range),type_Type_InfixApplicationChainTop :: !(Type)} | Type_Constructor {range_Type_Constructor :: !(Range),name_Type_Constructor :: !(Name)} | Type_Parenthesized {range_Type_Parenthesized :: !(Range),type_Type_Parenthesized :: !(Type)} | Type_SectionApplication {range_Type_SectionApplication :: !(Range),leftType_Type_SectionApplication :: !(MaybeType),operator_Type_SectionApplication :: !(Type),rightType_Type_SectionApplication :: !(MaybeType)} | Type_Annotate {range_Type_Annotate :: !(Range),annotation_Type_Annotate :: !(TypeAnnotation),type_Type_Annotate :: !(Type)} | Type_Wildcard {range_Type_Wildcard :: !(Range)} | Type_MonoWildcard {range_Type_MonoWildcard :: !(Range)} | Type_Variable {range_Type_Variable :: !(Range),name_Type_Variable :: !(Name)} | Type_NamedWildcard {range_Type_NamedWildcard :: !(Range),name_Type_NamedWildcard :: !(Name)} | Type_Forall {range_Type_Forall :: !(Range),typevariables_Type_Forall :: !(Names),type_Type_Forall :: !(Type)} | Type_Exists {range_Type_Exists :: !(Range),typevariables_Type_Exists :: !(Names),type_Type_Exists :: !(Type)} | Type_RowUpdate {range_Type_RowUpdate :: !(Range),type_Type_RowUpdate :: !(Type),rowTypeUpdates_Type_RowUpdate :: !(RowTypeUpdates)} | Type_RowEmpty {range_Type_RowEmpty :: !(Range)} | Type_RowRecUpdate {range_Type_RowRecUpdate :: !(Range),type_Type_RowRecUpdate :: !(Type),rowTypeUpdates_Type_RowRecUpdate :: !(RowTypeUpdates)} | Type_RowRecEmpty {range_Type_RowRecEmpty :: !(Range)} | Type_RowSumUpdate {range_Type_RowSumUpdate :: !(Range),type_Type_RowSumUpdate :: !(Type),rowTypeUpdates_Type_RowSumUpdate :: !(RowTypeUpdates)} | Type_RowSumEmpty {range_Type_RowSumEmpty :: !(Range)} | Type_Qualified {range_Type_Qualified :: !(Range),context_Type_Qualified :: !(ContextItems),type_Type_Qualified :: !(Type)} | Type_TupleConstructor {range_Type_TupleConstructor :: !(Range),arity_Type_TupleConstructor :: !(Int)} -- TypeAnnotation ---------------------------------------------- data TypeAnnotation = TypeAnnotation_Strict {} | TypeAnnotation_AnnotationName {name_TypeAnnotation_AnnotationName :: !(Name)} | TypeAnnotation_AnnotationVar {name_TypeAnnotation_AnnotationVar :: !(Name),var_TypeAnnotation_AnnotationVar :: !(Name)} -- TypeLeftHandSide -------------------------------------------- data TypeLeftHandSide = TypeLeftHandSide_Function {range_TypeLeftHandSide_Function :: !(Range),name_TypeLeftHandSide_Function :: !(Name),patterns_TypeLeftHandSide_Function :: !(TypePatterns)} | TypeLeftHandSide_Infix {range_TypeLeftHandSide_Infix :: !(Range),leftPattern_TypeLeftHandSide_Infix :: !(TypePattern),operator_TypeLeftHandSide_Infix :: !(Name),rightPattern_TypeLeftHandSide_Infix :: !(TypePattern)} | TypeLeftHandSide_Parenthesized {range_TypeLeftHandSide_Parenthesized :: !(Range),lefthandside_TypeLeftHandSide_Parenthesized :: !(TypeLeftHandSide),patterns_TypeLeftHandSide_Parenthesized :: !(TypePatterns)} -- TypePattern ------------------------------------------------- data TypePattern = TypePattern_Variable {range_TypePattern_Variable :: !(Range),name_TypePattern_Variable :: !(Name)} -- TypePatterns ------------------------------------------------ type TypePatterns = [TypePattern] -- Types ------------------------------------------------------- type Types = [Type]