-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Haskell AST for efficient tooling
--   
--   A representation of a Haskell Syntax tree that contain source-related
--   and semantic annotations. These annotations help developer tools to
--   work with the defined program. The source information enables
--   refactoring and program transformation tools to change the source code
--   without losing the original format (layout, comments) of the source.
--   Semantic information helps analyzing the program. The representation
--   is different from the GHC's syntax tree. It contains information from
--   all representations in GHC (different version of syntax trees, lexical
--   and module-level information). The module is split up to put the
--   representation of different language elements into different modules.
--   Additionally, it contains the representation of semantic and source
--   annotations, helper functions and generated instances for the
--   representation of language elements. Because langauge elements may
--   refer each other (there can be a pattern inside an expression in case
--   of a pattern match and an expression inside a pattern if view patterns
--   are enabled), we use hs-boot files to break up dependency cycles.
@package haskell-tools-ast
@version 0.8.0.0

module Language.Haskell.Tools.AST.SemaInfoTypes

-- | Semantic info type for any node not carrying additional semantic
--   information
data NoSemanticInfo

-- | Info for expressions that tells which definitions are in scope
data ScopeInfo

-- | Info corresponding to a name
data NameInfo n

-- | Info corresponding to a name that is correctly identified
data CNameInfo

-- | Info for the module element
data ModuleInfo n

-- | Info corresponding to an import declaration
data ImportInfo n

-- | Info corresponding to an record-wildcard
data ImplicitFieldInfo
type Scope = [[(Name, Maybe [UsageSpec])]]
data UsageSpec
UsageSpec :: Bool -> String -> String -> UsageSpec
[usageQualified] :: UsageSpec -> Bool
[usageQualifier] :: UsageSpec -> String
[usageAs] :: UsageSpec -> String
exprScopedLocals :: Lens ScopeInfo ScopeInfo Scope Scope
nameScopedLocals :: forall n_aslE. Lens (NameInfo n_aslE) (NameInfo n_aslE) Scope Scope
nameIsDefined :: forall n_aslE. Lens (NameInfo n_aslE) (NameInfo n_aslE) Bool Bool
nameInfo :: forall n_aslE n'_axbb. Partial (NameInfo n_aslE) (NameInfo n'_axbb) n_aslE n'_axbb
ambiguousName :: forall n_aslE. Partial (NameInfo n_aslE) (NameInfo n_aslE) RdrName RdrName
nameLocation :: forall n_aslE. Partial (NameInfo n_aslE) (NameInfo n_aslE) SrcSpan SrcSpan
implicitName :: forall n_aslE. Partial (NameInfo n_aslE) (NameInfo n_aslE) String String
cnameScopedLocals :: Lens CNameInfo CNameInfo Scope Scope
cnameIsDefined :: Lens CNameInfo CNameInfo Bool Bool
cnameInfo :: Lens CNameInfo CNameInfo Id Id
cnameFixity :: Lens CNameInfo CNameInfo (Maybe Fixity) (Maybe Fixity)
defModuleName :: forall n_aslD. Lens (ModuleInfo n_aslD) (ModuleInfo n_aslD) Module Module
defDynFlags :: forall n_aslD. Lens (ModuleInfo n_aslD) (ModuleInfo n_aslD) DynFlags DynFlags
defIsBootModule :: forall n_aslD. Lens (ModuleInfo n_aslD) (ModuleInfo n_aslD) Bool Bool
implicitNames :: forall n_aslD n'_axpG. Lens (ModuleInfo n_aslD) (ModuleInfo n'_axpG) [n_aslD] [n'_axpG]
importedModule :: forall n_aslC. Lens (ImportInfo n_aslC) (ImportInfo n_aslC) Module Module
availableNames :: forall n_aslC. Lens (ImportInfo n_aslC) (ImportInfo n_aslC) [n_aslC] [n_aslC]
importedNames :: forall n_aslC. Lens (ImportInfo n_aslC) (ImportInfo n_aslC) [n_aslC] [n_aslC]
implicitFieldBindings :: Lens ImplicitFieldInfo ImplicitFieldInfo [(Name, Name)] [(Name, Name)]
importedOrphanInsts :: forall n_aslC. Lens (ImportInfo n_aslC) (ImportInfo n_aslC) [ClsInst] [ClsInst]
importedFamInsts :: forall n_aslC. Lens (ImportInfo n_aslC) (ImportInfo n_aslC) [FamInst] [FamInst]
prelOrphanInsts :: forall n_aslD. Lens (ModuleInfo n_aslD) (ModuleInfo n_aslD) [ClsInst] [ClsInst]
prelFamInsts :: forall n_aslD. Lens (ModuleInfo n_aslD) (ModuleInfo n_aslD) [FamInst] [FamInst]
mkNoSemanticInfo :: NoSemanticInfo

-- | Creates the information about the definitions in scope
mkScopeInfo :: Scope -> ScopeInfo

-- | Creates semantic information for an unambiguous name
mkNameInfo :: Scope -> Bool -> n -> NameInfo n

-- | Creates semantic information for a name that is ambiguous because the
--   lack of type info
mkAmbiguousNameInfo :: Scope -> Bool -> RdrName -> SrcSpan -> NameInfo n

-- | Creates semantic information for an implicit name
mkImplicitNameInfo :: Scope -> Bool -> String -> SrcSpan -> NameInfo n

-- | Create a typed name semantic information
mkCNameInfo :: Scope -> Bool -> Id -> Maybe Fixity -> CNameInfo

-- | Creates semantic information for the module element
mkModuleInfo :: Module -> DynFlags -> Bool -> [n] -> [ClsInst] -> [FamInst] -> ModuleInfo n

-- | Creates semantic information for an import declaration
mkImportInfo :: Module -> [n] -> [n] -> [ClsInst] -> [FamInst] -> ImportInfo n

-- | Creates semantic information for a wildcard field binding
mkImplicitFieldInfo :: [(Name, Name)] -> ImplicitFieldInfo
instance GHC.Base.Functor Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo
instance GHC.Base.Functor Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo
instance GHC.Base.Functor Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo
instance Data.Foldable.Foldable Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo
instance Data.Foldable.Foldable Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo
instance Data.Foldable.Foldable Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo
instance Data.Traversable.Traversable Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo
instance Data.Traversable.Traversable Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo
instance Data.Traversable.Traversable Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo
instance Data.Data.Data Language.Haskell.Tools.AST.SemaInfoTypes.ImplicitFieldInfo
instance GHC.Classes.Eq Language.Haskell.Tools.AST.SemaInfoTypes.ImplicitFieldInfo
instance Data.Data.Data n => Data.Data.Data (Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo n)
instance Data.Data.Data n => Data.Data.Data (Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo n)
instance Data.Data.Data Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance GHC.Classes.Eq Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Data.Data.Data n => Data.Data.Data (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance GHC.Classes.Eq n => GHC.Classes.Eq (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance Data.Data.Data Language.Haskell.Tools.AST.SemaInfoTypes.ScopeInfo
instance GHC.Classes.Eq Language.Haskell.Tools.AST.SemaInfoTypes.ScopeInfo
instance Data.Data.Data Language.Haskell.Tools.AST.SemaInfoTypes.NoSemanticInfo
instance GHC.Classes.Eq Language.Haskell.Tools.AST.SemaInfoTypes.NoSemanticInfo
instance Data.Data.Data Language.Haskell.Tools.AST.SemaInfoTypes.UsageSpec
instance GHC.Classes.Eq Language.Haskell.Tools.AST.SemaInfoTypes.UsageSpec
instance Data.Data.Data FamInstEnv.FamInst
instance Data.Data.Data FamInstEnv.FamFlavor
instance Outputable.Outputable Language.Haskell.Tools.AST.SemaInfoTypes.UsageSpec
instance Data.Data.Data DynFlags.DynFlags
instance GHC.Show.Show Language.Haskell.Tools.AST.SemaInfoTypes.ScopeInfo
instance Outputable.Outputable n => GHC.Show.Show (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance GHC.Show.Show Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Outputable.Outputable n => GHC.Show.Show (Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo n)
instance Outputable.Outputable n => GHC.Show.Show (Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo n)
instance GHC.Show.Show Language.Haskell.Tools.AST.SemaInfoTypes.ImplicitFieldInfo
instance GHC.Show.Show Language.Haskell.Tools.AST.SemaInfoTypes.NoSemanticInfo


-- | Parts of AST representation for keeping extra data
module Language.Haskell.Tools.AST.Ann

-- | A stage in which the nodes are marked with the ranges in the source
--   files which contain the source code of the given AST element.
data RangeStage

-- | A stage in which the nodes are still marked with ranges, but these
--   ranges are normalized. Optional and list elements also have ranges in
--   that state.
data NormRangeStage

-- | A stage in which AST elements are marked with templates. These
--   templates are hierarchical, and contain the places of the children
--   elements of the node.
data RngTemplateStage

-- | A stage where the annotation controls how the original source code can
--   be retrieved from the AST. A source template is assigned to each node.
--   It has holes where the content of an other node should be printed and
--   ranges for the source code of the node.
data SrcTemplateStage

-- | With this domain, semantic information can be parameterized. In
--   practice it is only used if the compilation cannot proceed past the
--   type checking phase.
data Dom name
data IdDom
type SemanticInfo (domain :: *) (node :: * -> * -> *) = SemanticInfo' domain (SemaInfoClassify node)
data SameInfoNameCls
data SameInfoExprCls
data SameInfoImportCls
data SameInfoModuleCls
data SameInfoDefaultCls
data SameInfoWildcardCls

-- | Class for domain configuration markers
class (Typeable d, Data d, SemanticInfo' d SameInfoDefaultCls ~ NoSemanticInfo, Data (SemanticInfo' d SameInfoNameCls), Data (SemanticInfo' d SameInfoExprCls), Data (SemanticInfo' d SameInfoImportCls), Data (SemanticInfo' d SameInfoModuleCls), Data (SemanticInfo' d SameInfoWildcardCls), Show (SemanticInfo' d SameInfoNameCls), Show (SemanticInfo' d SameInfoExprCls), Show (SemanticInfo' d SameInfoImportCls), Show (SemanticInfo' d SameInfoModuleCls), Show (SemanticInfo' d SameInfoWildcardCls)) => Domain d

-- | A semantic domain for the AST. The semantic domain maps semantic
--   information for the different types of nodes in the AST. The kind of
--   semantic domain for an AST depends on which stages of the compilation
--   did it pass. However after transforming the GHC representation to our
--   AST, the domain keeps the same. The domain is not applied to the AST
--   elements that are generated while refactoring.
class (Data (SemanticInfo' d (SemaInfoClassify e)), Show (SemanticInfo' d (SemaInfoClassify e)), Domain d) => DomainWith e d

-- | Extracts or modifies the concrete range corresponding to a given
--   source info. In case of lists and optional elements, it may not
--   contain the elements inside.
class HasRange a
getRange :: HasRange a => a -> SrcSpan
setRange :: HasRange a => SrcSpan -> a -> a

-- | Class for source information stages
class (Typeable stage, Data stage, Data (SpanInfo stage), Data (ListInfo stage), Data (OptionalInfo stage), Show (SpanInfo stage), Show (ListInfo stage), Show (OptionalInfo stage), HasRange (SpanInfo stage), HasRange (ListInfo stage), HasRange (OptionalInfo stage)) => SourceInfo stage where data SpanInfo stage :: * data ListInfo stage :: * data OptionalInfo stage :: * where {
    data family SpanInfo stage :: *;
    data family ListInfo stage :: *;
    data family OptionalInfo stage :: *;
}

-- | A short form of showing a range, without file name, for debugging
--   purposes.
shortShowSpan :: SrcSpan -> String

-- | A short form of showing a range, without file name, for debugging
--   purposes.
shortShowLoc :: SrcLoc -> String

-- | A class for marking a source information stage. All programs,
--   regardless of correct Haskell programs or not, must go through these
--   stages to be refactored.
class SourceInfo stage => RangeInfo stage
nodeSpan :: RangeInfo stage => Simple Lens (SpanInfo stage) SrcSpan
listPos :: RangeInfo stage => Simple Lens (ListInfo stage) SrcLoc
optionalPos :: RangeInfo stage => Simple Lens (OptionalInfo stage) SrcLoc

-- | Semantic and source code related information for an AST node.
data NodeInfo sema src
NodeInfo :: sema -> src -> NodeInfo sema src
[_semanticInfo] :: NodeInfo sema src -> sema
[_sourceInfo] :: NodeInfo sema src -> src
sourceInfo :: forall sema_a1abN src_a1abO src'_a1bLa. Lens (NodeInfo sema_a1abN src_a1abO) (NodeInfo sema_a1abN src'_a1bLa) src_a1abO src'_a1bLa
semanticInfo :: forall sema_a1abN src_a1abO sema'_a1bL7. Lens (NodeInfo sema_a1abN src_a1abO) (NodeInfo sema'_a1bL7 src_a1abO) sema_a1abN sema'_a1bL7

-- | An element of the AST keeping extra information.
data Ann elem dom stage
Ann :: NodeInfo (SemanticInfo dom elem) (SpanInfo stage) -> elem dom stage -> Ann elem dom stage

-- | The extra information for the AST part
[_annotation] :: Ann elem dom stage -> NodeInfo (SemanticInfo dom elem) (SpanInfo stage)

-- | The original AST part
[_element] :: Ann elem dom stage -> elem dom stage
element :: forall elem_a1bLj dom_a1bLk stage_a1bLl. Lens (Ann elem_a1bLj dom_a1bLk stage_a1bLl) (Ann elem_a1bLj dom_a1bLk stage_a1bLl) (elem_a1bLj dom_a1bLk stage_a1bLl) (elem_a1bLj dom_a1bLk stage_a1bLl)
annotation :: forall elem_a1bLj dom_a1bLk stage_a1bLl. Lens (Ann elem_a1bLj dom_a1bLk stage_a1bLl) (Ann elem_a1bLj dom_a1bLk stage_a1bLl) (NodeInfo (SemanticInfo dom_a1bLk elem_a1bLj) (SpanInfo stage_a1bLl)) (NodeInfo (SemanticInfo dom_a1bLk elem_a1bLj) (SpanInfo stage_a1bLl))

-- | A list of AST elements
data AnnListG elem dom stage
AnnListG :: NodeInfo (SemanticInfo dom (AnnListG elem)) (ListInfo stage) -> [Ann elem dom stage] -> AnnListG elem dom stage
[_annListAnnot] :: AnnListG elem dom stage -> NodeInfo (SemanticInfo dom (AnnListG elem)) (ListInfo stage)
[_annListElems] :: AnnListG elem dom stage -> [Ann elem dom stage]
annListElems :: forall elem_a1bNQ dom_a1bNR stage_a1bNS. Lens (AnnListG elem_a1bNQ dom_a1bNR stage_a1bNS) (AnnListG elem_a1bNQ dom_a1bNR stage_a1bNS) [Ann elem_a1bNQ dom_a1bNR stage_a1bNS] [Ann elem_a1bNQ dom_a1bNR stage_a1bNS]
annListAnnot :: forall elem_a1bNQ dom_a1bNR stage_a1bNS. Lens (AnnListG elem_a1bNQ dom_a1bNR stage_a1bNS) (AnnListG elem_a1bNQ dom_a1bNR stage_a1bNS) (NodeInfo (SemanticInfo dom_a1bNR (AnnListG elem_a1bNQ)) (ListInfo stage_a1bNS)) (NodeInfo (SemanticInfo dom_a1bNR (AnnListG elem_a1bNQ)) (ListInfo stage_a1bNS))
annList :: Traversal (AnnListG e d s) (AnnListG e d s) (Ann e d s) (Ann e d s)

-- | An optional AST element
data AnnMaybeG elem dom stage
AnnMaybeG :: NodeInfo (SemanticInfo dom (AnnMaybeG elem)) (OptionalInfo stage) -> Maybe (Ann elem dom stage) -> AnnMaybeG elem dom stage
[_annMaybeAnnot] :: AnnMaybeG elem dom stage -> NodeInfo (SemanticInfo dom (AnnMaybeG elem)) (OptionalInfo stage)
[_annMaybe] :: AnnMaybeG elem dom stage -> Maybe (Ann elem dom stage)
annMaybeAnnot :: forall elem_a1bQu dom_a1bQv stage_a1bQw. Lens (AnnMaybeG elem_a1bQu dom_a1bQv stage_a1bQw) (AnnMaybeG elem_a1bQu dom_a1bQv stage_a1bQw) (NodeInfo (SemanticInfo dom_a1bQv (AnnMaybeG elem_a1bQu)) (OptionalInfo stage_a1bQw)) (NodeInfo (SemanticInfo dom_a1bQv (AnnMaybeG elem_a1bQu)) (OptionalInfo stage_a1bQw))
annMaybe :: forall elem_a1bQu dom_a1bQv stage_a1bQw. Lens (AnnMaybeG elem_a1bQu dom_a1bQv stage_a1bQw) (AnnMaybeG elem_a1bQu dom_a1bQv stage_a1bQw) (Maybe (Ann elem_a1bQu dom_a1bQv stage_a1bQw)) (Maybe (Ann elem_a1bQu dom_a1bQv stage_a1bQw))
class HasSourceInfo e where type SourceInfoType e :: * where {
    type family SourceInfoType e :: *;
}
srcInfo :: HasSourceInfo e => Simple Lens e (SourceInfoType e)
annJust :: Partial (AnnMaybeG e d s) (AnnMaybeG e d s) (Ann e d s) (Ann e d s)

-- | An empty list of AST elements
annNil :: NodeInfo (SemanticInfo d (AnnListG e)) (ListInfo s) -> AnnListG e d s
isAnnNothing :: AnnMaybeG e d s -> Bool
isAnnJust :: AnnMaybeG e d s -> Bool
annLength :: AnnListG e d s -> Int

-- | A non-existing AST part
annNothing :: NodeInfo (SemanticInfo d (AnnMaybeG e)) (OptionalInfo s) -> AnnMaybeG e d s

-- | A class for changing semantic information throught the AST.
class ApplySemaChange cls
appSemaChange :: ApplySemaChange cls => SemaTrf f dom1 dom2 -> SemanticInfo' dom1 cls -> f (SemanticInfo' dom2 cls)

-- | A class for traversing semantic information in an AST
class ApplySemaChange (SemaInfoClassify a) => SemanticTraversal a
semaTraverse :: (SemanticTraversal a, Monad f) => SemaTrf f dom1 dom2 -> a dom1 st -> f (a dom2 st)

-- | A transformation on the possible semantic informations for a given
--   domain
data SemaTrf f dom1 dom2
SemaTrf :: (SemanticInfo' dom1 SameInfoNameCls -> f (SemanticInfo' dom2 SameInfoNameCls)) -> (SemanticInfo' dom1 SameInfoExprCls -> f (SemanticInfo' dom2 SameInfoExprCls)) -> (SemanticInfo' dom1 SameInfoImportCls -> f (SemanticInfo' dom2 SameInfoImportCls)) -> (SemanticInfo' dom1 SameInfoModuleCls -> f (SemanticInfo' dom2 SameInfoModuleCls)) -> (SemanticInfo' dom1 SameInfoWildcardCls -> f (SemanticInfo' dom2 SameInfoWildcardCls)) -> (SemanticInfo' dom1 SameInfoDefaultCls -> f (SemanticInfo' dom2 SameInfoDefaultCls)) -> SemaTrf f dom1 dom2
[trfSemaNameCls] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoNameCls -> f (SemanticInfo' dom2 SameInfoNameCls)
[trfSemaExprCls] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoExprCls -> f (SemanticInfo' dom2 SameInfoExprCls)
[trfSemaImportCls] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoImportCls -> f (SemanticInfo' dom2 SameInfoImportCls)
[trfSemaModuleCls] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoModuleCls -> f (SemanticInfo' dom2 SameInfoModuleCls)
[trfSemaWildcardCls] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoWildcardCls -> f (SemanticInfo' dom2 SameInfoWildcardCls)
[trfSemaDefault] :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 SameInfoDefaultCls -> f (SemanticInfo' dom2 SameInfoDefaultCls)

-- | A class for traversing source information in an AST
class SourceInfoTraversal a
sourceInfoTraverseUp :: (SourceInfoTraversal a, Monad f) => SourceInfoTrf f st1 st2 -> f () -> f () -> a dom st1 -> f (a dom st2)
sourceInfoTraverseDown :: (SourceInfoTraversal a, Monad f) => SourceInfoTrf f st1 st2 -> f () -> f () -> a dom st1 -> f (a dom st2)
sourceInfoTraverse :: (SourceInfoTraversal a, Monad f) => SourceInfoTrf f st1 st2 -> a dom st1 -> f (a dom st2)

-- | A transformation on the possible source informations
data SourceInfoTrf f st1 st2
SourceInfoTrf :: (SpanInfo st1 -> f (SpanInfo st2)) -> (ListInfo st1 -> f (ListInfo st2)) -> (OptionalInfo st1 -> f (OptionalInfo st2)) -> SourceInfoTrf f st1 st2
[trfSpanInfo] :: SourceInfoTrf f st1 st2 -> SpanInfo st1 -> f (SpanInfo st2)
[trfListInfo] :: SourceInfoTrf f st1 st2 -> ListInfo st1 -> f (ListInfo st2)
[trfOptionalInfo] :: SourceInfoTrf f st1 st2 -> OptionalInfo st1 -> f (OptionalInfo st2)
instance Language.Haskell.Tools.AST.Ann.HasSourceInfo (Language.Haskell.Tools.AST.Ann.Ann elem dom stage)
instance Language.Haskell.Tools.AST.Ann.HasSourceInfo (Language.Haskell.Tools.AST.Ann.AnnListG elem dom stage)
instance Language.Haskell.Tools.AST.Ann.HasSourceInfo (Language.Haskell.Tools.AST.Ann.AnnMaybeG elem dom stage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Language.Haskell.Tools.AST.Ann.SourceInfo stage => Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.Ann elem dom stage)
instance Language.Haskell.Tools.AST.Ann.SourceInfo stage => Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.AnnListG elem dom stage)
instance Language.Haskell.Tools.AST.Ann.SourceInfo stage => Language.Haskell.Tools.AST.Ann.HasRange (Language.Haskell.Tools.AST.Ann.AnnMaybeG elem dom stage)
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoNameCls
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoExprCls
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoImportCls
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoModuleCls
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoWildcardCls
instance Language.Haskell.Tools.AST.Ann.ApplySemaChange Language.Haskell.Tools.AST.Ann.SameInfoDefaultCls
instance (Language.Haskell.Tools.AST.Ann.ApplySemaChange (Language.Haskell.Tools.AST.Ann.SemaInfoClassify e), Language.Haskell.Tools.AST.Ann.SemanticTraversal e) => Language.Haskell.Tools.AST.Ann.SemanticTraversal (Language.Haskell.Tools.AST.Ann.Ann e)
instance (Language.Haskell.Tools.AST.Ann.ApplySemaChange (Language.Haskell.Tools.AST.Ann.SemaInfoClassify e), Language.Haskell.Tools.AST.Ann.SemanticTraversal e) => Language.Haskell.Tools.AST.Ann.SemanticTraversal (Language.Haskell.Tools.AST.Ann.AnnListG e)
instance (Language.Haskell.Tools.AST.Ann.ApplySemaChange (Language.Haskell.Tools.AST.Ann.SemaInfoClassify e), Language.Haskell.Tools.AST.Ann.SemanticTraversal e) => Language.Haskell.Tools.AST.Ann.SemanticTraversal (Language.Haskell.Tools.AST.Ann.AnnMaybeG e)
instance Language.Haskell.Tools.AST.Ann.SourceInfoTraversal e => Language.Haskell.Tools.AST.Ann.SourceInfoTraversal (Language.Haskell.Tools.AST.Ann.Ann e)
instance Language.Haskell.Tools.AST.Ann.SourceInfoTraversal e => Language.Haskell.Tools.AST.Ann.SourceInfoTraversal (Language.Haskell.Tools.AST.Ann.AnnListG e)
instance Language.Haskell.Tools.AST.Ann.SourceInfoTraversal e => Language.Haskell.Tools.AST.Ann.SourceInfoTraversal (Language.Haskell.Tools.AST.Ann.AnnMaybeG e)
instance (Data.Data.Data src, Data.Data.Data sema) => Data.Data.Data (Language.Haskell.Tools.AST.Ann.NodeInfo sema src)
instance (GHC.Show.Show src, GHC.Show.Show sema) => GHC.Show.Show (Language.Haskell.Tools.AST.Ann.NodeInfo sema src)
instance (GHC.Classes.Eq src, GHC.Classes.Eq sema) => GHC.Classes.Eq (Language.Haskell.Tools.AST.Ann.NodeInfo sema src)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Data.Data.Data (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Data.Data.Data Language.Haskell.Tools.AST.Ann.RangeStage
instance Data.Data.Data Language.Haskell.Tools.AST.Ann.NormRangeStage
instance Data.Data.Data Language.Haskell.Tools.AST.Ann.RngTemplateStage
instance Data.Data.Data Language.Haskell.Tools.AST.Ann.SrcTemplateStage
instance (Data.Data.Data name, Data.Typeable.Internal.Typeable name) => Data.Data.Data (Language.Haskell.Tools.AST.Ann.Dom name)
instance Data.Data.Data Language.Haskell.Tools.AST.Ann.IdDom
instance (Data.Typeable.Internal.Typeable d, Data.Data.Data d, Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoDefaultCls ~ Language.Haskell.Tools.AST.SemaInfoTypes.NoSemanticInfo, Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoNameCls), Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoExprCls), Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoImportCls), Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoModuleCls), Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoWildcardCls), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoNameCls), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoExprCls), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoImportCls), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoModuleCls), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d Language.Haskell.Tools.AST.Ann.SameInfoWildcardCls)) => Language.Haskell.Tools.AST.Ann.Domain d
instance (Data.Data.Data (Language.Haskell.Tools.AST.Ann.SemanticInfo' d (Language.Haskell.Tools.AST.Ann.SemaInfoClassify e)), GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SemanticInfo' d (Language.Haskell.Tools.AST.Ann.SemaInfoClassify e)), Language.Haskell.Tools.AST.Ann.Domain d) => Language.Haskell.Tools.AST.Ann.DomainWith e d
instance Language.Haskell.Tools.AST.Ann.SourceInfo Language.Haskell.Tools.AST.Ann.RangeStage
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.RangeStage)
instance Language.Haskell.Tools.AST.Ann.SourceInfo Language.Haskell.Tools.AST.Ann.NormRangeStage
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.SpanInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.ListInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance GHC.Show.Show (Language.Haskell.Tools.AST.Ann.OptionalInfo Language.Haskell.Tools.AST.Ann.NormRangeStage)
instance Language.Haskell.Tools.AST.Ann.RangeInfo Language.Haskell.Tools.AST.Ann.RangeStage


-- | Generated references for AST elements.
module Language.Haskell.Tools.AST.References
modImports :: forall dom_a1Sr9 stage_a1Sra. Lens (Ann UModule dom_a1Sr9 stage_a1Sra) (Ann UModule dom_a1Sr9 stage_a1Sra) (AnnListG UImportDecl dom_a1Sr9 stage_a1Sra) (AnnListG UImportDecl dom_a1Sr9 stage_a1Sra)
modHead :: forall dom_a1Sr9 stage_a1Sra. Lens (Ann UModule dom_a1Sr9 stage_a1Sra) (Ann UModule dom_a1Sr9 stage_a1Sra) (AnnMaybeG UModuleHead dom_a1Sr9 stage_a1Sra) (AnnMaybeG UModuleHead dom_a1Sr9 stage_a1Sra)
modDecl :: forall dom_a1Sr9 stage_a1Sra. Lens (Ann UModule dom_a1Sr9 stage_a1Sra) (Ann UModule dom_a1Sr9 stage_a1Sra) (AnnListG UDecl dom_a1Sr9 stage_a1Sra) (AnnListG UDecl dom_a1Sr9 stage_a1Sra)
filePragmas :: forall dom_a1Sr9 stage_a1Sra. Lens (Ann UModule dom_a1Sr9 stage_a1Sra) (Ann UModule dom_a1Sr9 stage_a1Sra) (AnnListG UFilePragma dom_a1Sr9 stage_a1Sra) (AnnListG UFilePragma dom_a1Sr9 stage_a1Sra)
mhPragma :: forall dom_a1Sr7 stage_a1Sr8. Lens (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (AnnMaybeG UModulePragma dom_a1Sr7 stage_a1Sr8) (AnnMaybeG UModulePragma dom_a1Sr7 stage_a1Sr8)
mhName :: forall dom_a1Sr7 stage_a1Sr8. Lens (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (Ann UModuleName dom_a1Sr7 stage_a1Sr8) (Ann UModuleName dom_a1Sr7 stage_a1Sr8)
mhExports :: forall dom_a1Sr7 stage_a1Sr8. Lens (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (Ann UModuleHead dom_a1Sr7 stage_a1Sr8) (AnnMaybeG UExportSpecs dom_a1Sr7 stage_a1Sr8) (AnnMaybeG UExportSpecs dom_a1Sr7 stage_a1Sr8)
espExports :: forall dom_a1Sr5 stage_a1Sr6 dom'_a7gTF stage'_a7gTG. Lens (Ann UExportSpecs dom_a1Sr5 stage_a1Sr6) (Ann UExportSpecs dom_a1Sr5 stage_a1Sr6) (AnnListG UExportSpec dom_a1Sr5 stage_a1Sr6) (AnnListG UExportSpec dom_a1Sr5 stage_a1Sr6)
exportModuleName :: forall dom_a1Sr3 stage_a1Sr4. Partial (Ann UExportSpec dom_a1Sr3 stage_a1Sr4) (Ann UExportSpec dom_a1Sr3 stage_a1Sr4) (Ann UModuleName dom_a1Sr3 stage_a1Sr4) (Ann UModuleName dom_a1Sr3 stage_a1Sr4)
exportDecl :: forall dom_a1Sr3 stage_a1Sr4. Partial (Ann UExportSpec dom_a1Sr3 stage_a1Sr4) (Ann UExportSpec dom_a1Sr3 stage_a1Sr4) (Ann UIESpec dom_a1Sr3 stage_a1Sr4) (Ann UIESpec dom_a1Sr3 stage_a1Sr4)
ieSubspec :: forall dom_a1Sr1 stage_a1Sr2. Lens (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (AnnMaybeG USubSpec dom_a1Sr1 stage_a1Sr2) (AnnMaybeG USubSpec dom_a1Sr1 stage_a1Sr2)
ieName :: forall dom_a1Sr1 stage_a1Sr2. Lens (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (Ann UName dom_a1Sr1 stage_a1Sr2) (Ann UName dom_a1Sr1 stage_a1Sr2)
ieModifier :: forall dom_a1Sr1 stage_a1Sr2. Lens (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (Ann UIESpec dom_a1Sr1 stage_a1Sr2) (AnnMaybeG UImportModifier dom_a1Sr1 stage_a1Sr2) (AnnMaybeG UImportModifier dom_a1Sr1 stage_a1Sr2)
essList :: forall dom_a1SqX stage_a1SqY dom'_a7h2d stage'_a7h2e. Partial (Ann USubSpec dom_a1SqX stage_a1SqY) (Ann USubSpec dom_a1SqX stage_a1SqY) (AnnListG UName dom_a1SqX stage_a1SqY) (AnnListG UName dom_a1SqX stage_a1SqY)
modWarningStr :: forall dom_a1SqT stage_a1SqU. Partial (Ann UModulePragma dom_a1SqT stage_a1SqU) (Ann UModulePragma dom_a1SqT stage_a1SqU) (AnnListG UStringNode dom_a1SqT stage_a1SqU) (AnnListG UStringNode dom_a1SqT stage_a1SqU)
modDeprecatedPragma :: forall dom_a1SqT stage_a1SqU. Partial (Ann UModulePragma dom_a1SqT stage_a1SqU) (Ann UModulePragma dom_a1SqT stage_a1SqU) (AnnListG UStringNode dom_a1SqT stage_a1SqU) (AnnListG UStringNode dom_a1SqT stage_a1SqU)
opStr :: forall dom_a1SqV stage_a1SqW. Partial (Ann UFilePragma dom_a1SqV stage_a1SqW) (Ann UFilePragma dom_a1SqV stage_a1SqW) (Ann UStringNode dom_a1SqV stage_a1SqW) (Ann UStringNode dom_a1SqV stage_a1SqW)
lpPragmas :: forall dom_a1SqV stage_a1SqW. Partial (Ann UFilePragma dom_a1SqV stage_a1SqW) (Ann UFilePragma dom_a1SqV stage_a1SqW) (AnnListG ULanguageExtension dom_a1SqV stage_a1SqW) (AnnListG ULanguageExtension dom_a1SqV stage_a1SqW)
importSpec :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSpec dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSpec dom_a1SqP stage_a1SqQ)
importSource :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSource dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSource dom_a1SqP stage_a1SqQ)
importSafe :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSafe dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportSafe dom_a1SqP stage_a1SqQ)
importQualified :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportQualified dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportQualified dom_a1SqP stage_a1SqQ)
importPkg :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UStringNode dom_a1SqP stage_a1SqQ) (AnnMaybeG UStringNode dom_a1SqP stage_a1SqQ)
importModule :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UModuleName dom_a1SqP stage_a1SqQ) (Ann UModuleName dom_a1SqP stage_a1SqQ)
importAs :: forall dom_a1SqP stage_a1SqQ. Lens (Ann UImportDecl dom_a1SqP stage_a1SqQ) (Ann UImportDecl dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportRenaming dom_a1SqP stage_a1SqQ) (AnnMaybeG UImportRenaming dom_a1SqP stage_a1SqQ)
importSpecList :: forall dom_a1SqN stage_a1SqO. Partial (Ann UImportSpec dom_a1SqN stage_a1SqO) (Ann UImportSpec dom_a1SqN stage_a1SqO) (AnnListG UIESpec dom_a1SqN stage_a1SqO) (AnnListG UIESpec dom_a1SqN stage_a1SqO)
importSpecHiding :: forall dom_a1SqN stage_a1SqO. Partial (Ann UImportSpec dom_a1SqN stage_a1SqO) (Ann UImportSpec dom_a1SqN stage_a1SqO) (AnnListG UIESpec dom_a1SqN stage_a1SqO) (AnnListG UIESpec dom_a1SqN stage_a1SqO)
importRename :: forall dom_a1SqD stage_a1SqE dom'_a7hnv stage'_a7hnw. Lens (Ann UImportRenaming dom_a1SqD stage_a1SqE) (Ann UImportRenaming dom_a1SqD stage_a1SqE) (Ann UModuleName dom_a1SqD stage_a1SqE) (Ann UModuleName dom_a1SqD stage_a1SqE)
moduleNameString :: forall dom_a1SqB stage_a1SqC. Lens (Ann UModuleName dom_a1SqB stage_a1SqC) (Ann UModuleName dom_a1SqB stage_a1SqC) String String
langExt :: forall dom_a1SqR stage_a1SqS. Lens (Ann ULanguageExtension dom_a1SqR stage_a1SqS) (Ann ULanguageExtension dom_a1SqR stage_a1SqS) String String
declValBind :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UValueBind dom_a1Lso stage_a1Lsp) (Ann UValueBind dom_a1Lso stage_a1Lsp)
declTypes :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnListG UType dom_a1Lso stage_a1Lsp) (AnnListG UType dom_a1Lso stage_a1Lsp)
declTypeSig :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UTypeSignature dom_a1Lso stage_a1Lsp) (Ann UTypeSignature dom_a1Lso stage_a1Lsp)
declTypeFamily :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UTypeFamily dom_a1Lso stage_a1Lsp) (Ann UTypeFamily dom_a1Lso stage_a1Lsp)
declType :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp)
declSplice :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann USplice dom_a1Lso stage_a1Lsp) (Ann USplice dom_a1Lso stage_a1Lsp)
declSpec :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UTypeFamilySpec dom_a1Lso stage_a1Lsp) (AnnMaybeG UTypeFamilySpec dom_a1Lso stage_a1Lsp)
declSafety :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG USafety dom_a1Lso stage_a1Lsp) (AnnMaybeG USafety dom_a1Lso stage_a1Lsp)
declRoles :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnListG URole dom_a1Lso stage_a1Lsp) (AnnListG URole dom_a1Lso stage_a1Lsp)
declRoleType :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UQualifiedName dom_a1Lso stage_a1Lsp) (Ann UQualifiedName dom_a1Lso stage_a1Lsp)
declPragma :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UTopLevelPragma dom_a1Lso stage_a1Lsp) (Ann UTopLevelPragma dom_a1Lso stage_a1Lsp)
declPatTypeSig :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UPatternTypeSignature dom_a1Lso stage_a1Lsp) (Ann UPatternTypeSignature dom_a1Lso stage_a1Lsp)
declPatSyn :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UPatternSynonym dom_a1Lso stage_a1Lsp) (Ann UPatternSynonym dom_a1Lso stage_a1Lsp)
declOverlap :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UOverlapPragma dom_a1Lso stage_a1Lsp) (AnnMaybeG UOverlapPragma dom_a1Lso stage_a1Lsp)
declNewtype :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDataOrNewtypeKeyword dom_a1Lso stage_a1Lsp) (Ann UDataOrNewtypeKeyword dom_a1Lso stage_a1Lsp)
declName :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UName dom_a1Lso stage_a1Lsp) (Ann UName dom_a1Lso stage_a1Lsp)
declKind :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UKindConstraint dom_a1Lso stage_a1Lsp) (AnnMaybeG UKindConstraint dom_a1Lso stage_a1Lsp)
declInstance :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UInstanceRule dom_a1Lso stage_a1Lsp) (Ann UInstanceRule dom_a1Lso stage_a1Lsp)
declInstRule :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UInstanceRule dom_a1Lso stage_a1Lsp) (Ann UInstanceRule dom_a1Lso stage_a1Lsp)
declInstDecl :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UInstBody dom_a1Lso stage_a1Lsp) (AnnMaybeG UInstBody dom_a1Lso stage_a1Lsp)
declHead :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDeclHead dom_a1Lso stage_a1Lsp) (Ann UDeclHead dom_a1Lso stage_a1Lsp)
declGadt :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnListG UGadtConDecl dom_a1Lso stage_a1Lsp) (AnnListG UGadtConDecl dom_a1Lso stage_a1Lsp)
declFunDeps :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UFunDeps dom_a1Lso stage_a1Lsp) (AnnMaybeG UFunDeps dom_a1Lso stage_a1Lsp)
declForeignType :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp)
declFixity :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UFixitySignature dom_a1Lso stage_a1Lsp) (Ann UFixitySignature dom_a1Lso stage_a1Lsp)
declDeriving :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UDeriving dom_a1Lso stage_a1Lsp) (AnnMaybeG UDeriving dom_a1Lso stage_a1Lsp)
declDecl :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnListG UTypeEqn dom_a1Lso stage_a1Lsp) (AnnListG UTypeEqn dom_a1Lso stage_a1Lsp)
declCtx :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UContext dom_a1Lso stage_a1Lsp) (AnnMaybeG UContext dom_a1Lso stage_a1Lsp)
declCons :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnListG UConDecl dom_a1Lso stage_a1Lsp) (AnnListG UConDecl dom_a1Lso stage_a1Lsp)
declCallConv :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UCallConv dom_a1Lso stage_a1Lsp) (Ann UCallConv dom_a1Lso stage_a1Lsp)
declBody :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (AnnMaybeG UClassBody dom_a1Lso stage_a1Lsp) (AnnMaybeG UClassBody dom_a1Lso stage_a1Lsp)
declAssignedType :: forall dom_a1Lso stage_a1Lsp. Partial (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UDecl dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp) (Ann UType dom_a1Lso stage_a1Lsp)
cbElements :: forall dom_a1Lsk stage_a1Lsl dom'_a7jtl stage'_a7jtm. Lens (Ann UClassBody dom_a1Lsk stage_a1Lsl) (Ann UClassBody dom_a1Lsk stage_a1Lsl) (AnnListG UClassElement dom_a1Lsk stage_a1Lsl) (AnnListG UClassElement dom_a1Lsk stage_a1Lsl)
pragmaFormula :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UMinimalFormula dom_a1Lsi stage_a1Lsj) (Ann UMinimalFormula dom_a1Lsi stage_a1Lsj)
clsInline :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UInlinePragma dom_a1Lsi stage_a1Lsj) (Ann UInlinePragma dom_a1Lsi stage_a1Lsj)
clsFixity :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UFixitySignature dom_a1Lsi stage_a1Lsj) (Ann UFixitySignature dom_a1Lsi stage_a1Lsj)
ceTypeSig :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UTypeSignature dom_a1Lsi stage_a1Lsj) (Ann UTypeSignature dom_a1Lsi stage_a1Lsj)
ceTypeFam :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UTypeFamily dom_a1Lsi stage_a1Lsj) (Ann UTypeFamily dom_a1Lsi stage_a1Lsj)
ceType :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UType dom_a1Lsi stage_a1Lsj) (Ann UType dom_a1Lsi stage_a1Lsj)
ceName :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UName dom_a1Lsi stage_a1Lsj) (Ann UName dom_a1Lsi stage_a1Lsj)
ceKind :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UType dom_a1Lsi stage_a1Lsj) (Ann UType dom_a1Lsi stage_a1Lsj)
ceHead :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UDeclHead dom_a1Lsi stage_a1Lsj) (Ann UDeclHead dom_a1Lsi stage_a1Lsj)
ceBind :: forall dom_a1Lsi stage_a1Lsj. Partial (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UClassElement dom_a1Lsi stage_a1Lsj) (Ann UValueBind dom_a1Lsi stage_a1Lsj) (Ann UValueBind dom_a1Lsi stage_a1Lsj)
dhRight :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn)
dhOperator :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UOperator dom_a1Lsm stage_a1Lsn) (Ann UOperator dom_a1Lsm stage_a1Lsn)
dhName :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UName dom_a1Lsm stage_a1Lsn) (Ann UName dom_a1Lsm stage_a1Lsn)
dhLeft :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn)
dhBody :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn)
dhAppOperand :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn) (Ann UTyVar dom_a1Lsm stage_a1Lsn)
dhAppFun :: forall dom_a1Lsm stage_a1Lsn. Partial (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn) (Ann UDeclHead dom_a1Lsm stage_a1Lsn)
instBodyDecls :: forall dom_a1Lsc stage_a1Lsd dom'_a7k51 stage'_a7k52. Lens (Ann UInstBody dom_a1Lsc stage_a1Lsd) (Ann UInstBody dom_a1Lsc stage_a1Lsd) (AnnListG UInstBodyDecl dom_a1Lsc stage_a1Lsd) (AnnListG UInstBodyDecl dom_a1Lsc stage_a1Lsd)
specializeInstanceType :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UType dom_a1Lsa stage_a1Lsb) (Ann UType dom_a1Lsa stage_a1Lsb)
specializeInstance :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann USpecializePragma dom_a1Lsa stage_a1Lsb) (Ann USpecializePragma dom_a1Lsa stage_a1Lsb)
instanceInline :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInlinePragma dom_a1Lsa stage_a1Lsb) (Ann UInlinePragma dom_a1Lsa stage_a1Lsb)
instBodyTypeSig :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UTypeSignature dom_a1Lsa stage_a1Lsb) (Ann UTypeSignature dom_a1Lsa stage_a1Lsb)
instBodyTypeEqn :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UTypeEqn dom_a1Lsa stage_a1Lsb) (Ann UTypeEqn dom_a1Lsa stage_a1Lsb)
instBodyLhsType :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstanceRule dom_a1Lsa stage_a1Lsb) (Ann UInstanceRule dom_a1Lsa stage_a1Lsb)
instBodyGadtCons :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (AnnListG UGadtConDecl dom_a1Lsa stage_a1Lsb) (AnnListG UGadtConDecl dom_a1Lsa stage_a1Lsb)
instBodyDerivings :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (AnnMaybeG UDeriving dom_a1Lsa stage_a1Lsb) (AnnMaybeG UDeriving dom_a1Lsa stage_a1Lsb)
instBodyDeclFunbind :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UValueBind dom_a1Lsa stage_a1Lsb) (Ann UValueBind dom_a1Lsa stage_a1Lsb)
instBodyDataNew :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UDataOrNewtypeKeyword dom_a1Lsa stage_a1Lsb) (Ann UDataOrNewtypeKeyword dom_a1Lsa stage_a1Lsb)
instBodyDataKind :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (AnnMaybeG UKindConstraint dom_a1Lsa stage_a1Lsb) (AnnMaybeG UKindConstraint dom_a1Lsa stage_a1Lsb)
instBodyDataCons :: forall dom_a1Lsa stage_a1Lsb. Partial (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (Ann UInstBodyDecl dom_a1Lsa stage_a1Lsb) (AnnListG UConDecl dom_a1Lsa stage_a1Lsb) (AnnListG UConDecl dom_a1Lsa stage_a1Lsb)
tfSpec :: forall dom_a1Ls6 stage_a1Ls7. Partial (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (AnnMaybeG UTypeFamilySpec dom_a1Ls6 stage_a1Ls7) (AnnMaybeG UTypeFamilySpec dom_a1Ls6 stage_a1Ls7)
tfKind :: forall dom_a1Ls6 stage_a1Ls7. Partial (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (AnnMaybeG UKindConstraint dom_a1Ls6 stage_a1Ls7) (AnnMaybeG UKindConstraint dom_a1Ls6 stage_a1Ls7)
tfHead :: forall dom_a1Ls6 stage_a1Ls7. Lens (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (Ann UTypeFamily dom_a1Ls6 stage_a1Ls7) (Ann UDeclHead dom_a1Ls6 stage_a1Ls7) (Ann UDeclHead dom_a1Ls6 stage_a1Ls7)
tfSpecKind :: forall dom_a1Ls4 stage_a1Ls5. Partial (Ann UTypeFamilySpec dom_a1Ls4 stage_a1Ls5) (Ann UTypeFamilySpec dom_a1Ls4 stage_a1Ls5) (Ann UKindConstraint dom_a1Ls4 stage_a1Ls5) (Ann UKindConstraint dom_a1Ls4 stage_a1Ls5)
tfInjectivity :: forall dom_a1Ls4 stage_a1Ls5. Partial (Ann UTypeFamilySpec dom_a1Ls4 stage_a1Ls5) (Ann UTypeFamilySpec dom_a1Ls4 stage_a1Ls5) (Ann UInjectivityAnn dom_a1Ls4 stage_a1Ls5) (Ann UInjectivityAnn dom_a1Ls4 stage_a1Ls5)
injAnnRes :: forall dom_a1Ls2 stage_a1Ls3. Lens (Ann UInjectivityAnn dom_a1Ls2 stage_a1Ls3) (Ann UInjectivityAnn dom_a1Ls2 stage_a1Ls3) (Ann UTyVar dom_a1Ls2 stage_a1Ls3) (Ann UTyVar dom_a1Ls2 stage_a1Ls3)
injAnnDeps :: forall dom_a1Ls2 stage_a1Ls3. Lens (Ann UInjectivityAnn dom_a1Ls2 stage_a1Ls3) (Ann UInjectivityAnn dom_a1Ls2 stage_a1Ls3) (AnnListG UName dom_a1Ls2 stage_a1Ls3) (AnnListG UName dom_a1Ls2 stage_a1Ls3)
gadtConTypeCtx :: forall dom_a1LrY stage_a1LrZ. Lens (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (AnnMaybeG UContext dom_a1LrY stage_a1LrZ) (AnnMaybeG UContext dom_a1LrY stage_a1LrZ)
gadtConTypeArgs :: forall dom_a1LrY stage_a1LrZ. Lens (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (AnnListG UTyVar dom_a1LrY stage_a1LrZ) (AnnListG UTyVar dom_a1LrY stage_a1LrZ)
gadtConType :: forall dom_a1LrY stage_a1LrZ. Lens (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (Ann UGadtConType dom_a1LrY stage_a1LrZ) (Ann UGadtConType dom_a1LrY stage_a1LrZ)
gadtConNames :: forall dom_a1LrY stage_a1LrZ. Lens (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (Ann UGadtConDecl dom_a1LrY stage_a1LrZ) (AnnListG UName dom_a1LrY stage_a1LrZ) (AnnListG UName dom_a1LrY stage_a1LrZ)
gadtConResultType :: forall dom_a1LrU stage_a1LrV. Partial (Ann UGadtConType dom_a1LrU stage_a1LrV) (Ann UGadtConType dom_a1LrU stage_a1LrV) (Ann UType dom_a1LrU stage_a1LrV) (Ann UType dom_a1LrU stage_a1LrV)
gadtConRecordFields :: forall dom_a1LrU stage_a1LrV. Partial (Ann UGadtConType dom_a1LrU stage_a1LrV) (Ann UGadtConType dom_a1LrU stage_a1LrV) (AnnListG UFieldDecl dom_a1LrU stage_a1LrV) (AnnListG UFieldDecl dom_a1LrU stage_a1LrV)
gadtConNormalType :: forall dom_a1LrU stage_a1LrV. Partial (Ann UGadtConType dom_a1LrU stage_a1LrV) (Ann UGadtConType dom_a1LrU stage_a1LrV) (Ann UType dom_a1LrU stage_a1LrV) (Ann UType dom_a1LrU stage_a1LrV)
patRhs :: forall dom_a1LrG stage_a1LrH. Lens (Ann UPatternSynonym dom_a1LrG stage_a1LrH) (Ann UPatternSynonym dom_a1LrG stage_a1LrH) (Ann UPatSynRhs dom_a1LrG stage_a1LrH) (Ann UPatSynRhs dom_a1LrG stage_a1LrH)
patLhs :: forall dom_a1LrG stage_a1LrH. Lens (Ann UPatternSynonym dom_a1LrG stage_a1LrH) (Ann UPatternSynonym dom_a1LrG stage_a1LrH) (Ann UPatSynLhs dom_a1LrG stage_a1LrH) (Ann UPatSynLhs dom_a1LrG stage_a1LrH)
patRhsOpposite :: forall dom_a1LrC stage_a1LrD. Partial (Ann UPatSynRhs dom_a1LrC stage_a1LrD) (Ann UPatSynRhs dom_a1LrC stage_a1LrD) (AnnMaybeG UPatSynWhere dom_a1LrC stage_a1LrD) (AnnMaybeG UPatSynWhere dom_a1LrC stage_a1LrD)
patRhsPat :: forall dom_a1LrC stage_a1LrD. Lens (Ann UPatSynRhs dom_a1LrC stage_a1LrD) (Ann UPatSynRhs dom_a1LrC stage_a1LrD) (Ann UPattern dom_a1LrC stage_a1LrD) (Ann UPattern dom_a1LrC stage_a1LrD)
patSynRhs :: forall dom_a1LrE stage_a1LrF. Partial (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF)
patSynOp :: forall dom_a1LrE stage_a1LrF. Partial (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UOperator dom_a1LrE stage_a1LrF) (Ann UOperator dom_a1LrE stage_a1LrF)
patSynLhs :: forall dom_a1LrE stage_a1LrF. Partial (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF)
patName :: forall dom_a1LrE stage_a1LrF. Partial (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF) (Ann UName dom_a1LrE stage_a1LrF)
patArgs :: forall dom_a1LrE stage_a1LrF. Partial (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (Ann UPatSynLhs dom_a1LrE stage_a1LrF) (AnnListG UName dom_a1LrE stage_a1LrF) (AnnListG UName dom_a1LrE stage_a1LrF)
patOpposite :: forall dom_a1LrA stage_a1LrB dom'_a7l8R stage'_a7l8S. Lens (Ann UPatSynWhere dom_a1LrA stage_a1LrB) (Ann UPatSynWhere dom_a1LrA stage_a1LrB) (AnnListG UMatch dom_a1LrA stage_a1LrB) (AnnListG UMatch dom_a1LrA stage_a1LrB)
patSigType :: forall dom_a1LrI stage_a1LrJ. Lens (Ann UPatternTypeSignature dom_a1LrI stage_a1LrJ) (Ann UPatternTypeSignature dom_a1LrI stage_a1LrJ) (Ann UType dom_a1LrI stage_a1LrJ) (Ann UType dom_a1LrI stage_a1LrJ)
patSigName :: forall dom_a1LrI stage_a1LrJ. Lens (Ann UPatternTypeSignature dom_a1LrI stage_a1LrJ) (Ann UPatternTypeSignature dom_a1LrI stage_a1LrJ) (Ann UName dom_a1LrI stage_a1LrJ) (Ann UName dom_a1LrI stage_a1LrJ)
funDeps :: forall dom_a1LrS stage_a1LrT dom'_a7lcP stage'_a7lcQ. Lens (Ann UFunDeps dom_a1LrS stage_a1LrT) (Ann UFunDeps dom_a1LrS stage_a1LrT) (AnnListG UFunDep dom_a1LrS stage_a1LrT) (AnnListG UFunDep dom_a1LrS stage_a1LrT)
funDepRhs :: forall dom_a1LrQ stage_a1LrR. Lens (Ann UFunDep dom_a1LrQ stage_a1LrR) (Ann UFunDep dom_a1LrQ stage_a1LrR) (AnnListG UName dom_a1LrQ stage_a1LrR) (AnnListG UName dom_a1LrQ stage_a1LrR)
funDepLhs :: forall dom_a1LrQ stage_a1LrR. Lens (Ann UFunDep dom_a1LrQ stage_a1LrR) (Ann UFunDep dom_a1LrQ stage_a1LrR) (AnnListG UName dom_a1LrQ stage_a1LrR) (AnnListG UName dom_a1LrQ stage_a1LrR)
conDeclRhs :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UType dom_a1LrO stage_a1LrP) (Ann UType dom_a1LrO stage_a1LrP)
conDeclOp :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UOperator dom_a1LrO stage_a1LrP) (Ann UOperator dom_a1LrO stage_a1LrP)
conDeclName :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UName dom_a1LrO stage_a1LrP) (Ann UName dom_a1LrO stage_a1LrP)
conDeclLhs :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UType dom_a1LrO stage_a1LrP) (Ann UType dom_a1LrO stage_a1LrP)
conDeclFields :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (AnnListG UFieldDecl dom_a1LrO stage_a1LrP) (AnnListG UFieldDecl dom_a1LrO stage_a1LrP)
conDeclArgs :: forall dom_a1LrO stage_a1LrP. Partial (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (AnnListG UType dom_a1LrO stage_a1LrP) (AnnListG UType dom_a1LrO stage_a1LrP)
conTypeCtx :: forall dom_a1LrO stage_a1LrP. Lens (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (AnnMaybeG UContext dom_a1LrO stage_a1LrP) (AnnMaybeG UContext dom_a1LrO stage_a1LrP)
conTypeArgs :: forall dom_a1LrO stage_a1LrP. Lens (Ann UConDecl dom_a1LrO stage_a1LrP) (Ann UConDecl dom_a1LrO stage_a1LrP) (AnnListG UTyVar dom_a1LrO stage_a1LrP) (AnnListG UTyVar dom_a1LrO stage_a1LrP)
fieldType :: forall dom_a1LrM stage_a1LrN. Lens (Ann UFieldDecl dom_a1LrM stage_a1LrN) (Ann UFieldDecl dom_a1LrM stage_a1LrN) (Ann UType dom_a1LrM stage_a1LrN) (Ann UType dom_a1LrM stage_a1LrN)
fieldNames :: forall dom_a1LrM stage_a1LrN. Lens (Ann UFieldDecl dom_a1LrM stage_a1LrN) (Ann UFieldDecl dom_a1LrM stage_a1LrN) (AnnListG UName dom_a1LrM stage_a1LrN) (AnnListG UName dom_a1LrM stage_a1LrN)
oneDerived :: forall dom_a1LrK stage_a1LrL. Partial (Ann UDeriving dom_a1LrK stage_a1LrL) (Ann UDeriving dom_a1LrK stage_a1LrL) (Ann UInstanceHead dom_a1LrK stage_a1LrL) (Ann UInstanceHead dom_a1LrK stage_a1LrL)
allDerived :: forall dom_a1LrK stage_a1LrL. Partial (Ann UDeriving dom_a1LrK stage_a1LrL) (Ann UDeriving dom_a1LrK stage_a1LrL) (AnnListG UInstanceHead dom_a1LrK stage_a1LrL) (AnnListG UInstanceHead dom_a1LrK stage_a1LrL)
irVars :: forall dom_a1Lsg stage_a1Lsh. Lens (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (AnnMaybeG (AnnListG UTyVar) dom_a1Lsg stage_a1Lsh) (AnnMaybeG (AnnListG UTyVar) dom_a1Lsg stage_a1Lsh)
irHead :: forall dom_a1Lsg stage_a1Lsh. Lens (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (Ann UInstanceHead dom_a1Lsg stage_a1Lsh) (Ann UInstanceHead dom_a1Lsg stage_a1Lsh)
irCtx :: forall dom_a1Lsg stage_a1Lsh. Lens (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (Ann UInstanceRule dom_a1Lsg stage_a1Lsh) (AnnMaybeG UContext dom_a1Lsg stage_a1Lsh) (AnnMaybeG UContext dom_a1Lsg stage_a1Lsh)
ihType :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UType dom_a1Lse stage_a1Lsf) (Ann UType dom_a1Lse stage_a1Lsf)
ihOperator :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UOperator dom_a1Lse stage_a1Lsf) (Ann UOperator dom_a1Lse stage_a1Lsf)
ihLeftOp :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UType dom_a1Lse stage_a1Lsf) (Ann UType dom_a1Lse stage_a1Lsf)
ihHead :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf)
ihFun :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf)
ihConName :: forall dom_a1Lse stage_a1Lsf. Partial (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UInstanceHead dom_a1Lse stage_a1Lsf) (Ann UName dom_a1Lse stage_a1Lsf) (Ann UName dom_a1Lse stage_a1Lsf)
teRhs :: forall dom_a1Ls0 stage_a1Ls1. Lens (Ann UTypeEqn dom_a1Ls0 stage_a1Ls1) (Ann UTypeEqn dom_a1Ls0 stage_a1Ls1) (Ann UType dom_a1Ls0 stage_a1Ls1) (Ann UType dom_a1Ls0 stage_a1Ls1)
teLhs :: forall dom_a1Ls0 stage_a1Ls1. Lens (Ann UTypeEqn dom_a1Ls0 stage_a1Ls1) (Ann UTypeEqn dom_a1Ls0 stage_a1Ls1) (Ann UType dom_a1Ls0 stage_a1Ls1) (Ann UType dom_a1Ls0 stage_a1Ls1)
ruleRhs :: forall dom_a1Lro stage_a1Lrp. Lens (Ann URule dom_a1Lro stage_a1Lrp) (Ann URule dom_a1Lro stage_a1Lrp) (Ann UExpr dom_a1Lro stage_a1Lrp) (Ann UExpr dom_a1Lro stage_a1Lrp)
rulePhase :: forall dom_a1Lro stage_a1Lrp. Lens (Ann URule dom_a1Lro stage_a1Lrp) (Ann URule dom_a1Lro stage_a1Lrp) (AnnMaybeG UPhaseControl dom_a1Lro stage_a1Lrp) (AnnMaybeG UPhaseControl dom_a1Lro stage_a1Lrp)
ruleName :: forall dom_a1Lro stage_a1Lrp. Lens (Ann URule dom_a1Lro stage_a1Lrp) (Ann URule dom_a1Lro stage_a1Lrp) (Ann UStringNode dom_a1Lro stage_a1Lrp) (Ann UStringNode dom_a1Lro stage_a1Lrp)
ruleLhs :: forall dom_a1Lro stage_a1Lrp. Lens (Ann URule dom_a1Lro stage_a1Lrp) (Ann URule dom_a1Lro stage_a1Lrp) (Ann UExpr dom_a1Lro stage_a1Lrp) (Ann UExpr dom_a1Lro stage_a1Lrp)
ruleBounded :: forall dom_a1Lro stage_a1Lrp. Lens (Ann URule dom_a1Lro stage_a1Lrp) (Ann URule dom_a1Lro stage_a1Lrp) (AnnListG URuleVar dom_a1Lro stage_a1Lrp) (AnnListG URuleVar dom_a1Lro stage_a1Lrp)
ruleVarType :: forall dom_a1Lrm stage_a1Lrn. Partial (Ann URuleVar dom_a1Lrm stage_a1Lrn) (Ann URuleVar dom_a1Lrm stage_a1Lrn) (Ann UType dom_a1Lrm stage_a1Lrn) (Ann UType dom_a1Lrm stage_a1Lrn)
ruleVarName :: forall dom_a1Lrm stage_a1Lrn. Lens (Ann URuleVar dom_a1Lrm stage_a1Lrn) (Ann URuleVar dom_a1Lrm stage_a1Lrn) (Ann UName dom_a1Lrm stage_a1Lrn) (Ann UName dom_a1Lrm stage_a1Lrn)
phaseUntil :: forall dom_a1JA6 stage_a1JA7. Lens (Ann UPhaseControl dom_a1JA6 stage_a1JA7) (Ann UPhaseControl dom_a1JA6 stage_a1JA7) (AnnMaybeG PhaseInvert dom_a1JA6 stage_a1JA7) (AnnMaybeG PhaseInvert dom_a1JA6 stage_a1JA7)
phaseNumber :: forall dom_a1JA6 stage_a1JA7. Lens (Ann UPhaseControl dom_a1JA6 stage_a1JA7) (Ann UPhaseControl dom_a1JA6 stage_a1JA7) (AnnMaybeG PhaseNumber dom_a1JA6 stage_a1JA7) (AnnMaybeG PhaseNumber dom_a1JA6 stage_a1JA7)
phaseNum :: forall dom_a1JA4 stage_a1JA5. Lens (Ann PhaseNumber dom_a1JA4 stage_a1JA5) (Ann PhaseNumber dom_a1JA4 stage_a1JA5) Integer Integer
warnMessage :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (AnnListG UStringNode dom_a1Lrs stage_a1Lrt) (AnnListG UStringNode dom_a1Lrs stage_a1Lrt)
specializePragma :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann USpecializePragma dom_a1Lrs stage_a1Lrt) (Ann USpecializePragma dom_a1Lrs stage_a1Lrt)
pragmaRule :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (AnnListG URule dom_a1Lrs stage_a1Lrt) (AnnListG URule dom_a1Lrs stage_a1Lrt)
pragmaObjects :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (AnnListG UName dom_a1Lrs stage_a1Lrt) (AnnListG UName dom_a1Lrs stage_a1Lrt)
pragmaLineNum :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann LineNumber dom_a1Lrs stage_a1Lrt) (Ann LineNumber dom_a1Lrs stage_a1Lrt)
pragmaInline :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UInlinePragma dom_a1Lrs stage_a1Lrt) (Ann UInlinePragma dom_a1Lrs stage_a1Lrt)
pragmaFileName :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (AnnMaybeG UStringNode dom_a1Lrs stage_a1Lrt) (AnnMaybeG UStringNode dom_a1Lrs stage_a1Lrt)
deprMessage :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (AnnListG UStringNode dom_a1Lrs stage_a1Lrt) (AnnListG UStringNode dom_a1Lrs stage_a1Lrt)
annotationSubject :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UAnnotationSubject dom_a1Lrs stage_a1Lrt) (Ann UAnnotationSubject dom_a1Lrs stage_a1Lrt)
annotateExpr :: forall dom_a1Lrs stage_a1Lrt. Partial (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UTopLevelPragma dom_a1Lrs stage_a1Lrt) (Ann UExpr dom_a1Lrs stage_a1Lrt) (Ann UExpr dom_a1Lrs stage_a1Lrt)
annotateName :: forall dom_a1Lrk stage_a1Lrl dom'_a7mrF stage'_a7mrG. Partial (Ann UAnnotationSubject dom_a1Lrk stage_a1Lrl) (Ann UAnnotationSubject dom_a1Lrk stage_a1Lrl) (Ann UName dom_a1Lrk stage_a1Lrl) (Ann UName dom_a1Lrk stage_a1Lrl)
minimalOrs :: forall dom_a1Lri stage_a1Lrj. Partial (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (AnnListG UMinimalFormula dom_a1Lri stage_a1Lrj) (AnnListG UMinimalFormula dom_a1Lri stage_a1Lrj)
minimalName :: forall dom_a1Lri stage_a1Lrj. Partial (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UName dom_a1Lri stage_a1Lrj) (Ann UName dom_a1Lri stage_a1Lrj)
minimalInner :: forall dom_a1Lri stage_a1Lrj. Partial (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj)
minimalAnds :: forall dom_a1Lri stage_a1Lrj. Partial (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (Ann UMinimalFormula dom_a1Lri stage_a1Lrj) (AnnListG UMinimalFormula dom_a1Lri stage_a1Lrj) (AnnListG UMinimalFormula dom_a1Lri stage_a1Lrj)
srToLine :: forall dom_a1FuQ stage_a1FuR. Lens (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR)
srToCol :: forall dom_a1FuQ stage_a1FuR. Lens (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR)
srFromLine :: forall dom_a1FuQ stage_a1FuR. Lens (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR)
srFromCol :: forall dom_a1FuQ stage_a1FuR. Lens (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR) (Ann Number dom_a1FuQ stage_a1FuR)
srFileName :: forall dom_a1FuQ stage_a1FuR. Lens (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann USourceRange dom_a1FuQ stage_a1FuR) (Ann UStringNode dom_a1FuQ stage_a1FuR) (Ann UStringNode dom_a1FuQ stage_a1FuR)
numberInteger :: forall dom_a1FuO stage_a1FuP. Lens (Ann Number dom_a1FuO stage_a1FuP) (Ann Number dom_a1FuO stage_a1FuP) Integer Integer
matchRhs :: forall dom_a1JAw stage_a1JAx. Lens (Ann UMatch dom_a1JAw stage_a1JAx) (Ann UMatch dom_a1JAw stage_a1JAx) (Ann URhs dom_a1JAw stage_a1JAx) (Ann URhs dom_a1JAw stage_a1JAx)
matchLhs :: forall dom_a1JAw stage_a1JAx. Lens (Ann UMatch dom_a1JAw stage_a1JAx) (Ann UMatch dom_a1JAw stage_a1JAx) (Ann UMatchLhs dom_a1JAw stage_a1JAx) (Ann UMatchLhs dom_a1JAw stage_a1JAx)
matchBinds :: forall dom_a1JAw stage_a1JAx. Lens (Ann UMatch dom_a1JAw stage_a1JAx) (Ann UMatch dom_a1JAw stage_a1JAx) (AnnMaybeG ULocalBinds dom_a1JAw stage_a1JAx) (AnnMaybeG ULocalBinds dom_a1JAw stage_a1JAx)
rhsGuards :: forall dom_a1JAg stage_a1JAh. Partial (Ann URhs dom_a1JAg stage_a1JAh) (Ann URhs dom_a1JAg stage_a1JAh) (AnnListG UGuardedRhs dom_a1JAg stage_a1JAh) (AnnListG UGuardedRhs dom_a1JAg stage_a1JAh)
rhsExpr :: forall dom_a1JAg stage_a1JAh. Partial (Ann URhs dom_a1JAg stage_a1JAh) (Ann URhs dom_a1JAg stage_a1JAh) (Ann UExpr dom_a1JAg stage_a1JAh) (Ann UExpr dom_a1JAg stage_a1JAh)
guardStmts :: forall dom_a1JAe stage_a1JAf. Lens (Ann UGuardedRhs dom_a1JAe stage_a1JAf) (Ann UGuardedRhs dom_a1JAe stage_a1JAf) (AnnListG URhsGuard dom_a1JAe stage_a1JAf) (AnnListG URhsGuard dom_a1JAe stage_a1JAf)
guardExpr :: forall dom_a1JAe stage_a1JAf. Lens (Ann UGuardedRhs dom_a1JAe stage_a1JAf) (Ann UGuardedRhs dom_a1JAe stage_a1JAf) (Ann UExpr dom_a1JAe stage_a1JAf) (Ann UExpr dom_a1JAe stage_a1JAf)
guardRhs :: forall dom_a1JAc stage_a1JAd. Partial (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann UExpr dom_a1JAc stage_a1JAd) (Ann UExpr dom_a1JAc stage_a1JAd)
guardPat :: forall dom_a1JAc stage_a1JAd. Partial (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann UPattern dom_a1JAc stage_a1JAd) (Ann UPattern dom_a1JAc stage_a1JAd)
guardCheck :: forall dom_a1JAc stage_a1JAd. Partial (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann UExpr dom_a1JAc stage_a1JAd) (Ann UExpr dom_a1JAc stage_a1JAd)
guardBinds :: forall dom_a1JAc stage_a1JAd. Partial (Ann URhsGuard dom_a1JAc stage_a1JAd) (Ann URhsGuard dom_a1JAc stage_a1JAd) (AnnListG ULocalBind dom_a1JAc stage_a1JAd) (AnnListG ULocalBind dom_a1JAc stage_a1JAd)
localVal :: forall dom_a1JAq stage_a1JAr. Partial (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann UValueBind dom_a1JAq stage_a1JAr) (Ann UValueBind dom_a1JAq stage_a1JAr)
localSig :: forall dom_a1JAq stage_a1JAr. Partial (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann UTypeSignature dom_a1JAq stage_a1JAr) (Ann UTypeSignature dom_a1JAq stage_a1JAr)
localInline :: forall dom_a1JAq stage_a1JAr. Partial (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann UInlinePragma dom_a1JAq stage_a1JAr) (Ann UInlinePragma dom_a1JAq stage_a1JAr)
localFixity :: forall dom_a1JAq stage_a1JAr. Partial (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann ULocalBind dom_a1JAq stage_a1JAr) (Ann UFixitySignature dom_a1JAq stage_a1JAr) (Ann UFixitySignature dom_a1JAq stage_a1JAr)
localBinds :: forall dom_a1JAs stage_a1JAt dom'_a7n7c stage'_a7n7d. Lens (Ann ULocalBinds dom_a1JAs stage_a1JAt) (Ann ULocalBinds dom_a1JAs stage_a1JAt) (AnnListG ULocalBind dom_a1JAs stage_a1JAt) (AnnListG ULocalBind dom_a1JAs stage_a1JAt)
fixityPrecedence :: forall dom_a1JAm stage_a1JAn. Lens (Ann UFixitySignature dom_a1JAm stage_a1JAn) (Ann UFixitySignature dom_a1JAm stage_a1JAn) (AnnMaybeG Precedence dom_a1JAm stage_a1JAn) (AnnMaybeG Precedence dom_a1JAm stage_a1JAn)
fixityOperators :: forall dom_a1JAm stage_a1JAn. Lens (Ann UFixitySignature dom_a1JAm stage_a1JAn) (Ann UFixitySignature dom_a1JAm stage_a1JAn) (AnnListG UOperator dom_a1JAm stage_a1JAn) (AnnListG UOperator dom_a1JAm stage_a1JAn)
fixityAssoc :: forall dom_a1JAm stage_a1JAn. Lens (Ann UFixitySignature dom_a1JAm stage_a1JAn) (Ann UFixitySignature dom_a1JAm stage_a1JAn) (Ann Assoc dom_a1JAm stage_a1JAn) (Ann Assoc dom_a1JAm stage_a1JAn)
precedenceValue :: forall dom_a1JAi stage_a1JAj. Lens (Ann Precedence dom_a1JAi stage_a1JAj) (Ann Precedence dom_a1JAi stage_a1JAj) Int Int
tsType :: forall dom_a1JAo stage_a1JAp. Lens (Ann UTypeSignature dom_a1JAo stage_a1JAp) (Ann UTypeSignature dom_a1JAo stage_a1JAp) (Ann UType dom_a1JAo stage_a1JAp) (Ann UType dom_a1JAo stage_a1JAp)
tsName :: forall dom_a1JAo stage_a1JAp. Lens (Ann UTypeSignature dom_a1JAo stage_a1JAp) (Ann UTypeSignature dom_a1JAo stage_a1JAp) (AnnListG UName dom_a1JAo stage_a1JAp) (AnnListG UName dom_a1JAo stage_a1JAp)
matchLhsRhs :: forall dom_a1JAu stage_a1JAv. Partial (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UPattern dom_a1JAu stage_a1JAv) (Ann UPattern dom_a1JAu stage_a1JAv)
matchLhsOperator :: forall dom_a1JAu stage_a1JAv. Partial (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UOperator dom_a1JAu stage_a1JAv) (Ann UOperator dom_a1JAu stage_a1JAv)
matchLhsName :: forall dom_a1JAu stage_a1JAv. Partial (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UName dom_a1JAu stage_a1JAv) (Ann UName dom_a1JAu stage_a1JAv)
matchLhsLhs :: forall dom_a1JAu stage_a1JAv. Partial (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UPattern dom_a1JAu stage_a1JAv) (Ann UPattern dom_a1JAu stage_a1JAv)
matchLhsArgs :: forall dom_a1JAu stage_a1JAv. Lens (Ann UMatchLhs dom_a1JAu stage_a1JAv) (Ann UMatchLhs dom_a1JAu stage_a1JAv) (AnnListG UPattern dom_a1JAu stage_a1JAv) (AnnListG UPattern dom_a1JAu stage_a1JAv)
kindConstr :: forall dom_a1Bbx stage_a1Bby dom'_a7noo stage'_a7nop. Lens (Ann UKindConstraint dom_a1Bbx stage_a1Bby) (Ann UKindConstraint dom_a1Bbx stage_a1Bby) (Ann UKind dom_a1Bbx stage_a1Bby) (Ann UKind dom_a1Bbx stage_a1Bby)
valBindRhs :: forall dom_a1JAy stage_a1JAz. Partial (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann URhs dom_a1JAy stage_a1JAz) (Ann URhs dom_a1JAy stage_a1JAz)
valBindPat :: forall dom_a1JAy stage_a1JAz. Partial (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann UPattern dom_a1JAy stage_a1JAz) (Ann UPattern dom_a1JAy stage_a1JAz)
valBindLocals :: forall dom_a1JAy stage_a1JAz. Partial (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann UValueBind dom_a1JAy stage_a1JAz) (AnnMaybeG ULocalBinds dom_a1JAy stage_a1JAz) (AnnMaybeG ULocalBinds dom_a1JAy stage_a1JAz)
funBindMatches :: forall dom_a1JAy stage_a1JAz. Partial (Ann UValueBind dom_a1JAy stage_a1JAz) (Ann UValueBind dom_a1JAy stage_a1JAz) (AnnListG UMatch dom_a1JAy stage_a1JAz) (AnnListG UMatch dom_a1JAy stage_a1JAz)
tyVarName :: forall dom_a1Cbf stage_a1Cbg. Lens (Ann UTyVar dom_a1Cbf stage_a1Cbg) (Ann UTyVar dom_a1Cbf stage_a1Cbg) (Ann UName dom_a1Cbf stage_a1Cbg) (Ann UName dom_a1Cbf stage_a1Cbg)
tyVarKind :: forall dom_a1Cbf stage_a1Cbg. Lens (Ann UTyVar dom_a1Cbf stage_a1Cbg) (Ann UTyVar dom_a1Cbf stage_a1Cbg) (AnnMaybeG UKindConstraint dom_a1Cbf stage_a1Cbg) (AnnMaybeG UKindConstraint dom_a1Cbf stage_a1Cbg)
typeWildcardName :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UName dom_a1Cbd stage_a1Cbe) (Ann UName dom_a1Cbd stage_a1Cbe)
typeType :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeRight :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeResult :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeQQ :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UQuasiQuote dom_a1Cbd stage_a1Cbe) (Ann UQuasiQuote dom_a1Cbd stage_a1Cbe)
typeParam :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeOperator :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UOperator dom_a1Cbd stage_a1Cbe) (Ann UOperator dom_a1Cbd stage_a1Cbe)
typeName :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UName dom_a1Cbd stage_a1Cbe) (Ann UName dom_a1Cbd stage_a1Cbe)
typeLeft :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeKind :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UKind dom_a1Cbd stage_a1Cbe) (Ann UKind dom_a1Cbd stage_a1Cbe)
typeInner :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeElements :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (AnnListG UType dom_a1Cbd stage_a1Cbe) (AnnListG UType dom_a1Cbd stage_a1Cbe)
typeElement :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeCtx :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UContext dom_a1Cbd stage_a1Cbe) (Ann UContext dom_a1Cbd stage_a1Cbe)
typeCon :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
typeBounded :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (AnnListG UTyVar dom_a1Cbd stage_a1Cbe) (AnnListG UTyVar dom_a1Cbd stage_a1Cbe)
typeArg :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe)
tsSplice :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann USplice dom_a1Cbd stage_a1Cbe) (Ann USplice dom_a1Cbd stage_a1Cbe)
tpPromoted :: forall dom_a1Cbd stage_a1Cbe. Partial (Ann UType dom_a1Cbd stage_a1Cbe) (Ann UType dom_a1Cbd stage_a1Cbe) (Ann (UPromoted UType) dom_a1Cbd stage_a1Cbe) (Ann (UPromoted UType) dom_a1Cbd stage_a1Cbe)
kindVar :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UName dom_a1Bbv stage_a1Bbw) (Ann UName dom_a1Bbv stage_a1Bbw)
kindType :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UType dom_a1Bbv stage_a1Bbw) (Ann UType dom_a1Bbv stage_a1Bbw)
kindRight :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindRhs :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindPromoted :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann (UPromoted UKind) dom_a1Bbv stage_a1Bbw) (Ann (UPromoted UKind) dom_a1Bbv stage_a1Bbw)
kindParen :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindLhs :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindLeft :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindElems :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (AnnListG UKind dom_a1Bbv stage_a1Bbw) (AnnListG UKind dom_a1Bbv stage_a1Bbw)
kindElem :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindAppOp :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UOperator dom_a1Bbv stage_a1Bbw) (Ann UOperator dom_a1Bbv stage_a1Bbw)
kindAppFun :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
kindAppArg :: forall dom_a1Bbv stage_a1Bbw. Partial (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw) (Ann UKind dom_a1Bbv stage_a1Bbw)
contextAssertion :: forall dom_a1Cbb stage_a1Cbc dom'_a7p8I stage'_a7p8J. Lens (Ann UContext dom_a1Cbb stage_a1Cbc) (Ann UContext dom_a1Cbb stage_a1Cbc) (Ann UAssertion dom_a1Cbb stage_a1Cbc) (Ann UAssertion dom_a1Cbb stage_a1Cbc)
innerAsserts :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (AnnListG UAssertion dom_a1Cb9 stage_a1Cba) (AnnListG UAssertion dom_a1Cb9 stage_a1Cba)
assertTypes :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (AnnListG UType dom_a1Cb9 stage_a1Cba) (AnnListG UType dom_a1Cb9 stage_a1Cba)
assertRhs :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba)
assertOp :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UOperator dom_a1Cb9 stage_a1Cba) (Ann UOperator dom_a1Cb9 stage_a1Cba)
assertLhs :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba)
assertImplVar :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UName dom_a1Cb9 stage_a1Cba) (Ann UName dom_a1Cb9 stage_a1Cba)
assertImplType :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba) (Ann UType dom_a1Cb9 stage_a1Cba)
assertClsName :: forall dom_a1Cb9 stage_a1Cba. Partial (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UAssertion dom_a1Cb9 stage_a1Cba) (Ann UName dom_a1Cb9 stage_a1Cba) (Ann UName dom_a1Cb9 stage_a1Cba)
tupleSectionElems :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UTupSecElem dom_a1Fv9 stage_a1Fva) (AnnListG UTupSecElem dom_a1Fv9 stage_a1Fva)
tupleElems :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UExpr dom_a1Fv9 stage_a1Fva)
quotedName :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva)
procPattern :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UPattern dom_a1Fv9 stage_a1Fva) (Ann UPattern dom_a1Fv9 stage_a1Fva)
procExpr :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UCmd dom_a1Fv9 stage_a1Fva) (Ann UCmd dom_a1Fv9 stage_a1Fva)
listElems :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UExpr dom_a1Fv9 stage_a1Fva)
innerExpr :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprType :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UType dom_a1Fv9 stage_a1Fva) (Ann UType dom_a1Fv9 stage_a1Fva)
exprThen :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprStmts :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UStmt dom_a1Fv9 stage_a1Fva) (AnnListG UStmt dom_a1Fv9 stage_a1Fva)
exprSplice :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann USplice dom_a1Fv9 stage_a1Fva) (Ann USplice dom_a1Fv9 stage_a1Fva)
exprSig :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UType dom_a1Fv9 stage_a1Fva) (Ann UType dom_a1Fv9 stage_a1Fva)
exprRhs :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprRecName :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva)
exprRecFields :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UFieldUpdate dom_a1Fv9 stage_a1Fva) (AnnListG UFieldUpdate dom_a1Fv9 stage_a1Fva)
exprQQ :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UQuasiQuote dom_a1Fv9 stage_a1Fva) (Ann UQuasiQuote dom_a1Fv9 stage_a1Fva)
exprPragma :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExprPragma dom_a1Fv9 stage_a1Fva) (Ann UExprPragma dom_a1Fv9 stage_a1Fva)
exprOperator :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UOperator dom_a1Fv9 stage_a1Fva) (Ann UOperator dom_a1Fv9 stage_a1Fva)
exprName :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva) (Ann UName dom_a1Fv9 stage_a1Fva)
exprLit :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann ULiteral dom_a1Fv9 stage_a1Fva) (Ann ULiteral dom_a1Fv9 stage_a1Fva)
exprLhs :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprInner :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprIfAlts :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UGuardedCaseRhs dom_a1Fv9 stage_a1Fva) (AnnListG UGuardedCaseRhs dom_a1Fv9 stage_a1Fva)
exprFunBind :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG ULocalBind dom_a1Fv9 stage_a1Fva) (AnnListG ULocalBind dom_a1Fv9 stage_a1Fva)
exprFun :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprElse :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprCond :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprCase :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprBracket :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UBracket dom_a1Fv9 stage_a1Fva) (Ann UBracket dom_a1Fv9 stage_a1Fva)
exprBindings :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UPattern dom_a1Fv9 stage_a1Fva) (AnnListG UPattern dom_a1Fv9 stage_a1Fva)
exprArg :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
exprAlts :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UAlt dom_a1Fv9 stage_a1Fva) (AnnListG UAlt dom_a1Fv9 stage_a1Fva)
enumToFix :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
enumTo :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnMaybeG UExpr dom_a1Fv9 stage_a1Fva) (AnnMaybeG UExpr dom_a1Fv9 stage_a1Fva)
enumThen :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnMaybeG UExpr dom_a1Fv9 stage_a1Fva) (AnnMaybeG UExpr dom_a1Fv9 stage_a1Fva)
enumFrom :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
doKind :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UDoKind dom_a1Fv9 stage_a1Fva) (Ann UDoKind dom_a1Fv9 stage_a1Fva)
compExpr :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva)
compBody :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (AnnListG UListCompBody dom_a1Fv9 stage_a1Fva) (AnnListG UListCompBody dom_a1Fv9 stage_a1Fva)
arrowAppl :: forall dom_a1Fv9 stage_a1Fva. Partial (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UExpr dom_a1Fv9 stage_a1Fva) (Ann UArrowAppl dom_a1Fv9 stage_a1Fva) (Ann UArrowAppl dom_a1Fv9 stage_a1Fva)
altRhs :: forall expr_a1Fv0 dom_a1Fv1 stage_a1Fv2 expr'_a7sJE. Lens (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann (UCaseRhs' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann (UCaseRhs' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2)
altPattern :: forall expr_a1Fv0 dom_a1Fv1 stage_a1Fv2. Lens (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann UPattern dom_a1Fv1 stage_a1Fv2) (Ann UPattern dom_a1Fv1 stage_a1Fv2)
altBinds :: forall expr_a1Fv0 dom_a1Fv1 stage_a1Fv2. Lens (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (Ann (UAlt' expr_a1Fv0) dom_a1Fv1 stage_a1Fv2) (AnnMaybeG ULocalBinds dom_a1Fv1 stage_a1Fv2) (AnnMaybeG ULocalBinds dom_a1Fv1 stage_a1Fv2)
fieldWildcard :: forall dom_a1Fv7 stage_a1Fv8. Partial (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UFieldWildcard dom_a1Fv7 stage_a1Fv8) (Ann UFieldWildcard dom_a1Fv7 stage_a1Fv8)
fieldValue :: forall dom_a1Fv7 stage_a1Fv8. Partial (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UExpr dom_a1Fv7 stage_a1Fv8) (Ann UExpr dom_a1Fv7 stage_a1Fv8)
fieldUpdateName :: forall dom_a1Fv7 stage_a1Fv8. Partial (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UName dom_a1Fv7 stage_a1Fv8) (Ann UName dom_a1Fv7 stage_a1Fv8)
fieldName :: forall dom_a1Fv7 stage_a1Fv8. Partial (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UFieldUpdate dom_a1Fv7 stage_a1Fv8) (Ann UName dom_a1Fv7 stage_a1Fv8) (Ann UName dom_a1Fv7 stage_a1Fv8)
tupSecExpr :: forall dom_a1Fv3 stage_a1Fv4 dom'_a7sUU stage'_a7sUV. Partial (Ann UTupSecElem dom_a1Fv3 stage_a1Fv4) (Ann UTupSecElem dom_a1Fv3 stage_a1Fv4) (Ann UExpr dom_a1Fv3 stage_a1Fv4) (Ann UExpr dom_a1Fv3 stage_a1Fv4)
pragmaStr :: forall dom_a1FuS stage_a1FuT. Partial (Ann UExprPragma dom_a1FuS stage_a1FuT) (Ann UExprPragma dom_a1FuS stage_a1FuT) (Ann UStringNode dom_a1FuS stage_a1FuT) (Ann UStringNode dom_a1FuS stage_a1FuT)
pragmaSrcRange :: forall dom_a1FuS stage_a1FuT. Partial (Ann UExprPragma dom_a1FuS stage_a1FuT) (Ann UExprPragma dom_a1FuS stage_a1FuT) (Ann USourceRange dom_a1FuS stage_a1FuT) (Ann USourceRange dom_a1FuS stage_a1FuT)
rhsCaseGuards :: forall expr_a1FuX dom_a1FuY stage_a1FuZ. Partial (Ann (UCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ) (Ann (UCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ) (AnnListG (UGuardedCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ) (AnnListG (UGuardedCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ)
rhsCaseExpr :: forall expr_a1FuX dom_a1FuY stage_a1FuZ. Partial (Ann (UCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ) (Ann (UCaseRhs' expr_a1FuX) dom_a1FuY stage_a1FuZ) (Ann expr_a1FuX dom_a1FuY stage_a1FuZ) (Ann expr_a1FuX dom_a1FuY stage_a1FuZ)
caseGuardStmts :: forall expr_a1FuU dom_a1FuV stage_a1FuW. Lens (Ann (UGuardedCaseRhs' expr_a1FuU) dom_a1FuV stage_a1FuW) (Ann (UGuardedCaseRhs' expr_a1FuU) dom_a1FuV stage_a1FuW) (AnnListG URhsGuard dom_a1FuV stage_a1FuW) (AnnListG URhsGuard dom_a1FuV stage_a1FuW)
caseGuardExpr :: forall expr_a1FuU dom_a1FuV stage_a1FuW expr'_a7t4A. Lens (Ann (UGuardedCaseRhs' expr_a1FuU) dom_a1FuV stage_a1FuW) (Ann (UGuardedCaseRhs' expr_a1FuU) dom_a1FuV stage_a1FuW) (Ann expr_a1FuU dom_a1FuV stage_a1FuW) (Ann expr_a1FuU dom_a1FuV stage_a1FuW)
stmtPattern :: forall expr_a1EVz dom_a1EVA stage_a1EVB. Partial (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann UPattern dom_a1EVA stage_a1EVB) (Ann UPattern dom_a1EVA stage_a1EVB)
stmtExpr :: forall expr_a1EVz dom_a1EVA stage_a1EVB. Partial (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann expr_a1EVz dom_a1EVA stage_a1EVB) (Ann expr_a1EVz dom_a1EVA stage_a1EVB)
stmtBinds :: forall expr_a1EVz dom_a1EVA stage_a1EVB. Partial (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (AnnListG ULocalBind dom_a1EVA stage_a1EVB) (AnnListG ULocalBind dom_a1EVA stage_a1EVB)
cmdStmtBinds :: forall expr_a1EVz dom_a1EVA stage_a1EVB. Partial (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (Ann (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (AnnListG (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB) (AnnListG (UStmt' expr_a1EVz) dom_a1EVA stage_a1EVB)
usingExpr :: forall dom_a1EVv stage_a1EVw. Partial (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UCompStmt dom_a1EVv stage_a1EVw) (AnnMaybeG UExpr dom_a1EVv stage_a1EVw) (AnnMaybeG UExpr dom_a1EVv stage_a1EVw)
thenExpr :: forall dom_a1EVv stage_a1EVw. Partial (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UExpr dom_a1EVv stage_a1EVw) (Ann UExpr dom_a1EVv stage_a1EVw)
compStmt :: forall dom_a1EVv stage_a1EVw. Partial (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UStmt dom_a1EVv stage_a1EVw) (Ann UStmt dom_a1EVv stage_a1EVw)
byExpr :: forall dom_a1EVv stage_a1EVw. Partial (Ann UCompStmt dom_a1EVv stage_a1EVw) (Ann UCompStmt dom_a1EVv stage_a1EVw) (AnnMaybeG UExpr dom_a1EVv stage_a1EVw) (AnnMaybeG UExpr dom_a1EVv stage_a1EVw)
compStmts :: forall dom_a1EVx stage_a1EVy dom'_a7tns stage'_a7tnt. Lens (Ann UListCompBody dom_a1EVx stage_a1EVy) (Ann UListCompBody dom_a1EVx stage_a1EVy) (AnnListG UCompStmt dom_a1EVx stage_a1EVy) (AnnListG UCompStmt dom_a1EVx stage_a1EVy)
patternType :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UType dom_a1DNX stage_a1DNY) (Ann UType dom_a1DNX stage_a1DNY)
patternSplice :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann USplice dom_a1DNX stage_a1DNY) (Ann USplice dom_a1DNX stage_a1DNY)
patternRhs :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY)
patternOperator :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UOperator dom_a1DNX stage_a1DNY) (Ann UOperator dom_a1DNX stage_a1DNY)
patternName :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UName dom_a1DNX stage_a1DNY) (Ann UName dom_a1DNX stage_a1DNY)
patternLiteral :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann ULiteral dom_a1DNX stage_a1DNY) (Ann ULiteral dom_a1DNX stage_a1DNY)
patternLit :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann ULiteral dom_a1DNX stage_a1DNY) (Ann ULiteral dom_a1DNX stage_a1DNY)
patternLhs :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY)
patternInner :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY)
patternFields :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (AnnListG UPatternField dom_a1DNX stage_a1DNY) (AnnListG UPatternField dom_a1DNX stage_a1DNY)
patternExpr :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UExpr dom_a1DNX stage_a1DNY) (Ann UExpr dom_a1DNX stage_a1DNY)
patternElems :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (AnnListG UPattern dom_a1DNX stage_a1DNY) (AnnListG UPattern dom_a1DNX stage_a1DNY)
patternArgs :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (AnnListG UPattern dom_a1DNX stage_a1DNY) (AnnListG UPattern dom_a1DNX stage_a1DNY)
patQQ :: forall dom_a1DNX stage_a1DNY. Partial (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UPattern dom_a1DNX stage_a1DNY) (Ann UQuasiQuote dom_a1DNX stage_a1DNY) (Ann UQuasiQuote dom_a1DNX stage_a1DNY)
fieldPatternWildcard :: forall dom_a1DNV stage_a1DNW. Partial (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UFieldWildcard dom_a1DNV stage_a1DNW) (Ann UFieldWildcard dom_a1DNV stage_a1DNW)
fieldPatternName :: forall dom_a1DNV stage_a1DNW. Partial (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UName dom_a1DNV stage_a1DNW) (Ann UName dom_a1DNV stage_a1DNW)
fieldPattern :: forall dom_a1DNV stage_a1DNW. Partial (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UPatternField dom_a1DNV stage_a1DNW) (Ann UPattern dom_a1DNV stage_a1DNW) (Ann UPattern dom_a1DNV stage_a1DNW)
spliceId :: forall dom_a1TIs stage_a1TIt. Partial (Ann USplice dom_a1TIs stage_a1TIt) (Ann USplice dom_a1TIs stage_a1TIt) (Ann UName dom_a1TIs stage_a1TIt) (Ann UName dom_a1TIs stage_a1TIt)
spliceExpr :: forall dom_a1TIs stage_a1TIt. Partial (Ann USplice dom_a1TIs stage_a1TIt) (Ann USplice dom_a1TIs stage_a1TIt) (Ann UExpr dom_a1TIs stage_a1TIt) (Ann UExpr dom_a1TIs stage_a1TIt)
qqExprName :: forall dom_a1TIq stage_a1TIr. Lens (Ann UQuasiQuote dom_a1TIq stage_a1TIr) (Ann UQuasiQuote dom_a1TIq stage_a1TIr) (Ann UName dom_a1TIq stage_a1TIr) (Ann UName dom_a1TIq stage_a1TIr)
qqExprBody :: forall dom_a1TIq stage_a1TIr. Lens (Ann UQuasiQuote dom_a1TIq stage_a1TIr) (Ann UQuasiQuote dom_a1TIq stage_a1TIr) (Ann QQString dom_a1TIq stage_a1TIr) (Ann QQString dom_a1TIq stage_a1TIr)
qqString :: forall dom_a1TIo stage_a1TIp. Lens (Ann QQString dom_a1TIo stage_a1TIp) (Ann QQString dom_a1TIo stage_a1TIp) String String
bracketType :: forall dom_a1TIm stage_a1TIn. Partial (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UType dom_a1TIm stage_a1TIn) (Ann UType dom_a1TIm stage_a1TIn)
bracketPattern :: forall dom_a1TIm stage_a1TIn. Partial (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UPattern dom_a1TIm stage_a1TIn) (Ann UPattern dom_a1TIm stage_a1TIn)
bracketExpr :: forall dom_a1TIm stage_a1TIn. Partial (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UExpr dom_a1TIm stage_a1TIn) (Ann UExpr dom_a1TIm stage_a1TIn)
bracketDecl :: forall dom_a1TIm stage_a1TIn. Partial (Ann UBracket dom_a1TIm stage_a1TIn) (Ann UBracket dom_a1TIm stage_a1TIn) (AnnListG UDecl dom_a1TIm stage_a1TIn) (AnnListG UDecl dom_a1TIm stage_a1TIn)
stringLitValue :: forall dom_a19Ku stage_a19Kv. Partial (Ann ULiteral dom_a19Ku stage_a19Kv) (Ann ULiteral dom_a19Ku stage_a19Kv) String String
intLitValue :: forall dom_a19Ku stage_a19Kv. Partial (Ann ULiteral dom_a19Ku stage_a19Kv) (Ann ULiteral dom_a19Ku stage_a19Kv) Integer Integer
fracLitValue :: forall dom_a19Ku stage_a19Kv. Partial (Ann ULiteral dom_a19Ku stage_a19Kv) (Ann ULiteral dom_a19Ku stage_a19Kv) Rational Rational
floatLitValue :: forall dom_a19Ku stage_a19Kv. Partial (Ann ULiteral dom_a19Ku stage_a19Kv) (Ann ULiteral dom_a19Ku stage_a19Kv) Rational Rational
charLitValue :: forall dom_a19Ku stage_a19Kv. Partial (Ann ULiteral dom_a19Ku stage_a19Kv) (Ann ULiteral dom_a19Ku stage_a19Kv) Char Char
promotedStringValue :: forall t_a1Bbs dom_a1Bbt stage_a1Bbu. Partial (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) String String
promotedIntValue :: forall t_a1Bbs dom_a1Bbt stage_a1Bbu. Partial (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) Integer Integer
promotedElements :: forall t_a1Bbs dom_a1Bbt stage_a1Bbu t'_a7uH3. Partial (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (AnnListG t_a1Bbs dom_a1Bbt stage_a1Bbu) (AnnListG t_a1Bbs dom_a1Bbt stage_a1Bbu)
promotedConName :: forall t_a1Bbs dom_a1Bbt stage_a1Bbu. Partial (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (Ann (UPromoted t_a1Bbs) dom_a1Bbt stage_a1Bbu) (Ann UName dom_a1Bbt stage_a1Bbu) (Ann UName dom_a1Bbt stage_a1Bbu)
operatorName :: forall dom_a1AD0 stage_a1AD1 dom'_a7uQ7 stage'_a7uQ8. Lens (Ann UOperator dom_a1AD0 stage_a1AD1) (Ann UOperator dom_a1AD0 stage_a1AD1) (Ann UQualifiedName dom_a1AD0 stage_a1AD1) (Ann UQualifiedName dom_a1AD0 stage_a1AD1)
simpleName :: forall dom_a1ACY stage_a1ACZ dom'_a7uRz stage'_a7uRA. Lens (Ann UName dom_a1ACY stage_a1ACZ) (Ann UName dom_a1ACY stage_a1ACZ) (Ann UQualifiedName dom_a1ACY stage_a1ACZ) (Ann UQualifiedName dom_a1ACY stage_a1ACZ)
unqualifiedName :: forall dom_a1ACW stage_a1ACX. Lens (Ann UQualifiedName dom_a1ACW stage_a1ACX) (Ann UQualifiedName dom_a1ACW stage_a1ACX) (Ann UNamePart dom_a1ACW stage_a1ACX) (Ann UNamePart dom_a1ACW stage_a1ACX)
qualifiers :: forall dom_a1ACW stage_a1ACX. Lens (Ann UQualifiedName dom_a1ACW stage_a1ACX) (Ann UQualifiedName dom_a1ACW stage_a1ACX) (AnnListG UNamePart dom_a1ACW stage_a1ACX) (AnnListG UNamePart dom_a1ACW stage_a1ACX)
simpleNameStr :: forall dom_a1ACU stage_a1ACV. Lens (Ann UNamePart dom_a1ACU stage_a1ACV) (Ann UNamePart dom_a1ACU stage_a1ACV) String String
stringNodeStr :: forall dom_a1ACS stage_a1ACT. Lens (Ann UStringNode dom_a1ACS stage_a1ACT) (Ann UStringNode dom_a1ACS stage_a1ACT) String String


-- | Helper functions for using the AST.
module Language.Haskell.Tools.AST.Helpers

-- | Does the import declaration import only the explicitly listed
--   elements?
importIsExact :: Ann UImportDecl dom stage -> Bool

-- | Does the import declaration import all elements that are not excluded
--   explicitly?
importIsHiding :: Ann UImportDecl dom stage -> Bool

-- | Accesses the name of a function or value binding
bindingName :: Simple Traversal (Ann UValueBind dom stage) (Ann UQualifiedName dom stage)

-- | Accesses that name of a declaration through the declaration head.
declHeadNames :: Simple Traversal (Ann UDeclHead dom stage) (Ann UQualifiedName dom stage)

-- | A reference to access type arguments to a type constructor call that
--   may be universally qualified or parenthesized.
typeParams :: Simple Traversal (Ann UType dom stage) (Ann UType dom stage)
valBindPats :: Simple Traversal (Ann UValueBind dom stage) (Ann UPattern dom stage)

-- | Access the semantic information of an AST node.
semantics :: Simple Lens (Ann elem dom stage) (SemanticInfo dom elem)

-- | Get all nodes that contain a given source range
nodesContaining :: (HasRange (inner dom stage), Biplate (node dom stage) (inner dom stage)) => RealSrcSpan -> Simple Traversal (node dom stage) (inner dom stage)

-- | Return true if the node contains a given range
isInside :: HasRange (inner dom stage) => RealSrcSpan -> inner dom stage -> Bool

-- | Get all nodes that are contained in a given source range
nodesContained :: (HasRange (inner dom stage), Biplate (node dom stage) (inner dom stage)) => RealSrcSpan -> Simple Traversal (node dom stage) (inner dom stage)

-- | Return true if the node contains a given range
isContained :: HasRange (inner dom stage) => RealSrcSpan -> inner dom stage -> Bool

-- | Get the nodes that have exactly the given range
nodesWithRange :: (Biplate (Ann node dom stage) (Ann inner dom stage), SourceInfo stage) => RealSrcSpan -> Simple Traversal (Ann node dom stage) (Ann inner dom stage)

-- | Get the shortest source range that contains the given
getNodeContaining :: (Biplate (Ann node dom stage) (Ann inner dom stage), SourceInfo stage, HasRange (Ann inner dom stage)) => RealSrcSpan -> Ann node dom stage -> Maybe (Ann inner dom stage)

-- | Compares two source spans based on their lengths. Can only used for
--   NESTED spans.
compareRangeLength :: SrcSpan -> SrcSpan -> Ordering

-- | A class to access the names of named elements. Have to locate where
--   does the AST element store its name. The returned name will be the one
--   that was marked isDefining.
class NamedElement elem
elementName :: NamedElement elem => Simple Traversal (Ann elem dom st) (Ann UQualifiedName dom st)
inScope :: Name -> Scope -> Bool
instance Language.Haskell.Tools.AST.Helpers.NamedElement Language.Haskell.Tools.AST.Representation.Decls.UDecl
instance Language.Haskell.Tools.AST.Helpers.NamedElement Language.Haskell.Tools.AST.Representation.Binds.ULocalBind

module Language.Haskell.Tools.AST.SemaInfoClasses

-- | Domains that have semantic information for names
type HasNameInfo dom = (Domain dom, HasNameInfo' (SemanticInfo dom UQualifiedName))

-- | Infos that may have a name that can be extracted
class HasNameInfo' si
semanticsName :: HasNameInfo' si => si -> Maybe Name
type HasIdInfo dom = (Domain dom, HasIdInfo' (SemanticInfo dom UQualifiedName))

-- | Infos that may have a typed name that can be extracted
class HasNameInfo' si => HasIdInfo' si
semanticsId :: HasIdInfo' si => si -> Id
type HasFixityInfo dom = (Domain dom, HasFixityInfo' (SemanticInfo dom UQualifiedName))

-- | Infos that may have a fixity information
class HasFixityInfo' si
semanticsFixity :: HasFixityInfo' si => si -> Maybe Fixity
type HasScopeInfo dom = (Domain dom, HasScopeInfo' (SemanticInfo dom UQualifiedName), HasScopeInfo' (SemanticInfo dom UExpr))

-- | Infos that contain the names that are available in theirs scope
class HasScopeInfo' si
semanticsScope :: HasScopeInfo' si => si -> Scope
type HasDefiningInfo dom = (Domain dom, HasDefiningInfo' (SemanticInfo dom UQualifiedName))

-- | Infos that store if they were used to define a name
class HasDefiningInfo' si
semanticsDefining :: HasDefiningInfo' si => si -> Bool
class HasSourceInfoInSema' si
semanticsSourceInfo :: HasSourceInfoInSema' si => si -> Maybe SrcSpan
type HasModuleInfo dom = (Domain dom, HasModuleInfo' (SemanticInfo dom UModule))
class HasModuleInfo' si
semanticsModule :: HasModuleInfo' si => si -> Module
semanticsDynFlags :: HasModuleInfo' si => si -> DynFlags
isBootModule :: HasModuleInfo' si => si -> Bool
semanticsImplicitImports :: HasModuleInfo' si => si -> [Name]
semanticsPrelOrphanInsts :: HasModuleInfo' si => si -> [ClsInst]
semanticsPrelFamInsts :: HasModuleInfo' si => si -> [FamInst]
type HasImportInfo dom = (Domain dom, HasImportInfo' (SemanticInfo dom UImportDecl))
class HasImportInfo' si
semanticsImportedModule :: HasImportInfo' si => si -> Module
semanticsAvailable :: HasImportInfo' si => si -> [Name]
semanticsImported :: HasImportInfo' si => si -> [Name]
semanticsOrphanInsts :: HasImportInfo' si => si -> [ClsInst]
semanticsFamInsts :: HasImportInfo' si => si -> [FamInst]
type HasImplicitFieldsInfo dom = (Domain dom, HasImplicitFieldsInfo' (SemanticInfo dom UFieldWildcard))
class HasImplicitFieldsInfo' si
semanticsImplicitFlds :: HasImplicitFieldsInfo' si => si -> [(Name, Name)]
type HasNoSemanticInfo dom si = SemanticInfo dom si ~ NoSemanticInfo
data UsageSpec
UsageSpec :: Bool -> String -> String -> UsageSpec
[usageQualified] :: UsageSpec -> Bool
[usageQualifier] :: UsageSpec -> String
[usageAs] :: UsageSpec -> String
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasNameInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo Name.Name)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasNameInfo' Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasNameInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasNameInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Names.UQualifiedName dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasIdInfo' Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasIdInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasIdInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Names.UQualifiedName dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasFixityInfo' Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasFixityInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasFixityInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Names.UQualifiedName dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo' Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo' Language.Haskell.Tools.AST.SemaInfoTypes.ScopeInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Exprs.UExpr dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasScopeInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Names.UQualifiedName dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasDefiningInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasDefiningInfo' Language.Haskell.Tools.AST.SemaInfoTypes.CNameInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasDefiningInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasDefiningInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Names.UQualifiedName dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasSourceInfoInSema' (Language.Haskell.Tools.AST.SemaInfoTypes.NameInfo n)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasModuleInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo Name.Name)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasModuleInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.ModuleInfo Var.Id)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasModuleInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasModuleInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Modules.UModule dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasImportInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo Name.Name)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasImportInfo' (Language.Haskell.Tools.AST.SemaInfoTypes.ImportInfo Var.Id)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasImportInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasImportInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Modules.UImportDecl dom st)
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasImplicitFieldsInfo' Language.Haskell.Tools.AST.SemaInfoTypes.ImplicitFieldInfo
instance Language.Haskell.Tools.AST.SemaInfoClasses.HasImplicitFieldsInfo dom => Language.Haskell.Tools.AST.SemaInfoClasses.HasImplicitFieldsInfo' (Language.Haskell.Tools.AST.Ann.Ann Language.Haskell.Tools.AST.Representation.Exprs.UFieldWildcard dom st)


-- | A custom AST representation for Haskell tools. Different layers of the
--   AST are recursive, to separate them into modules we introduced source
--   imports.
module Language.Haskell.Tools.AST

-- | The representation of a haskell module, that is a separate compilation
--   unit. It may or may not have a header.
data UModule dom stage
UModule :: AnnListG UFilePragma dom stage -> AnnMaybeG UModuleHead dom stage -> AnnListG UImportDecl dom stage -> AnnListG UDecl dom stage -> UModule dom stage
[_filePragmas] :: UModule dom stage -> AnnListG UFilePragma dom stage
[_modHead] :: UModule dom stage -> AnnMaybeG UModuleHead dom stage
[_modImports] :: UModule dom stage -> AnnListG UImportDecl dom stage
[_modDecl] :: UModule dom stage -> AnnListG UDecl dom stage

-- | Module declaration with name and (optional) exports
data UModuleHead dom stage
UModuleHead :: Ann UModuleName dom stage -> AnnMaybeG UModulePragma dom stage -> AnnMaybeG UExportSpecs dom stage -> UModuleHead dom stage
[_mhName] :: UModuleHead dom stage -> Ann UModuleName dom stage
[_mhPragma] :: UModuleHead dom stage -> AnnMaybeG UModulePragma dom stage
[_mhExports] :: UModuleHead dom stage -> AnnMaybeG UExportSpecs dom stage

-- | A list of export specifications surrounded by parentheses
data UExportSpecs dom stage
UExportSpecs :: AnnListG UExportSpec dom stage -> UExportSpecs dom stage
[_espExports] :: UExportSpecs dom stage -> AnnListG UExportSpec dom stage

-- | Export specifier
data UExportSpec dom stage

-- | Export a name and related names
UDeclExport :: Ann UIESpec dom stage -> UExportSpec dom stage
[_exportDecl] :: UExportSpec dom stage -> Ann UIESpec dom stage

-- | The export of an imported module (<tt> module A </tt>)
UModuleExport :: Ann UModuleName dom stage -> UExportSpec dom stage
[_exportModuleName] :: UExportSpec dom stage -> Ann UModuleName dom stage

-- | Marks a name to be imported or exported with related names
--   (subspecifier)
data UIESpec dom stage
UIESpec :: AnnMaybeG UImportModifier dom stage -> Ann UName dom stage -> AnnMaybeG USubSpec dom stage -> UIESpec dom stage
[_ieModifier] :: UIESpec dom stage -> AnnMaybeG UImportModifier dom stage
[_ieName] :: UIESpec dom stage -> Ann UName dom stage
[_ieSubspec] :: UIESpec dom stage -> AnnMaybeG USubSpec dom stage

-- | Specifies the imported element
data UImportModifier dom stage

-- | <tt>pattern</tt>: modifier for importing pattern synonyms
UImportPattern :: UImportModifier dom stage

-- | Marks how related names will be imported or exported with a given name
data USubSpec dom stage

-- | <tt>(..)</tt>: a class exported with all of its methods, or a datatype
--   exported with all of its constructors.
USubSpecAll :: USubSpec dom stage

-- | <tt>(a,b,c)</tt>: a class exported with some of its methods, or a
--   datatype exported with some of its constructors.
USubSpecList :: AnnListG UName dom stage -> USubSpec dom stage
[_essList] :: USubSpec dom stage -> AnnListG UName dom stage

-- | Pragmas that must be used before defining the module
data UFilePragma dom stage

-- | <tt>LANGUAGE</tt> pragma, listing the enabled language extensions in
--   that file
ULanguagePragma :: AnnListG ULanguageExtension dom stage -> UFilePragma dom stage
[_lpPragmas] :: UFilePragma dom stage -> AnnListG ULanguageExtension dom stage

-- | <tt>OPTIONS</tt> pragma, possibly qualified with a tool, e.g.
--   OPTIONS_GHC
UOptionsPragma :: Ann UStringNode dom stage -> UFilePragma dom stage
[_opStr] :: UFilePragma dom stage -> Ann UStringNode dom stage

-- | Pragmas that must be used after the module head
data UModulePragma dom stage

-- | A warning pragma attached to the module
UModuleWarningPragma :: AnnListG UStringNode dom stage -> UModulePragma dom stage
[_modWarningStr] :: UModulePragma dom stage -> AnnListG UStringNode dom stage

-- | A deprecated pragma attached to the module
UModuleDeprecatedPragma :: AnnListG UStringNode dom stage -> UModulePragma dom stage
[_modDeprecatedPragma] :: UModulePragma dom stage -> AnnListG UStringNode dom stage

-- | The name of the enabled language extension, for example (<tt>
--   LambdaCase </tt>)
data ULanguageExtension dom stage
ULanguageExtension :: String -> ULanguageExtension dom stage
[_langExt] :: ULanguageExtension dom stage -> String

-- | An import declaration: <tt>import Module.Name</tt>
data UImportDecl dom stage
UImportDecl :: AnnMaybeG UImportSource dom stage -> AnnMaybeG UImportQualified dom stage -> AnnMaybeG UImportSafe dom stage -> AnnMaybeG UStringNode dom stage -> Ann UModuleName dom stage -> AnnMaybeG UImportRenaming dom stage -> AnnMaybeG UImportSpec dom stage -> UImportDecl dom stage
[_importSource] :: UImportDecl dom stage -> AnnMaybeG UImportSource dom stage
[_importQualified] :: UImportDecl dom stage -> AnnMaybeG UImportQualified dom stage
[_importSafe] :: UImportDecl dom stage -> AnnMaybeG UImportSafe dom stage
[_importPkg] :: UImportDecl dom stage -> AnnMaybeG UStringNode dom stage
[_importModule] :: UImportDecl dom stage -> Ann UModuleName dom stage
[_importAs] :: UImportDecl dom stage -> AnnMaybeG UImportRenaming dom stage
[_importSpec] :: UImportDecl dom stage -> AnnMaybeG UImportSpec dom stage

-- | Restriction on the imported names
data UImportSpec dom stage

-- | Restrict the import definition to ONLY import the listed names
UImportSpecList :: AnnListG UIESpec dom stage -> UImportSpec dom stage
[_importSpecList] :: UImportSpec dom stage -> AnnListG UIESpec dom stage

-- | Restrict the import definition to DONT import the listed names
UImportSpecHiding :: AnnListG UIESpec dom stage -> UImportSpec dom stage
[_importSpecHiding] :: UImportSpec dom stage -> AnnListG UIESpec dom stage

-- | Marks the import as qualified: <tt>qualified</tt>
data UImportQualified dom stage
UImportQualified :: UImportQualified dom stage

-- | Marks the import as source: <tt>{--}</tt>
data UImportSource dom stage
UImportSource :: UImportSource dom stage

-- | Marks the import as safe: <tt>safe</tt>
data UImportSafe dom stage
UImportSafe :: UImportSafe dom stage

-- | Marks an imported name to belong to the type namespace: <tt>type</tt>
data UTypeNamespace dom stage
UTypeNamespace :: UTypeNamespace dom stage

-- | Renaming imports (<tt> as A </tt>)
data UImportRenaming dom stage
UImportRenaming :: Ann UModuleName dom stage -> UImportRenaming dom stage
[_importRename] :: UImportRenaming dom stage -> Ann UModuleName dom stage

-- | The name of a module
data UModuleName dom stage
UModuleName :: String -> UModuleName dom stage
[_moduleNameString] :: UModuleName dom stage -> String

-- | The <tt>type</tt> keyword used to qualify that the type and not the
--   constructor of the same name is referred
data TypeKeyword dom stage
TypeKeyword :: TypeKeyword dom stage

-- | A template haskell splice
data USplice dom stage

-- | A simple name splice: <tt>$generateX</tt>
UIdSplice :: Ann UName dom stage -> USplice dom stage
[_spliceId] :: USplice dom stage -> Ann UName dom stage

-- | A splice with parentheses: <tt>$(generate input)</tt>
UParenSplice :: Ann UExpr dom stage -> USplice dom stage
[_spliceExpr] :: USplice dom stage -> Ann UExpr dom stage

-- | Template haskell quasi-quotation: <tt>[quoter|str]</tt>
data UQuasiQuote dom stage
UQuasiQuote :: Ann UName dom stage -> Ann QQString dom stage -> UQuasiQuote dom stage
[_qqExprName] :: UQuasiQuote dom stage -> Ann UName dom stage
[_qqExprBody] :: UQuasiQuote dom stage -> Ann QQString dom stage

-- | Template Haskell Quasi-quotation content
data QQString dom stage
QQString :: String -> QQString dom stage
[_qqString] :: QQString dom stage -> String

-- | Template Haskell bracket expressions
data UBracket dom stage

-- | Expression bracket (<tt> [| x + y |] </tt>)
UExprBracket :: Ann UExpr dom stage -> UBracket dom stage
[_bracketExpr] :: UBracket dom stage -> Ann UExpr dom stage

-- | Pattern bracket (<tt> [p| Point x y |] </tt>)
UPatternBracket :: Ann UPattern dom stage -> UBracket dom stage
[_bracketPattern] :: UBracket dom stage -> Ann UPattern dom stage

-- | Type bracket (<tt> [t| (Int,Int) |] </tt>)
UTypeBracket :: Ann UType dom stage -> UBracket dom stage
[_bracketType] :: UBracket dom stage -> Ann UType dom stage

-- | Declaration bracket (<tt> [d| f :: Int -&gt; Int; f x = x*x |] </tt>)
UDeclsBracket :: AnnListG UDecl dom stage -> UBracket dom stage
[_bracketDecl] :: UBracket dom stage -> AnnListG UDecl dom stage

-- | Haskell declarationw
data UDecl dom stage

-- | A type synonym ( <tt>type String = [Char]</tt> )
UTypeDecl :: Ann UDeclHead dom stage -> Ann UType dom stage -> UDecl dom stage
[_declHead] :: UDecl dom stage -> Ann UDeclHead dom stage
[_declType] :: UDecl dom stage -> Ann UType dom stage

-- | A type family declaration ( <tt>type family F x</tt> )
UTypeFamilyDecl :: Ann UTypeFamily dom stage -> UDecl dom stage
[_declTypeFamily] :: UDecl dom stage -> Ann UTypeFamily dom stage

-- | A closed type family declaration
UClosedTypeFamilyDecl :: Ann UDeclHead dom stage -> AnnMaybeG UTypeFamilySpec dom stage -> AnnListG UTypeEqn dom stage -> UDecl dom stage
[_declHead] :: UDecl dom stage -> Ann UDeclHead dom stage
[_declSpec] :: UDecl dom stage -> AnnMaybeG UTypeFamilySpec dom stage

-- | cannot be empty
[_declDecl] :: UDecl dom stage -> AnnListG UTypeEqn dom stage

-- | A data or newtype declaration. Empty data type declarations without
--   where keyword are always belong to DataDecl.
UDataDecl :: Ann UDataOrNewtypeKeyword dom stage -> AnnMaybeG UContext dom stage -> Ann UDeclHead dom stage -> AnnListG UConDecl dom stage -> AnnMaybeG UDeriving dom stage -> UDecl dom stage
[_declNewtype] :: UDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_declCtx] :: UDecl dom stage -> AnnMaybeG UContext dom stage
[_declHead] :: UDecl dom stage -> Ann UDeclHead dom stage
[_declCons] :: UDecl dom stage -> AnnListG UConDecl dom stage
[_declDeriving] :: UDecl dom stage -> AnnMaybeG UDeriving dom stage

-- | A GADT-style data or newtype declaration.
UGDataDecl :: Ann UDataOrNewtypeKeyword dom stage -> AnnMaybeG UContext dom stage -> Ann UDeclHead dom stage -> AnnMaybeG UKindConstraint dom stage -> AnnListG UGadtConDecl dom stage -> AnnMaybeG UDeriving dom stage -> UDecl dom stage
[_declNewtype] :: UDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_declCtx] :: UDecl dom stage -> AnnMaybeG UContext dom stage
[_declHead] :: UDecl dom stage -> Ann UDeclHead dom stage
[_declKind] :: UDecl dom stage -> AnnMaybeG UKindConstraint dom stage
[_declGadt] :: UDecl dom stage -> AnnListG UGadtConDecl dom stage
[_declDeriving] :: UDecl dom stage -> AnnMaybeG UDeriving dom stage

-- | Type family instance declaration (<tt> type instance Fam T = AssignedT
--   </tt>)
UTypeInstDecl :: Ann UInstanceRule dom stage -> Ann UType dom stage -> UDecl dom stage
[_declInstance] :: UDecl dom stage -> Ann UInstanceRule dom stage
[_declAssignedType] :: UDecl dom stage -> Ann UType dom stage

-- | Data instance declaration (<tt> data instance Fam T = Con1 | Con2
--   </tt>)
UDataInstDecl :: Ann UDataOrNewtypeKeyword dom stage -> Ann UInstanceRule dom stage -> AnnListG UConDecl dom stage -> AnnMaybeG UDeriving dom stage -> UDecl dom stage
[_declNewtype] :: UDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_declInstance] :: UDecl dom stage -> Ann UInstanceRule dom stage
[_declCons] :: UDecl dom stage -> AnnListG UConDecl dom stage
[_declDeriving] :: UDecl dom stage -> AnnMaybeG UDeriving dom stage

-- | GADT-style data instance declaration (<tt> data instance Fam T where
--   ... </tt>)
UGDataInstDecl :: Ann UDataOrNewtypeKeyword dom stage -> Ann UInstanceRule dom stage -> AnnMaybeG UKindConstraint dom stage -> AnnListG UGadtConDecl dom stage -> UDecl dom stage
[_declNewtype] :: UDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_declInstance] :: UDecl dom stage -> Ann UInstanceRule dom stage
[_declKind] :: UDecl dom stage -> AnnMaybeG UKindConstraint dom stage
[_declGadt] :: UDecl dom stage -> AnnListG UGadtConDecl dom stage

-- | Type class declaration (<tt> class X a [where f = ...] </tt>)
UClassDecl :: AnnMaybeG UContext dom stage -> Ann UDeclHead dom stage -> AnnMaybeG UFunDeps dom stage -> AnnMaybeG UClassBody dom stage -> UDecl dom stage
[_declCtx] :: UDecl dom stage -> AnnMaybeG UContext dom stage
[_declHead] :: UDecl dom stage -> Ann UDeclHead dom stage
[_declFunDeps] :: UDecl dom stage -> AnnMaybeG UFunDeps dom stage
[_declBody] :: UDecl dom stage -> AnnMaybeG UClassBody dom stage

-- | Instance declaration (<tt> instance X T [where f = ...] </tt>)
UInstDecl :: AnnMaybeG UOverlapPragma dom stage -> Ann UInstanceRule dom stage -> AnnMaybeG UInstBody dom stage -> UDecl dom stage
[_declOverlap] :: UDecl dom stage -> AnnMaybeG UOverlapPragma dom stage
[_declInstRule] :: UDecl dom stage -> Ann UInstanceRule dom stage
[_declInstDecl] :: UDecl dom stage -> AnnMaybeG UInstBody dom stage

-- | Pattern synonyms (<tt> pattern Arrow t1 t2 = App "-&gt;" [t1, t2]
--   </tt>)
UPatternSynonymDecl :: Ann UPatternSynonym dom stage -> UDecl dom stage
[_declPatSyn] :: UDecl dom stage -> Ann UPatternSynonym dom stage

-- | Standalone deriving declaration (<tt> deriving instance X T </tt>)
UDerivDecl :: AnnMaybeG UOverlapPragma dom stage -> Ann UInstanceRule dom stage -> UDecl dom stage
[_declOverlap] :: UDecl dom stage -> AnnMaybeG UOverlapPragma dom stage
[_declInstRule] :: UDecl dom stage -> Ann UInstanceRule dom stage

-- | Fixity declaration (<tt> infixl 5 +, - </tt>)
UFixityDecl :: Ann UFixitySignature dom stage -> UDecl dom stage
[_declFixity] :: UDecl dom stage -> Ann UFixitySignature dom stage

-- | Default types (<tt> default (T1, T2) </tt>)
UDefaultDecl :: AnnListG UType dom stage -> UDecl dom stage
[_declTypes] :: UDecl dom stage -> AnnListG UType dom stage

-- | Type signature declaration (<tt> f :: Int -&gt; Int </tt>)
UTypeSigDecl :: Ann UTypeSignature dom stage -> UDecl dom stage
[_declTypeSig] :: UDecl dom stage -> Ann UTypeSignature dom stage

-- | Pattern type signature declaration (<tt> pattern Succ :: Int -&gt; Int
--   </tt>)
UPatTypeSigDecl :: Ann UPatternTypeSignature dom stage -> UDecl dom stage
[_declPatTypeSig] :: UDecl dom stage -> Ann UPatternTypeSignature dom stage

-- | Function or value binding (<tt> f x = 12 </tt>)
UValueBinding :: Ann UValueBind dom stage -> UDecl dom stage
[_declValBind] :: UDecl dom stage -> Ann UValueBind dom stage

-- | Foreign import (<tt> foreign import _foo :: Int -&gt; IO Int </tt>)
UForeignImport :: Ann UCallConv dom stage -> AnnMaybeG USafety dom stage -> Ann UName dom stage -> Ann UType dom stage -> UDecl dom stage
[_declCallConv] :: UDecl dom stage -> Ann UCallConv dom stage
[_declSafety] :: UDecl dom stage -> AnnMaybeG USafety dom stage
[_declName] :: UDecl dom stage -> Ann UName dom stage
[_declForeignType] :: UDecl dom stage -> Ann UType dom stage

-- | Foreign export (<tt> foreign export ccall _foo :: Int -&gt; IO Int
--   </tt>)
UForeignExport :: Ann UCallConv dom stage -> Ann UName dom stage -> Ann UType dom stage -> UDecl dom stage
[_declCallConv] :: UDecl dom stage -> Ann UCallConv dom stage
[_declName] :: UDecl dom stage -> Ann UName dom stage
[_declForeignType] :: UDecl dom stage -> Ann UType dom stage

-- | Top-level pragmas
UPragmaDecl :: Ann UTopLevelPragma dom stage -> UDecl dom stage
[_declPragma] :: UDecl dom stage -> Ann UTopLevelPragma dom stage

-- | Role annotations (<tt> type role Ptr representational </tt>)
URoleDecl :: Ann UQualifiedName dom stage -> AnnListG URole dom stage -> UDecl dom stage
[_declRoleType] :: UDecl dom stage -> Ann UQualifiedName dom stage
[_declRoles] :: UDecl dom stage -> AnnListG URole dom stage

-- | A Template Haskell splice declaration (<tt> $(generateDecls) </tt>)
USpliceDecl :: Ann USplice dom stage -> UDecl dom stage
[_declSplice] :: UDecl dom stage -> Ann USplice dom stage
data UDeclHead dom stage

-- | Type or class name
UDeclHead :: Ann UName dom stage -> UDeclHead dom stage
[_dhName] :: UDeclHead dom stage -> Ann UName dom stage

-- | Parenthesized type
UDHParen :: Ann UDeclHead dom stage -> UDeclHead dom stage
[_dhBody] :: UDeclHead dom stage -> Ann UDeclHead dom stage

-- | Type application
UDHApp :: Ann UDeclHead dom stage -> Ann UTyVar dom stage -> UDeclHead dom stage
[_dhAppFun] :: UDeclHead dom stage -> Ann UDeclHead dom stage
[_dhAppOperand] :: UDeclHead dom stage -> Ann UTyVar dom stage

-- | Infix application of the type/class name to the left operand
UDHInfix :: Ann UTyVar dom stage -> Ann UOperator dom stage -> Ann UTyVar dom stage -> UDeclHead dom stage
[_dhLeft] :: UDeclHead dom stage -> Ann UTyVar dom stage
[_dhOperator] :: UDeclHead dom stage -> Ann UOperator dom stage
[_dhRight] :: UDeclHead dom stage -> Ann UTyVar dom stage

-- | The list of declarations that can appear in a typeclass
data UClassBody dom stage
UClassBody :: AnnListG UClassElement dom stage -> UClassBody dom stage
[_cbElements] :: UClassBody dom stage -> AnnListG UClassElement dom stage

-- | Members of a class declaration
data UClassElement dom stage

-- | Signature: <tt> f :: A -&gt; B </tt>
UClsSig :: Ann UTypeSignature dom stage -> UClassElement dom stage
[_ceTypeSig] :: UClassElement dom stage -> Ann UTypeSignature dom stage

-- | Fixity signature in class: <tt> infixl 1 &gt;&gt;- </tt>
UClsFixity :: Ann UFixitySignature dom stage -> UClassElement dom stage
[_clsFixity] :: UClassElement dom stage -> Ann UFixitySignature dom stage

-- | Default binding: <tt> f x = "aaa" </tt>
UClsDef :: Ann UValueBind dom stage -> UClassElement dom stage
[_ceBind] :: UClassElement dom stage -> Ann UValueBind dom stage

-- | Declaration of an associated type synonym: <tt> type T x :: * </tt>
UClsTypeFam :: Ann UTypeFamily dom stage -> UClassElement dom stage
[_ceTypeFam] :: UClassElement dom stage -> Ann UTypeFamily dom stage

-- | Default choice for type synonym: <tt> type T x = TE </tt> or <tt> type
--   instance T x = TE </tt>
UClsTypeDef :: Ann UDeclHead dom stage -> Ann UType dom stage -> UClassElement dom stage
[_ceHead] :: UClassElement dom stage -> Ann UDeclHead dom stage
[_ceKind] :: UClassElement dom stage -> Ann UType dom stage

-- | Default signature (by using <tt>DefaultSignatures</tt>): <tt> default
--   _enum :: (Generic a, GEnum (Rep a)) =&gt; [a] </tt>
UClsDefSig :: Ann UName dom stage -> Ann UType dom stage -> UClassElement dom stage
[_ceName] :: UClassElement dom stage -> Ann UName dom stage
[_ceType] :: UClassElement dom stage -> Ann UType dom stage

-- | Minimal pragma: <tt> {--} </tt>
UClsMinimal :: Ann UMinimalFormula dom stage -> UClassElement dom stage
[_pragmaFormula] :: UClassElement dom stage -> Ann UMinimalFormula dom stage

-- | Inline-like pragma in class definition not supported yet (GHC 8.0.1) |
--   UClsPatSig { _cePatSig :: Ann UPatternTypeSignature dom stage } -- ^
--   Pattern signature in a class declaration (by using
--   <tt>PatternSynonyms</tt>)
UClsInline :: Ann UInlinePragma dom stage -> UClassElement dom stage
[_clsInline] :: UClassElement dom stage -> Ann UInlinePragma dom stage

-- | The instance declaration rule, which is, roughly, the part of the
--   instance declaration before the where keyword.
data UInstanceRule dom stage

-- | Instance head as an instance rule (<tt> X a =&gt; Y a </tt>)
UInstanceRule :: AnnMaybeG (AnnListG UTyVar) dom stage -> AnnMaybeG UContext dom stage -> Ann UInstanceHead dom stage -> UInstanceRule dom stage
[_irVars] :: UInstanceRule dom stage -> AnnMaybeG (AnnListG UTyVar) dom stage
[_irCtx] :: UInstanceRule dom stage -> AnnMaybeG UContext dom stage
[_irHead] :: UInstanceRule dom stage -> Ann UInstanceHead dom stage

-- | The specification of the class instance declaration
data UInstanceHead dom stage

-- | Type or class name
UInstanceHeadCon :: Ann UName dom stage -> UInstanceHead dom stage
[_ihConName] :: UInstanceHead dom stage -> Ann UName dom stage

-- | Infix application of the type/class name to the left operand
UInstanceHeadInfix :: Ann UType dom stage -> Ann UOperator dom stage -> UInstanceHead dom stage
[_ihLeftOp] :: UInstanceHead dom stage -> Ann UType dom stage
[_ihOperator] :: UInstanceHead dom stage -> Ann UOperator dom stage

-- | Parenthesized instance head
UInstanceHeadParen :: Ann UInstanceHead dom stage -> UInstanceHead dom stage
[_ihHead] :: UInstanceHead dom stage -> Ann UInstanceHead dom stage

-- | Application to one more type
UInstanceHeadApp :: Ann UInstanceHead dom stage -> Ann UType dom stage -> UInstanceHead dom stage
[_ihFun] :: UInstanceHead dom stage -> Ann UInstanceHead dom stage
[_ihType] :: UInstanceHead dom stage -> Ann UType dom stage

-- | Instance body is the implementation of the class functions (<tt> where
--   a x = 1; b x = 2 </tt>)
data UInstBody dom stage
UInstBody :: AnnListG UInstBodyDecl dom stage -> UInstBody dom stage
[_instBodyDecls] :: UInstBody dom stage -> AnnListG UInstBodyDecl dom stage

-- | Declarations inside an instance declaration.
data UInstBodyDecl dom stage

-- | A normal value binding (<tt> f x = 12 </tt>)
UInstBodyNormalDecl :: Ann UValueBind dom stage -> UInstBodyDecl dom stage
[_instBodyDeclFunbind] :: UInstBodyDecl dom stage -> Ann UValueBind dom stage

-- | Type signature in instance definition with <tt>InstanceSigs</tt>
UInstBodyTypeSig :: Ann UTypeSignature dom stage -> UInstBodyDecl dom stage
[_instBodyTypeSig] :: UInstBodyDecl dom stage -> Ann UTypeSignature dom stage

-- | An associated type definition (<tt> type A X = B </tt>)
UInstBodyTypeDecl :: Ann UTypeEqn dom stage -> UInstBodyDecl dom stage
[_instBodyTypeEqn] :: UInstBodyDecl dom stage -> Ann UTypeEqn dom stage

-- | An associated data type implementation (<tt> data A X = C1 | C2 </tt>)
UInstBodyDataDecl :: Ann UDataOrNewtypeKeyword dom stage -> Ann UInstanceRule dom stage -> AnnListG UConDecl dom stage -> AnnMaybeG UDeriving dom stage -> UInstBodyDecl dom stage
[_instBodyDataNew] :: UInstBodyDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_instBodyLhsType] :: UInstBodyDecl dom stage -> Ann UInstanceRule dom stage
[_instBodyDataCons] :: UInstBodyDecl dom stage -> AnnListG UConDecl dom stage
[_instBodyDerivings] :: UInstBodyDecl dom stage -> AnnMaybeG UDeriving dom stage

-- | An associated data type implemented using GADT style
UInstBodyGadtDataDecl :: Ann UDataOrNewtypeKeyword dom stage -> Ann UInstanceRule dom stage -> AnnMaybeG UKindConstraint dom stage -> AnnListG UGadtConDecl dom stage -> AnnMaybeG UDeriving dom stage -> UInstBodyDecl dom stage
[_instBodyDataNew] :: UInstBodyDecl dom stage -> Ann UDataOrNewtypeKeyword dom stage
[_instBodyLhsType] :: UInstBodyDecl dom stage -> Ann UInstanceRule dom stage
[_instBodyDataKind] :: UInstBodyDecl dom stage -> AnnMaybeG UKindConstraint dom stage
[_instBodyGadtCons] :: UInstBodyDecl dom stage -> AnnListG UGadtConDecl dom stage
[_instBodyDerivings] :: UInstBodyDecl dom stage -> AnnMaybeG UDeriving dom stage

-- | Specialize instance pragma (no phase selection is allowed)
USpecializeInstance :: Ann UType dom stage -> UInstBodyDecl dom stage
[_specializeInstanceType] :: UInstBodyDecl dom stage -> Ann UType dom stage

-- | Inline-like pragma in a class instance
UInlineInstance :: Ann UInlinePragma dom stage -> UInstBodyDecl dom stage
[_instanceInline] :: UInstBodyDecl dom stage -> Ann UInlinePragma dom stage

-- | Specialize pragma not supported yet | UInstBodyPatSyn {
--   _instBodyPatSyn :: Ann UPatternSynonym dom stage } -- ^ A pattern
--   synonym in a class instance
UInstanceSpecialize :: Ann USpecializePragma dom stage -> UInstBodyDecl dom stage
[_specializeInstance] :: UInstBodyDecl dom stage -> Ann USpecializePragma dom stage

-- | Overlap pragmas. Can be applied to class declarations and class
--   instance declarations.
data UOverlapPragma dom stage

-- | <tt>OVERLAP</tt> pragma
UEnableOverlap :: UOverlapPragma dom stage

-- | <tt>NO_OVERLAP</tt> pragma
UDisableOverlap :: UOverlapPragma dom stage

-- | <tt>OVERLAPPABLE</tt> pragma
UOverlappable :: UOverlapPragma dom stage

-- | <tt>OVERLAPPING</tt> pragma
UOverlapping :: UOverlapPragma dom stage

-- | <tt>OVERLAPS</tt> pragma
UOverlaps :: UOverlapPragma dom stage

-- | <tt>INCOHERENT</tt> pragma
UIncoherentOverlap :: UOverlapPragma dom stage

-- | Open type and data families
data UTypeFamily dom stage

-- | Type family declaration (<tt> type family A a :: * -&gt; * </tt>)
UTypeFamily :: Ann UDeclHead dom stage -> AnnMaybeG UTypeFamilySpec dom stage -> UTypeFamily dom stage
[_tfHead] :: UTypeFamily dom stage -> Ann UDeclHead dom stage
[_tfSpec] :: UTypeFamily dom stage -> AnnMaybeG UTypeFamilySpec dom stage

-- | Data family declaration (<tt> data family A a :: * -&gt; * </tt>)
UDataFamily :: Ann UDeclHead dom stage -> AnnMaybeG UKindConstraint dom stage -> UTypeFamily dom stage
[_tfHead] :: UTypeFamily dom stage -> Ann UDeclHead dom stage
[_tfKind] :: UTypeFamily dom stage -> AnnMaybeG UKindConstraint dom stage

-- | Type family specification with kinds specification and injectivity.
data UTypeFamilySpec dom stage

-- | Specifies the kind of a type family (<tt> :: * -&gt; * </tt>)
UTypeFamilyKind :: Ann UKindConstraint dom stage -> UTypeFamilySpec dom stage
[_tfSpecKind] :: UTypeFamilySpec dom stage -> Ann UKindConstraint dom stage

-- | Specifies the injectivity of a type family (<tt> = r | r -&gt; a
--   </tt>)
UTypeFamilyInjectivity :: Ann UInjectivityAnn dom stage -> UTypeFamilySpec dom stage
[_tfInjectivity] :: UTypeFamilySpec dom stage -> Ann UInjectivityAnn dom stage

-- | Injectivity annotation for type families (<tt> = r | r -&gt; a </tt>)
data UInjectivityAnn dom stage
UInjectivityAnn :: Ann UTyVar dom stage -> AnnListG UName dom stage -> UInjectivityAnn dom stage
[_injAnnRes] :: UInjectivityAnn dom stage -> Ann UTyVar dom stage
[_injAnnDeps] :: UInjectivityAnn dom stage -> AnnListG UName dom stage

-- | Type equations as found in closed type families (<tt> T A = S </tt>)
data UTypeEqn dom stage
UTypeEqn :: Ann UType dom stage -> Ann UType dom stage -> UTypeEqn dom stage
[_teLhs] :: UTypeEqn dom stage -> Ann UType dom stage
[_teRhs] :: UTypeEqn dom stage -> Ann UType dom stage

-- | GADT constructor declaration (<tt> D1 :: { val :: Int } -&gt; T String
--   </tt>)
data UGadtConDecl dom stage
UGadtConDecl :: AnnListG UName dom stage -> AnnListG UTyVar dom stage -> AnnMaybeG UContext dom stage -> Ann UGadtConType dom stage -> UGadtConDecl dom stage
[_gadtConNames] :: UGadtConDecl dom stage -> AnnListG UName dom stage
[_gadtConTypeArgs] :: UGadtConDecl dom stage -> AnnListG UTyVar dom stage
[_gadtConTypeCtx] :: UGadtConDecl dom stage -> AnnMaybeG UContext dom stage
[_gadtConType] :: UGadtConDecl dom stage -> Ann UGadtConType dom stage

-- | The <tt>data</tt> or the <tt>newtype</tt> keyword to define ADTs.
data UDataOrNewtypeKeyword dom stage
UDataKeyword :: UDataOrNewtypeKeyword dom stage
UNewtypeKeyword :: UDataOrNewtypeKeyword dom stage

-- | Type of GADT constructors (can be record types: <tt>{ val :: Int
--   }</tt>)
data UGadtConType dom stage
UGadtNormalType :: Ann UType dom stage -> UGadtConType dom stage
[_gadtConNormalType] :: UGadtConType dom stage -> Ann UType dom stage
UGadtRecordType :: AnnListG UFieldDecl dom stage -> Ann UType dom stage -> UGadtConType dom stage
[_gadtConRecordFields] :: UGadtConType dom stage -> AnnListG UFieldDecl dom stage
[_gadtConResultType] :: UGadtConType dom stage -> Ann UType dom stage

-- | A list of functional dependencies: <tt> | a -&gt; b, c -&gt; d </tt>
--   separated by commas
data UFunDeps dom stage
UFunDeps :: AnnListG UFunDep dom stage -> UFunDeps dom stage
[_funDeps] :: UFunDeps dom stage -> AnnListG UFunDep dom stage

-- | A functional dependency, given on the form <tt>l1 ... ln -&gt; r1 ...
--   rn</tt>
data UFunDep dom stage
UFunDep :: AnnListG UName dom stage -> AnnListG UName dom stage -> UFunDep dom stage
[_funDepLhs] :: UFunDep dom stage -> AnnListG UName dom stage
[_funDepRhs] :: UFunDep dom stage -> AnnListG UName dom stage

-- | A constructor declaration for a datatype
data UConDecl dom stage

-- | Ordinary data constructor (<tt> C t1 t2 </tt>)
UConDecl :: AnnListG UTyVar dom stage -> AnnMaybeG UContext dom stage -> Ann UName dom stage -> AnnListG UType dom stage -> UConDecl dom stage
[_conTypeArgs] :: UConDecl dom stage -> AnnListG UTyVar dom stage
[_conTypeCtx] :: UConDecl dom stage -> AnnMaybeG UContext dom stage
[_conDeclName] :: UConDecl dom stage -> Ann UName dom stage
[_conDeclArgs] :: UConDecl dom stage -> AnnListG UType dom stage

-- | Record data constructor (<tt> C { _n1 :: t1, _n2 :: t2 } </tt>)
URecordDecl :: AnnListG UTyVar dom stage -> AnnMaybeG UContext dom stage -> Ann UName dom stage -> AnnListG UFieldDecl dom stage -> UConDecl dom stage
[_conTypeArgs] :: UConDecl dom stage -> AnnListG UTyVar dom stage
[_conTypeCtx] :: UConDecl dom stage -> AnnMaybeG UContext dom stage
[_conDeclName] :: UConDecl dom stage -> Ann UName dom stage
[_conDeclFields] :: UConDecl dom stage -> AnnListG UFieldDecl dom stage

-- | Infix data constructor (<tt> t1 :+: t2 </tt>)
UInfixConDecl :: AnnListG UTyVar dom stage -> AnnMaybeG UContext dom stage -> Ann UType dom stage -> Ann UOperator dom stage -> Ann UType dom stage -> UConDecl dom stage
[_conTypeArgs] :: UConDecl dom stage -> AnnListG UTyVar dom stage
[_conTypeCtx] :: UConDecl dom stage -> AnnMaybeG UContext dom stage
[_conDeclLhs] :: UConDecl dom stage -> Ann UType dom stage
[_conDeclOp] :: UConDecl dom stage -> Ann UOperator dom stage
[_conDeclRhs] :: UConDecl dom stage -> Ann UType dom stage

-- | Field declaration (<tt> fld :: Int </tt>)
data UFieldDecl dom stage
UFieldDecl :: AnnListG UName dom stage -> Ann UType dom stage -> UFieldDecl dom stage
[_fieldNames] :: UFieldDecl dom stage -> AnnListG UName dom stage
[_fieldType] :: UFieldDecl dom stage -> Ann UType dom stage

-- | A deriving clause following a data type declaration. (<tt> deriving
--   Show </tt> or <tt> deriving (Show, Eq) </tt>)
data UDeriving dom stage
UDerivingOne :: Ann UInstanceHead dom stage -> UDeriving dom stage
[_oneDerived] :: UDeriving dom stage -> Ann UInstanceHead dom stage
UDerivings :: AnnListG UInstanceHead dom stage -> UDeriving dom stage
[_allDerived] :: UDeriving dom stage -> AnnListG UInstanceHead dom stage

-- | Pattern type signature declaration (<tt> pattern Succ :: Int -&gt; Int
--   </tt>)
data UPatternTypeSignature dom stage
UPatternTypeSignature :: Ann UName dom stage -> Ann UType dom stage -> UPatternTypeSignature dom stage
[_patSigName] :: UPatternTypeSignature dom stage -> Ann UName dom stage
[_patSigType] :: UPatternTypeSignature dom stage -> Ann UType dom stage

-- | Pattern synonyms: <tt> pattern Arrow t1 t2 = App "-&gt;" [t1, t2]
--   </tt>
data UPatternSynonym dom stage
UPatternSynonym :: Ann UPatSynLhs dom stage -> Ann UPatSynRhs dom stage -> UPatternSynonym dom stage
[_patLhs] :: UPatternSynonym dom stage -> Ann UPatSynLhs dom stage
[_patRhs] :: UPatternSynonym dom stage -> Ann UPatSynRhs dom stage

-- | Left hand side of a pattern synonym
data UPatSynLhs dom stage

-- | A left hand side with a constructor name and arguments (<tt> Arrow t1
--   t2 </tt>)
UNormalPatSyn :: Ann UName dom stage -> AnnListG UName dom stage -> UPatSynLhs dom stage
[_patName] :: UPatSynLhs dom stage -> Ann UName dom stage
[_patArgs] :: UPatSynLhs dom stage -> AnnListG UName dom stage

-- | An infix pattern synonym left-hand side (<tt> t1 :+: t2 </tt>)
UInfixPatSyn :: Ann UName dom stage -> Ann UOperator dom stage -> Ann UName dom stage -> UPatSynLhs dom stage
[_patSynLhs] :: UPatSynLhs dom stage -> Ann UName dom stage
[_patSynOp] :: UPatSynLhs dom stage -> Ann UOperator dom stage
[_patSynRhs] :: UPatSynLhs dom stage -> Ann UName dom stage

-- | A record-style pattern synonym left-hand side (<tt> Arrow { arrowFrom,
--   arrowTo } </tt>)
URecordPatSyn :: Ann UName dom stage -> AnnListG UName dom stage -> UPatSynLhs dom stage
[_patName] :: UPatSynLhs dom stage -> Ann UName dom stage
[_patArgs] :: UPatSynLhs dom stage -> AnnListG UName dom stage

-- | Right-hand side of pattern synonym
data UPatSynRhs dom stage

-- | <tt> pattern Int = App <a>Int</a> [] </tt> or <tt> pattern Int &lt;-
--   App <a>Int</a> [] where Int = App <a>Int</a> [] </tt>
UBidirectionalPatSyn :: Ann UPattern dom stage -> AnnMaybeG UPatSynWhere dom stage -> UPatSynRhs dom stage
[_patRhsPat] :: UPatSynRhs dom stage -> Ann UPattern dom stage
[_patRhsOpposite] :: UPatSynRhs dom stage -> AnnMaybeG UPatSynWhere dom stage

-- | <pre>
--   pattern Int &lt;- App <a>Int</a> []
--   </pre>
UOneDirectionalPatSyn :: Ann UPattern dom stage -> UPatSynRhs dom stage
[_patRhsPat] :: UPatSynRhs dom stage -> Ann UPattern dom stage

-- | Where clause of pattern synonym (explicit expression direction)
data UPatSynWhere dom stage
UPatSynWhere :: AnnListG UMatch dom stage -> UPatSynWhere dom stage
[_patOpposite] :: UPatSynWhere dom stage -> AnnListG UMatch dom stage

-- | Call conventions of foreign functions
data UCallConv dom stage
UStdCall :: UCallConv dom stage
UCCall :: UCallConv dom stage
UCPlusPlus :: UCallConv dom stage
UDotNet :: UCallConv dom stage
UJvm :: UCallConv dom stage
UJs :: UCallConv dom stage
UJavaScript :: UCallConv dom stage
UCApi :: UCallConv dom stage

-- | Safety annotations for foreign calls
data USafety dom stage
USafe :: USafety dom stage
UThreadSafe :: USafety dom stage
UUnsafe :: USafety dom stage
UInterruptible :: USafety dom stage

-- | Role annotations for types
data URole dom stage
UNominal :: URole dom stage
URepresentational :: URole dom stage
UPhantom :: URole dom stage

-- | Top level pragmas
data UTopLevelPragma dom stage

-- | A pragma that introduces source rewrite rules (<tt> {--} </tt>)
URulePragma :: AnnListG URule dom stage -> UTopLevelPragma dom stage
[_pragmaRule] :: UTopLevelPragma dom stage -> AnnListG URule dom stage

-- | A pragma that marks definitions as deprecated (<tt> {-# DEPRECATED f
--   "f will be replaced by g" </tt>)
UDeprPragma :: AnnListG UName dom stage -> AnnListG UStringNode dom stage -> UTopLevelPragma dom stage
[_pragmaObjects] :: UTopLevelPragma dom stage -> AnnListG UName dom stage
[_deprMessage] :: UTopLevelPragma dom stage -> AnnListG UStringNode dom stage

-- | A pragma that marks definitions as deprecated (<tt> {-# WARNING
--   unsafePerformIO "you should know what you are doing" </tt>)
UWarningPragma :: AnnListG UName dom stage -> AnnListG UStringNode dom stage -> UTopLevelPragma dom stage
[_pragmaObjects] :: UTopLevelPragma dom stage -> AnnListG UName dom stage
[_warnMessage] :: UTopLevelPragma dom stage -> AnnListG UStringNode dom stage

-- | A pragma that annotates a definition with an arbitrary value (<tt> {-#
--   ANN f 42 </tt>) TODO: extract pragmas that appear both in top-level
--   and in instances (inline, inlinable, noinline)
UAnnPragma :: Ann UAnnotationSubject dom stage -> Ann UExpr dom stage -> UTopLevelPragma dom stage
[_annotationSubject] :: UTopLevelPragma dom stage -> Ann UAnnotationSubject dom stage
[_annotateExpr] :: UTopLevelPragma dom stage -> Ann UExpr dom stage
UInlinePragmaDecl :: Ann UInlinePragma dom stage -> UTopLevelPragma dom stage
[_pragmaInline] :: UTopLevelPragma dom stage -> Ann UInlinePragma dom stage

-- | A pragma for maintaining line numbers in generated sources (<tt> {--}
--   </tt>)
ULinePragma :: Ann LineNumber dom stage -> AnnMaybeG UStringNode dom stage -> UTopLevelPragma dom stage
[_pragmaLineNum] :: UTopLevelPragma dom stage -> Ann LineNumber dom stage
[_pragmaFileName] :: UTopLevelPragma dom stage -> AnnMaybeG UStringNode dom stage
USpecializeDecl :: Ann USpecializePragma dom stage -> UTopLevelPragma dom stage
[_specializePragma] :: UTopLevelPragma dom stage -> Ann USpecializePragma dom stage
data USpecializePragma dom stage

-- | A pragma that tells the compiler that a polymorph function should be
--   optimized for a given type (<tt> {--} </tt>)
USpecializePragma :: AnnMaybeG UPhaseControl dom stage -> Ann UName dom stage -> AnnListG UType dom stage -> USpecializePragma dom stage
[_pragmaPhase] :: USpecializePragma dom stage -> AnnMaybeG UPhaseControl dom stage
[_specializeDef] :: USpecializePragma dom stage -> Ann UName dom stage
[_specializeType] :: USpecializePragma dom stage -> AnnListG UType dom stage

-- | A rewrite rule (<tt> "map/map" forall f g xs. map f (map g xs) = map
--   (f.g) xs </tt>)
data URule dom stage
URule :: Ann UStringNode dom stage -> AnnMaybeG UPhaseControl dom stage -> AnnListG URuleVar dom stage -> Ann UExpr dom stage -> Ann UExpr dom stage -> URule dom stage

-- | User name of the rule
[_ruleName] :: URule dom stage -> Ann UStringNode dom stage

-- | The compilation phases in which the rule can be applied
[_rulePhase] :: URule dom stage -> AnnMaybeG UPhaseControl dom stage

-- | Variables bound in the rule
[_ruleBounded] :: URule dom stage -> AnnListG URuleVar dom stage

-- | The transformed expression
[_ruleLhs] :: URule dom stage -> Ann UExpr dom stage

-- | The resulting expression
[_ruleRhs] :: URule dom stage -> Ann UExpr dom stage

-- | A variable for a rewrite rule. With or without type signature.
data URuleVar dom stage

-- | A simple rule variable
URuleVar :: Ann UName dom stage -> URuleVar dom stage
[_ruleVarName] :: URuleVar dom stage -> Ann UName dom stage

-- | A rule variable with signature
USigRuleVar :: Ann UName dom stage -> Ann UType dom stage -> URuleVar dom stage
[_ruleVarName] :: URuleVar dom stage -> Ann UName dom stage
[_ruleVarType] :: URuleVar dom stage -> Ann UType dom stage

-- | Annotation allows you to connect an expression to any declaration.
data UAnnotationSubject dom stage

-- | The definition with the given name is annotated
UNameAnnotation :: Ann UName dom stage -> UAnnotationSubject dom stage
[_annotateName] :: UAnnotationSubject dom stage -> Ann UName dom stage

-- | A type with the given name is annotated
UTypeAnnotation :: Ann UName dom stage -> UAnnotationSubject dom stage
[_annotateName] :: UAnnotationSubject dom stage -> Ann UName dom stage

-- | The whole module is annotated
UModuleAnnotation :: UAnnotationSubject dom stage

-- | Formulas of minimal annotations declaring which functions should be
--   defined.
data UMinimalFormula dom stage
UMinimalName :: Ann UName dom stage -> UMinimalFormula dom stage
[_minimalName] :: UMinimalFormula dom stage -> Ann UName dom stage
UMinimalParen :: Ann UMinimalFormula dom stage -> UMinimalFormula dom stage
[_minimalInner] :: UMinimalFormula dom stage -> Ann UMinimalFormula dom stage

-- | One of the minimal formulas are needed (<tt> min1 | min2 </tt>)
UMinimalOr :: AnnListG UMinimalFormula dom stage -> UMinimalFormula dom stage
[_minimalOrs] :: UMinimalFormula dom stage -> AnnListG UMinimalFormula dom stage

-- | Both of the minimal formulas are needed (<tt> min1 , min2 </tt>)
UMinimalAnd :: AnnListG UMinimalFormula dom stage -> UMinimalFormula dom stage
[_minimalAnds] :: UMinimalFormula dom stage -> AnnListG UMinimalFormula dom stage

-- | A line number for a line pragma.
data LineNumber dom stage
LineNumber :: Int -> LineNumber dom stage
[_lineNumber] :: LineNumber dom stage -> Int

-- | Value binding for top-level and local bindings
data UValueBind dom stage

-- | Non-function binding (<tt> v = "12" </tt>) TODO: use one name for a
--   function instead of names in each match
USimpleBind :: Ann UPattern dom stage -> Ann URhs dom stage -> AnnMaybeG ULocalBinds dom stage -> UValueBind dom stage
[_valBindPat] :: UValueBind dom stage -> Ann UPattern dom stage
[_valBindRhs] :: UValueBind dom stage -> Ann URhs dom stage
[_valBindLocals] :: UValueBind dom stage -> AnnMaybeG ULocalBinds dom stage

-- | Function binding (<tt> f 0 = 1; f x = x </tt>). All matches must have
--   the same name.
UFunBind :: AnnListG UMatch dom stage -> UValueBind dom stage
[_funBindMatches] :: UValueBind dom stage -> AnnListG UMatch dom stage

-- | Clause of function binding
data UMatch dom stage
UMatch :: Ann UMatchLhs dom stage -> Ann URhs dom stage -> AnnMaybeG ULocalBinds dom stage -> UMatch dom stage
[_matchLhs] :: UMatch dom stage -> Ann UMatchLhs dom stage
[_matchRhs] :: UMatch dom stage -> Ann URhs dom stage
[_matchBinds] :: UMatch dom stage -> AnnMaybeG ULocalBinds dom stage

-- | Something on the left side of the match
data UMatchLhs dom stage

-- | A match lhs with the function name and parameter names (<tt> f a b
--   </tt>)
UNormalLhs :: Ann UName dom stage -> AnnListG UPattern dom stage -> UMatchLhs dom stage
[_matchLhsName] :: UMatchLhs dom stage -> Ann UName dom stage
[_matchLhsArgs] :: UMatchLhs dom stage -> AnnListG UPattern dom stage

-- | An infix match lhs for an operator (<tt> a + b </tt>)
UInfixLhs :: Ann UPattern dom stage -> Ann UOperator dom stage -> Ann UPattern dom stage -> AnnListG UPattern dom stage -> UMatchLhs dom stage
[_matchLhsLhs] :: UMatchLhs dom stage -> Ann UPattern dom stage
[_matchLhsOperator] :: UMatchLhs dom stage -> Ann UOperator dom stage
[_matchLhsRhs] :: UMatchLhs dom stage -> Ann UPattern dom stage
[_matchLhsArgs] :: UMatchLhs dom stage -> AnnListG UPattern dom stage

-- | Local bindings attached to a declaration (<tt> where x = 42 </tt>)
data ULocalBinds dom stage
ULocalBinds :: AnnListG ULocalBind dom stage -> ULocalBinds dom stage
[_localBinds] :: ULocalBinds dom stage -> AnnListG ULocalBind dom stage

-- | Bindings that are enabled in local blocks (where or let).
data ULocalBind dom stage

-- | A local binding for a value
ULocalValBind :: Ann UValueBind dom stage -> ULocalBind dom stage
[_localVal] :: ULocalBind dom stage -> Ann UValueBind dom stage

-- | A local type signature
ULocalSignature :: Ann UTypeSignature dom stage -> ULocalBind dom stage
[_localSig] :: ULocalBind dom stage -> Ann UTypeSignature dom stage

-- | A local fixity declaration
ULocalFixity :: Ann UFixitySignature dom stage -> ULocalBind dom stage
[_localFixity] :: ULocalBind dom stage -> Ann UFixitySignature dom stage

-- | A local inline pragma
ULocalInline :: Ann UInlinePragma dom stage -> ULocalBind dom stage
[_localInline] :: ULocalBind dom stage -> Ann UInlinePragma dom stage

-- | A type signature (<tt> f :: Int -&gt; Int </tt>)
data UTypeSignature dom stage
UTypeSignature :: AnnListG UName dom stage -> Ann UType dom stage -> UTypeSignature dom stage
[_tsName] :: UTypeSignature dom stage -> AnnListG UName dom stage
[_tsType] :: UTypeSignature dom stage -> Ann UType dom stage

-- | A fixity signature (<tt> infixl 5 +, - </tt>).
data UFixitySignature dom stage
UFixitySignature :: Ann Assoc dom stage -> AnnMaybeG Precedence dom stage -> AnnListG UOperator dom stage -> UFixitySignature dom stage
[_fixityAssoc] :: UFixitySignature dom stage -> Ann Assoc dom stage
[_fixityPrecedence] :: UFixitySignature dom stage -> AnnMaybeG Precedence dom stage
[_fixityOperators] :: UFixitySignature dom stage -> AnnListG UOperator dom stage

-- | Associativity of an operator.
data Assoc dom stage

-- | non-associative operator (declared with <tt>infix</tt>)
AssocNone :: Assoc dom stage

-- | left-associative operator (declared with <tt>infixl</tt>)
AssocLeft :: Assoc dom stage

-- | right-associative operator (declared with <tt>infixr</tt>)
AssocRight :: Assoc dom stage

-- | Numeric precedence of an operator
data Precedence dom stage
Precedence :: Int -> Precedence dom stage
[_precedenceValue] :: Precedence dom stage -> Int

-- | Right hand side of a value binding (possible with guards): (<tt> = 3
--   </tt> or <tt> | x == 1 = 3; | otherwise = 4 </tt>)
data URhs dom stage

-- | An unguarded right-hand-side (<tt> = 3 </tt>)
UUnguardedRhs :: Ann UExpr dom stage -> URhs dom stage
[_rhsExpr] :: URhs dom stage -> Ann UExpr dom stage

-- | An unguarded right-hand-side (<tt> | x == 1 = 3; | otherwise = 4
--   </tt>)
UGuardedRhss :: AnnListG UGuardedRhs dom stage -> URhs dom stage
[_rhsGuards] :: URhs dom stage -> AnnListG UGuardedRhs dom stage

-- | A guarded right-hand side of a value binding (<tt> | x &gt; 3 = 2
--   </tt>)
data UGuardedRhs dom stage
UGuardedRhs :: AnnListG URhsGuard dom stage -> Ann UExpr dom stage -> UGuardedRhs dom stage

-- | Cannot be empty.
[_guardStmts] :: UGuardedRhs dom stage -> AnnListG URhsGuard dom stage
[_guardExpr] :: UGuardedRhs dom stage -> Ann UExpr dom stage

-- | Guards for value bindings and pattern matches (<tt> Just v <a>x, v</a>
--   1 </tt>)
data URhsGuard dom stage

-- | A bind statement in a pattern guard (<tt> Just v &lt;- x </tt>)
UGuardBind :: Ann UPattern dom stage -> Ann UExpr dom stage -> URhsGuard dom stage
[_guardPat] :: URhsGuard dom stage -> Ann UPattern dom stage
[_guardRhs] :: URhsGuard dom stage -> Ann UExpr dom stage

-- | A let statement in a pattern guard (<tt> let x = 3 </tt>)
UGuardLet :: AnnListG ULocalBind dom stage -> URhsGuard dom stage
[_guardBinds] :: URhsGuard dom stage -> AnnListG ULocalBind dom stage

-- | An expression to check for a pattern guard
UGuardCheck :: Ann UExpr dom stage -> URhsGuard dom stage
[_guardCheck] :: URhsGuard dom stage -> Ann UExpr dom stage

-- | Pragmas that control how the definitions will be inlined
data UInlinePragma dom stage

-- | A pragma that marks a function for inlining to the compiler (<tt> {--}
--   </tt>)
UInlinePragma :: AnnMaybeG UConlikeAnnot dom stage -> AnnMaybeG UPhaseControl dom stage -> Ann UName dom stage -> UInlinePragma dom stage
[_inlineConlike] :: UInlinePragma dom stage -> AnnMaybeG UConlikeAnnot dom stage
[_inlinePhase] :: UInlinePragma dom stage -> AnnMaybeG UPhaseControl dom stage
[_inlineDef] :: UInlinePragma dom stage -> Ann UName dom stage

-- | A pragma that forbids a function from being inlined by the compiler
--   (<tt> {--} </tt>)
UNoInlinePragma :: Ann UName dom stage -> UInlinePragma dom stage
[_noInlineDef] :: UInlinePragma dom stage -> Ann UName dom stage

-- | A pragma that marks a function that it may be inlined by the compiler
--   (<tt> {--} </tt>)
UInlinablePragma :: AnnMaybeG UPhaseControl dom stage -> Ann UName dom stage -> UInlinePragma dom stage
[_inlinePhase] :: UInlinePragma dom stage -> AnnMaybeG UPhaseControl dom stage
[_inlinableDef] :: UInlinePragma dom stage -> Ann UName dom stage

-- | A <tt>CONLIKE</tt> modifier for an <tt>INLINE</tt> pragma.
data UConlikeAnnot dom stage
UConlikeAnnot :: UConlikeAnnot dom stage

-- | Controls the activation of a rewrite rule (<tt> [1] </tt>)
data UPhaseControl dom stage
UPhaseControl :: AnnMaybeG PhaseInvert dom stage -> AnnMaybeG PhaseNumber dom stage -> UPhaseControl dom stage
[_phaseUntil] :: UPhaseControl dom stage -> AnnMaybeG PhaseInvert dom stage
[_phaseNumber] :: UPhaseControl dom stage -> AnnMaybeG PhaseNumber dom stage

-- | Phase number for rewrite rules
data PhaseNumber dom stage
PhaseNumber :: Integer -> PhaseNumber dom stage
[_phaseNum] :: PhaseNumber dom stage -> Integer

-- | A tilde that marks the inversion of the phase number
data PhaseInvert dom stage
PhaseInvert :: PhaseInvert dom stage

-- | Haskell expressions
data UExpr dom stage

-- | A variable or a data constructor (<tt> a </tt>)
UVar :: Ann UName dom stage -> UExpr dom stage
[_exprName] :: UExpr dom stage -> Ann UName dom stage

-- | Literal expression (<tt> 42 </tt>)
ULit :: Ann ULiteral dom stage -> UExpr dom stage
[_exprLit] :: UExpr dom stage -> Ann ULiteral dom stage

-- | An infix operator application (<tt> a + b </tt>)
UInfixApp :: Ann UExpr dom stage -> Ann UOperator dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprLhs] :: UExpr dom stage -> Ann UExpr dom stage
[_exprOperator] :: UExpr dom stage -> Ann UOperator dom stage
[_exprRhs] :: UExpr dom stage -> Ann UExpr dom stage

-- | Prefix operator application (<tt> -x </tt>)
UPrefixApp :: Ann UOperator dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprOperator] :: UExpr dom stage -> Ann UOperator dom stage
[_exprRhs] :: UExpr dom stage -> Ann UExpr dom stage

-- | Function application (<tt> f 4 </tt>)
UApp :: Ann UExpr dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprFun] :: UExpr dom stage -> Ann UExpr dom stage
[_exprArg] :: UExpr dom stage -> Ann UExpr dom stage

-- | Lambda expression (<tt> a b -&gt; a + b </tt>)
ULambda :: AnnListG UPattern dom stage -> Ann UExpr dom stage -> UExpr dom stage

-- | at least one
[_exprBindings] :: UExpr dom stage -> AnnListG UPattern dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage

-- | Local binding (<tt> let x = 2; y = 3 in e x y </tt>)
ULet :: AnnListG ULocalBind dom stage -> Ann UExpr dom stage -> UExpr dom stage

-- | nonempty
[_exprFunBind] :: UExpr dom stage -> AnnListG ULocalBind dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage

-- | If expression (<tt> if a then b else c </tt>)
UIf :: Ann UExpr dom stage -> Ann UExpr dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprCond] :: UExpr dom stage -> Ann UExpr dom stage
[_exprThen] :: UExpr dom stage -> Ann UExpr dom stage
[_exprElse] :: UExpr dom stage -> Ann UExpr dom stage

-- | Multi way if expressions with <tt>MultiWayIf</tt> extension (<tt> if |
--   guard1 -&gt; expr1; guard2 -&gt; expr2 </tt>)
UMultiIf :: AnnListG UGuardedCaseRhs dom stage -> UExpr dom stage
[_exprIfAlts] :: UExpr dom stage -> AnnListG UGuardedCaseRhs dom stage

-- | Pattern matching expression (<tt> case expr of pat1 -&gt; expr1; pat2
--   -&gt; expr2 </tt>)
UCase :: Ann UExpr dom stage -> AnnListG UAlt dom stage -> UExpr dom stage
[_exprCase] :: UExpr dom stage -> Ann UExpr dom stage
[_exprAlts] :: UExpr dom stage -> AnnListG UAlt dom stage

-- | Do-notation expressions (<tt> do x &lt;- act1; act2 </tt>)
UDo :: Ann UDoKind dom stage -> AnnListG UStmt dom stage -> UExpr dom stage
[_doKind] :: UExpr dom stage -> Ann UDoKind dom stage
[_exprStmts] :: UExpr dom stage -> AnnListG UStmt dom stage

-- | Tuple expression (<tt> (e1, e2, e3) </tt>)
UTuple :: AnnListG UExpr dom stage -> UExpr dom stage
[_tupleElems] :: UExpr dom stage -> AnnListG UExpr dom stage

-- | Unboxed tuple expression (<tt> () </tt>)
UUnboxedTuple :: AnnListG UExpr dom stage -> UExpr dom stage
[_tupleElems] :: UExpr dom stage -> AnnListG UExpr dom stage

-- | Tuple section, enabled with <tt>TupleSections</tt> (<tt> (a,,b)
--   </tt>). One of the elements must be missing.
UTupleSection :: AnnListG UTupSecElem dom stage -> UExpr dom stage
[_tupleSectionElems] :: UExpr dom stage -> AnnListG UTupSecElem dom stage

-- | Unboxed tuple section enabled with <tt>TupleSections</tt> (<tt> ()
--   </tt>). One of the elements must be missing.
UUnboxedTupSec :: AnnListG UTupSecElem dom stage -> UExpr dom stage
[_tupleSectionElems] :: UExpr dom stage -> AnnListG UTupSecElem dom stage

-- | List expression: <tt>[1,2,3]</tt>
UList :: AnnListG UExpr dom stage -> UExpr dom stage
[_listElems] :: UExpr dom stage -> AnnListG UExpr dom stage

-- | Parallel array expression: <tt>[: 1,2,3 :]</tt>
UParArray :: AnnListG UExpr dom stage -> UExpr dom stage
[_listElems] :: UExpr dom stage -> AnnListG UExpr dom stage

-- | Parenthesized expression: <tt>( a + b )</tt>
UParen :: Ann UExpr dom stage -> UExpr dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage

-- | Left operator section: <tt>(1+)</tt>
ULeftSection :: Ann UExpr dom stage -> Ann UOperator dom stage -> UExpr dom stage
[_exprLhs] :: UExpr dom stage -> Ann UExpr dom stage
[_exprOperator] :: UExpr dom stage -> Ann UOperator dom stage

-- | Right operator section: <tt>(+1)</tt>
URightSection :: Ann UOperator dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprOperator] :: UExpr dom stage -> Ann UOperator dom stage
[_exprRhs] :: UExpr dom stage -> Ann UExpr dom stage

-- | Record value construction: <tt>Point { x = 3, y = -2 }</tt>
URecCon :: Ann UName dom stage -> AnnListG UFieldUpdate dom stage -> UExpr dom stage
[_exprRecName] :: UExpr dom stage -> Ann UName dom stage
[_exprRecFields] :: UExpr dom stage -> AnnListG UFieldUpdate dom stage

-- | Record value update: <tt>p1 { x = 3, y = -2 }</tt>
URecUpdate :: Ann UExpr dom stage -> AnnListG UFieldUpdate dom stage -> UExpr dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage
[_exprRecFields] :: UExpr dom stage -> AnnListG UFieldUpdate dom stage

-- | Enumeration expression (<tt> [1,3..10] </tt>)
UEnum :: Ann UExpr dom stage -> AnnMaybeG UExpr dom stage -> AnnMaybeG UExpr dom stage -> UExpr dom stage
[_enumFrom] :: UExpr dom stage -> Ann UExpr dom stage
[_enumThen] :: UExpr dom stage -> AnnMaybeG UExpr dom stage
[_enumTo] :: UExpr dom stage -> AnnMaybeG UExpr dom stage

-- | Parallel array enumeration (<tt> [: 1,3 .. 10 :] </tt>)
UParArrayEnum :: Ann UExpr dom stage -> AnnMaybeG UExpr dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_enumFrom] :: UExpr dom stage -> Ann UExpr dom stage
[_enumThen] :: UExpr dom stage -> AnnMaybeG UExpr dom stage
[_enumToFix] :: UExpr dom stage -> Ann UExpr dom stage

-- | List comprehension (<tt> [ (x, y) | x &lt;- xs | y &lt;- ys ] </tt>)
UListComp :: Ann UExpr dom stage -> AnnListG UListCompBody dom stage -> UExpr dom stage
[_compExpr] :: UExpr dom stage -> Ann UExpr dom stage

-- | Can only have 1 element without <tt>ParallelListComp</tt>
[_compBody] :: UExpr dom stage -> AnnListG UListCompBody dom stage

-- | Parallel array comprehensions <tt> [: (x, y) | x &lt;- xs , y &lt;- ys
--   :] </tt> enabled by <tt>ParallelArrays</tt>
UParArrayComp :: Ann UExpr dom stage -> AnnListG UListCompBody dom stage -> UExpr dom stage
[_compExpr] :: UExpr dom stage -> Ann UExpr dom stage

-- | Can only have 1 element without <tt>ParallelListComp</tt>
[_compBody] :: UExpr dom stage -> AnnListG UListCompBody dom stage

-- | Explicit type signature (<tt> x :: Int </tt>)
UTypeSig :: Ann UExpr dom stage -> Ann UType dom stage -> UExpr dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage
[_exprSig] :: UExpr dom stage -> Ann UType dom stage

-- | Explicit type application (<tt> show @Integer (read "5") </tt>)
UExplTypeApp :: Ann UExpr dom stage -> Ann UType dom stage -> UExpr dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage
[_exprType] :: UExpr dom stage -> Ann UType dom stage

-- | <tt>'x</tt> for template haskell reifying of expressions
UVarQuote :: Ann UName dom stage -> UExpr dom stage
[_quotedName] :: UExpr dom stage -> Ann UName dom stage

-- | <tt>''T</tt> for template haskell reifying of types
UTypeQuote :: Ann UName dom stage -> UExpr dom stage
[_quotedName] :: UExpr dom stage -> Ann UName dom stage

-- | Template haskell bracket expression
UBracketExpr :: Ann UBracket dom stage -> UExpr dom stage
[_exprBracket] :: UExpr dom stage -> Ann UBracket dom stage

-- | Template haskell splice expression, for example: <tt>$(gen a)</tt> or
--   <tt>$x</tt>
USplice :: Ann USplice dom stage -> UExpr dom stage
[_exprSplice] :: UExpr dom stage -> Ann USplice dom stage

-- | Template haskell quasi-quotation: <tt>[$quoter|str]</tt>
UQuasiQuoteExpr :: Ann UQuasiQuote dom stage -> UExpr dom stage
[_exprQQ] :: UExpr dom stage -> Ann UQuasiQuote dom stage
UExprPragma :: Ann UExprPragma dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprPragma] :: UExpr dom stage -> Ann UExprPragma dom stage
[_innerExpr] :: UExpr dom stage -> Ann UExpr dom stage

-- | Arrow definition: <tt>proc a -&gt; f -&lt; a+1</tt>
UProc :: Ann UPattern dom stage -> Ann UCmd dom stage -> UExpr dom stage
[_procPattern] :: UExpr dom stage -> Ann UPattern dom stage
[_procExpr] :: UExpr dom stage -> Ann UCmd dom stage

-- | Arrow application: <tt>f -&lt; a+1</tt>
UArrowApp :: Ann UExpr dom stage -> Ann UArrowAppl dom stage -> Ann UExpr dom stage -> UExpr dom stage
[_exprLhs] :: UExpr dom stage -> Ann UExpr dom stage
[_arrowAppl] :: UExpr dom stage -> Ann UArrowAppl dom stage
[_exprRhs] :: UExpr dom stage -> Ann UExpr dom stage

-- | Lambda case ( <tt>case 0 -&gt; 1; 1 -&gt; 2</tt> )
ULamCase :: AnnListG UAlt dom stage -> UExpr dom stage
[_exprAlts] :: UExpr dom stage -> AnnListG UAlt dom stage

-- | Static pointer expression (<tt> static e </tt>). The inner expression
--   must be closed (cannot have variables bound outside) XML expressions
--   omitted
UStaticPtr :: Ann UExpr dom stage -> UExpr dom stage
[_exprInner] :: UExpr dom stage -> Ann UExpr dom stage

-- | Field update expressions
data UFieldUpdate dom stage

-- | Update of a field (<tt> x = 1 </tt>)
UNormalFieldUpdate :: Ann UName dom stage -> Ann UExpr dom stage -> UFieldUpdate dom stage
[_fieldName] :: UFieldUpdate dom stage -> Ann UName dom stage
[_fieldValue] :: UFieldUpdate dom stage -> Ann UExpr dom stage

-- | Update the field to the value of the same name (<tt> x </tt>)
UFieldPun :: Ann UName dom stage -> UFieldUpdate dom stage
[_fieldUpdateName] :: UFieldUpdate dom stage -> Ann UName dom stage

-- | Update the fields of the bounded names to their values (<tt> ..
--   </tt>). Must be the last initializer. Cannot be used in a record
--   update expression.
UFieldWildcard :: Ann UFieldWildcard dom stage -> UFieldUpdate dom stage
[_fieldWildcard] :: UFieldUpdate dom stage -> Ann UFieldWildcard dom stage

-- | Marker for a field wildcard. Only needed to attach semantic
--   information in a type-safe way.
data UFieldWildcard dom stage
FldWildcard :: UFieldWildcard dom stage

-- | An element of a tuple section that can be an expression or missing
--   (indicating a value from a parameter)
data UTupSecElem dom stage

-- | An existing element in a tuple section
Present :: Ann UExpr dom stage -> UTupSecElem dom stage
[_tupSecExpr] :: UTupSecElem dom stage -> Ann UExpr dom stage

-- | A missing element in a tuple section
Missing :: UTupSecElem dom stage

-- | Clause of case expression (<tt> Just x -&gt; x + 1 </tt>)
data UAlt' expr dom stage
UAlt :: Ann UPattern dom stage -> Ann (UCaseRhs' expr) dom stage -> AnnMaybeG ULocalBinds dom stage -> UAlt' expr dom stage
[_altPattern] :: UAlt' expr dom stage -> Ann UPattern dom stage
[_altRhs] :: UAlt' expr dom stage -> Ann (UCaseRhs' expr) dom stage
[_altBinds] :: UAlt' expr dom stage -> AnnMaybeG ULocalBinds dom stage
type UAlt = UAlt' UExpr
type UCmdAlt = UAlt' UCmd

-- | Right hand side of a match (possible with guards): (<tt> -&gt; 3 </tt>
--   or <tt> | x == 1 -&gt; 3; | otherwise -&gt; 4 </tt>)
data UCaseRhs' expr dom stage

-- | Unguarded right-hand side a pattern match (<tt> -&gt; 3 </tt>)
UUnguardedCaseRhs :: Ann expr dom stage -> UCaseRhs' expr dom stage
[_rhsCaseExpr] :: UCaseRhs' expr dom stage -> Ann expr dom stage

-- | Guarded right-hand sides of a pattern match (<tt> | x == 1 -&gt; 3; |
--   otherwise -&gt; 4 </tt>)
UGuardedCaseRhss :: AnnListG (UGuardedCaseRhs' expr) dom stage -> UCaseRhs' expr dom stage
[_rhsCaseGuards] :: UCaseRhs' expr dom stage -> AnnListG (UGuardedCaseRhs' expr) dom stage
type UCaseRhs = UCaseRhs' UExpr
type UCmdCaseRhs = UCaseRhs' UCmd

-- | A guarded right-hand side of pattern matches binding (<tt> | x &gt; 3
--   -&gt; 2 </tt>)
data UGuardedCaseRhs' expr dom stage
UGuardedCaseRhs :: AnnListG URhsGuard dom stage -> Ann expr dom stage -> UGuardedCaseRhs' expr dom stage

-- | Cannot be empty.
[_caseGuardStmts] :: UGuardedCaseRhs' expr dom stage -> AnnListG URhsGuard dom stage
[_caseGuardExpr] :: UGuardedCaseRhs' expr dom stage -> Ann expr dom stage
type UGuardedCaseRhs = UGuardedCaseRhs' UExpr
type UCmdGuardedCaseRhs = UGuardedCaseRhs' UCmd

-- | Pragmas that can be applied to expressions
data UExprPragma dom stage

-- | A <tt>CORE</tt> pragma for adding notes to expressions.
UCorePragma :: Ann UStringNode dom stage -> UExprPragma dom stage
[_pragmaStr] :: UExprPragma dom stage -> Ann UStringNode dom stage

-- | An <tt>SCC</tt> pragma for defining cost centers for profiling
USccPragma :: Ann UStringNode dom stage -> UExprPragma dom stage
[_pragmaStr] :: UExprPragma dom stage -> Ann UStringNode dom stage

-- | A pragma that describes if an expression was generated from a code
--   fragment by an external tool (<tt> {--} </tt>)
UGeneratedPragma :: Ann USourceRange dom stage -> UExprPragma dom stage
[_pragmaSrcRange] :: UExprPragma dom stage -> Ann USourceRange dom stage

-- | In-AST source ranges (for generated pragmas)
data USourceRange dom stage
USourceRange :: Ann UStringNode dom stage -> Ann Number dom stage -> Ann Number dom stage -> Ann Number dom stage -> Ann Number dom stage -> USourceRange dom stage
[_srFileName] :: USourceRange dom stage -> Ann UStringNode dom stage
[_srFromLine] :: USourceRange dom stage -> Ann Number dom stage
[_srFromCol] :: USourceRange dom stage -> Ann Number dom stage
[_srToLine] :: USourceRange dom stage -> Ann Number dom stage
[_srToCol] :: USourceRange dom stage -> Ann Number dom stage
data Number dom stage
Number :: Integer -> Number dom stage
[_numberInteger] :: Number dom stage -> Integer
data UCmd dom stage

-- | An arrow application command (<tt> f -&lt; x + 1 </tt>)
UArrowAppCmd :: Ann UExpr dom stage -> Ann UArrowAppl dom stage -> Ann UExpr dom stage -> UCmd dom stage
[_cmdLhs] :: UCmd dom stage -> Ann UExpr dom stage
[_cmdArrowOp] :: UCmd dom stage -> Ann UArrowAppl dom stage
[_cmdRhs] :: UCmd dom stage -> Ann UExpr dom stage

-- | A form command (<tt> (|untilA (increment -&lt; x+y) (within 0.5 -&lt;
--   x)|) </tt>)
UArrowFormCmd :: Ann UExpr dom stage -> AnnListG UCmd dom stage -> UCmd dom stage
[_cmdExpr] :: UCmd dom stage -> Ann UExpr dom stage
[_cmdInnerCmds] :: UCmd dom stage -> AnnListG UCmd dom stage

-- | A function application command
UAppCmd :: Ann UCmd dom stage -> Ann UExpr dom stage -> UCmd dom stage
[_cmdInnerCmd] :: UCmd dom stage -> Ann UCmd dom stage
[_cmdApplied] :: UCmd dom stage -> Ann UExpr dom stage

-- | An infix command application
UInfixCmd :: Ann UCmd dom stage -> Ann UName dom stage -> Ann UCmd dom stage -> UCmd dom stage
[_cmdLeftCmd] :: UCmd dom stage -> Ann UCmd dom stage
[_cmdOperator] :: UCmd dom stage -> Ann UName dom stage
[_cmdRightCmd] :: UCmd dom stage -> Ann UCmd dom stage

-- | A lambda command
ULambdaCmd :: AnnListG UPattern dom stage -> Ann UCmd dom stage -> UCmd dom stage

-- | at least one
[_cmdBindings] :: UCmd dom stage -> AnnListG UPattern dom stage
[_cmdInner] :: UCmd dom stage -> Ann UCmd dom stage

-- | A parenthesized command
UParenCmd :: Ann UCmd dom stage -> UCmd dom stage
[_cmdInner] :: UCmd dom stage -> Ann UCmd dom stage

-- | A pattern match command
UCaseCmd :: Ann UExpr dom stage -> AnnListG UCmdAlt dom stage -> UCmd dom stage
[_cmdExpr] :: UCmd dom stage -> Ann UExpr dom stage
[_cmdAlts] :: UCmd dom stage -> AnnListG UCmdAlt dom stage

-- | An if command (<tt> if f x y then g -&lt; x+1 else h -&lt; y+2 </tt>)
UIfCmd :: Ann UExpr dom stage -> Ann UCmd dom stage -> Ann UCmd dom stage -> UCmd dom stage
[_cmdExpr] :: UCmd dom stage -> Ann UExpr dom stage
[_cmdThen] :: UCmd dom stage -> Ann UCmd dom stage
[_cmdElse] :: UCmd dom stage -> Ann UCmd dom stage

-- | A local binding command (<tt> let z = x+y </tt>)
ULetCmd :: AnnListG ULocalBind dom stage -> Ann UCmd dom stage -> UCmd dom stage

-- | nonempty
[_cmdBinds] :: UCmd dom stage -> AnnListG ULocalBind dom stage
[_cmdInner] :: UCmd dom stage -> Ann UCmd dom stage

-- | A do-notation in a command
UDoCmd :: AnnListG UCmdStmt dom stage -> UCmd dom stage
[_cmdStmts] :: UCmd dom stage -> AnnListG UCmdStmt dom stage
data UArrowAppl dom stage

-- | Left arrow application: <tt>-&lt;</tt>
ULeftAppl :: UArrowAppl dom stage

-- | Right arrow application: <tt>&gt;-</tt>
URightAppl :: UArrowAppl dom stage

-- | Left arrow high application: <tt>-&lt;&lt;</tt>
ULeftHighApp :: UArrowAppl dom stage

-- | Right arrow high application: <tt>&gt;&gt;-</tt>
URightHighApp :: UArrowAppl dom stage

-- | Normal monadic statements
data UStmt' expr dom stage

-- | Binding statement (<tt> x &lt;- action </tt>)
UBindStmt :: Ann UPattern dom stage -> Ann expr dom stage -> UStmt' expr dom stage
[_stmtPattern] :: UStmt' expr dom stage -> Ann UPattern dom stage
[_stmtExpr] :: UStmt' expr dom stage -> Ann expr dom stage

-- | Non-binding statement (<tt> action </tt>)
UExprStmt :: Ann expr dom stage -> UStmt' expr dom stage
[_stmtExpr] :: UStmt' expr dom stage -> Ann expr dom stage

-- | Let statement (<tt> let x = 3; y = 4 </tt>)
ULetStmt :: AnnListG ULocalBind dom stage -> UStmt' expr dom stage
[_stmtBinds] :: UStmt' expr dom stage -> AnnListG ULocalBind dom stage

-- | A recursive binding statement with (<tt> rec b &lt;- f a c; c &lt;- f
--   b a </tt>)
URecStmt :: AnnListG (UStmt' expr) dom stage -> UStmt' expr dom stage
[_cmdStmtBinds] :: UStmt' expr dom stage -> AnnListG (UStmt' expr) dom stage
type UStmt = UStmt' UExpr
type UCmdStmt = UStmt' UCmd

-- | Body of a list comprehension: (<tt> | x &lt;- [1..10] </tt>)
data UListCompBody dom stage
UListCompBody :: AnnListG UCompStmt dom stage -> UListCompBody dom stage
[_compStmts] :: UListCompBody dom stage -> AnnListG UCompStmt dom stage

-- | List comprehension statement
data UCompStmt dom stage

-- | Normal monadic statement of a list comprehension
UCompStmt :: Ann UStmt dom stage -> UCompStmt dom stage
[_compStmt] :: UCompStmt dom stage -> Ann UStmt dom stage

-- | Then statements by <tt>TransformListComp</tt> (<tt> then sortWith by
--   (x + y) </tt>)
UThenStmt :: Ann UExpr dom stage -> AnnMaybeG UExpr dom stage -> UCompStmt dom stage
[_thenExpr] :: UCompStmt dom stage -> Ann UExpr dom stage
[_byExpr] :: UCompStmt dom stage -> AnnMaybeG UExpr dom stage

-- | Grouping statements by <tt>TransformListComp</tt> (<tt> then group by
--   (x + y) using groupWith </tt>) Note: either byExpr or usingExpr must
--   have a value
UGroupStmt :: AnnMaybeG UExpr dom stage -> AnnMaybeG UExpr dom stage -> UCompStmt dom stage
[_byExpr] :: UCompStmt dom stage -> AnnMaybeG UExpr dom stage
[_usingExpr] :: UCompStmt dom stage -> AnnMaybeG UExpr dom stage

-- | Keywords <tt>do</tt> or <tt>mdo</tt> to start a do-block
data UDoKind dom stage
UDoKeyword :: UDoKind dom stage
UMDoKeyword :: UDoKind dom stage

-- | Representation of patterns for pattern bindings
data UPattern dom stage

-- | Pattern name binding
UVarPat :: Ann UName dom stage -> UPattern dom stage
[_patternName] :: UPattern dom stage -> Ann UName dom stage

-- | Literal pattern
ULitPat :: Ann ULiteral dom stage -> UPattern dom stage
[_patternLiteral] :: UPattern dom stage -> Ann ULiteral dom stage

-- | Infix constructor application pattern (<tt> a :+: b </tt>)
UInfixAppPat :: Ann UPattern dom stage -> Ann UOperator dom stage -> Ann UPattern dom stage -> UPattern dom stage
[_patternLhs] :: UPattern dom stage -> Ann UPattern dom stage
[_patternOperator] :: UPattern dom stage -> Ann UOperator dom stage
[_patternRhs] :: UPattern dom stage -> Ann UPattern dom stage

-- | Constructor application pattern (<tt> Point x y </tt>)
UAppPat :: Ann UName dom stage -> AnnListG UPattern dom stage -> UPattern dom stage
[_patternName] :: UPattern dom stage -> Ann UName dom stage
[_patternArgs] :: UPattern dom stage -> AnnListG UPattern dom stage

-- | Tuple pattern (<tt> (x,y) </tt>)
UTuplePat :: AnnListG UPattern dom stage -> UPattern dom stage
[_patternElems] :: UPattern dom stage -> AnnListG UPattern dom stage

-- | Unboxed tuple pattern (<tt> () </tt>)
UUnboxTuplePat :: AnnListG UPattern dom stage -> UPattern dom stage
[_patternElems] :: UPattern dom stage -> AnnListG UPattern dom stage

-- | List pattern (<tt> [1,2,a,x] </tt>)
UListPat :: AnnListG UPattern dom stage -> UPattern dom stage
[_patternElems] :: UPattern dom stage -> AnnListG UPattern dom stage

-- | Parallel array pattern (<tt> [:1,2,a,x:] </tt>)
UParArrPat :: AnnListG UPattern dom stage -> UPattern dom stage
[_patternElems] :: UPattern dom stage -> AnnListG UPattern dom stage

-- | Parenthesised patterns
UParenPat :: Ann UPattern dom stage -> UPattern dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage

-- | Record pattern (<tt> Point { x = 3, y } </tt>)
URecPat :: Ann UName dom stage -> AnnListG UPatternField dom stage -> UPattern dom stage
[_patternName] :: UPattern dom stage -> Ann UName dom stage
[_patternFields] :: UPattern dom stage -> AnnListG UPatternField dom stage

-- | As-pattern (explicit name binding) (<tt> ls@(hd:_) </tt>)
UAsPat :: Ann UName dom stage -> Ann UPattern dom stage -> UPattern dom stage
[_patternName] :: UPattern dom stage -> Ann UName dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage

-- | Wildcard pattern: (<tt> _ </tt>)
UWildPat :: UPattern dom stage

-- | Irrefutable pattern (<tt> ~(x:_) </tt>)
UIrrefutablePat :: Ann UPattern dom stage -> UPattern dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage

-- | Bang pattern (<tt> !x </tt>)
UBangPat :: Ann UPattern dom stage -> UPattern dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage

-- | Pattern with explicit type signature (<tt> x :: Int </tt>)
UTypeSigPat :: Ann UPattern dom stage -> Ann UType dom stage -> UPattern dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage
[_patternType] :: UPattern dom stage -> Ann UType dom stage

-- | View pattern (<tt> f -&gt; Just 1 </tt>) regular list pattern omitted
--   xml patterns omitted
UViewPat :: Ann UExpr dom stage -> Ann UPattern dom stage -> UPattern dom stage
[_patternExpr] :: UPattern dom stage -> Ann UExpr dom stage
[_patternInner] :: UPattern dom stage -> Ann UPattern dom stage

-- | Splice patterns: <tt>$(generateX inp)</tt>
USplicePat :: Ann USplice dom stage -> UPattern dom stage
[_patternSplice] :: UPattern dom stage -> Ann USplice dom stage

-- | Quasi-quoted patterns: <tt>[| 1 + 2 |]</tt>
UQuasiQuotePat :: Ann UQuasiQuote dom stage -> UPattern dom stage
[_patQQ] :: UPattern dom stage -> Ann UQuasiQuote dom stage
UNPlusKPat :: Ann UName dom stage -> Ann ULiteral dom stage -> UPattern dom stage
[_patternName] :: UPattern dom stage -> Ann UName dom stage
[_patternLit] :: UPattern dom stage -> Ann ULiteral dom stage
data UPatternField dom stage

-- | Named field pattern (<tt> p = Point 3 2 </tt>)
UNormalFieldPattern :: Ann UName dom stage -> Ann UPattern dom stage -> UPatternField dom stage
[_fieldPatternName] :: UPatternField dom stage -> Ann UName dom stage
[_fieldPattern] :: UPatternField dom stage -> Ann UPattern dom stage

-- | Named field pun (<tt> p </tt>)
UFieldPunPattern :: Ann UName dom stage -> UPatternField dom stage
[_fieldPatternName] :: UPatternField dom stage -> Ann UName dom stage

-- | Wildcard field pattern (<tt> .. </tt>)
UFieldWildcardPattern :: Ann UFieldWildcard dom stage -> UPatternField dom stage
[_fieldPatternWildcard] :: UPatternField dom stage -> Ann UFieldWildcard dom stage

-- | Type variable declaration
data UTyVar dom stage
UTyVarDecl :: Ann UName dom stage -> AnnMaybeG UKindConstraint dom stage -> UTyVar dom stage
[_tyVarName] :: UTyVar dom stage -> Ann UName dom stage
[_tyVarKind] :: UTyVar dom stage -> AnnMaybeG UKindConstraint dom stage

-- | Haskell types
data UType dom stage

-- | Forall types (<tt> forall x y . type </tt>)
UTyForall :: AnnListG UTyVar dom stage -> Ann UType dom stage -> UType dom stage
[_typeBounded] :: UType dom stage -> AnnListG UTyVar dom stage
[_typeType] :: UType dom stage -> Ann UType dom stage

-- | Type with a context (<tt> forall x y . type </tt>)
UTyCtx :: Ann UContext dom stage -> Ann UType dom stage -> UType dom stage
[_typeCtx] :: UType dom stage -> Ann UContext dom stage
[_typeType] :: UType dom stage -> Ann UType dom stage

-- | Function types (<tt> a -&gt; b </tt>)
UTyFun :: Ann UType dom stage -> Ann UType dom stage -> UType dom stage
[_typeParam] :: UType dom stage -> Ann UType dom stage
[_typeResult] :: UType dom stage -> Ann UType dom stage

-- | Tuple types (<tt> (a,b) </tt>)
UTyTuple :: AnnListG UType dom stage -> UType dom stage
[_typeElements] :: UType dom stage -> AnnListG UType dom stage

-- | Unboxed tuple types (<tt> () </tt>)
UTyUnbTuple :: AnnListG UType dom stage -> UType dom stage
[_typeElements] :: UType dom stage -> AnnListG UType dom stage

-- | List type with special syntax (<tt> [a] </tt>)
UTyList :: Ann UType dom stage -> UType dom stage
[_typeElement] :: UType dom stage -> Ann UType dom stage

-- | Parallel array type (<tt> [:a:] </tt>)
UTyParArray :: Ann UType dom stage -> UType dom stage
[_typeElement] :: UType dom stage -> Ann UType dom stage

-- | Type application (<tt> F a </tt>)
UTyApp :: Ann UType dom stage -> Ann UType dom stage -> UType dom stage
[_typeCon] :: UType dom stage -> Ann UType dom stage
[_typeArg] :: UType dom stage -> Ann UType dom stage

-- | Type variable or constructor (<tt> a </tt>)
UTyVar :: Ann UName dom stage -> UType dom stage
[_typeName] :: UType dom stage -> Ann UName dom stage

-- | Type surrounded by parentheses (<tt> (T a) </tt>)
UTyParen :: Ann UType dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage

-- | Infix type constructor (<tt> (a &lt;: b) </tt>)
UTyInfix :: Ann UType dom stage -> Ann UOperator dom stage -> Ann UType dom stage -> UType dom stage
[_typeLeft] :: UType dom stage -> Ann UType dom stage
[_typeOperator] :: UType dom stage -> Ann UOperator dom stage
[_typeRight] :: UType dom stage -> Ann UType dom stage

-- | Type with explicit kind signature (<tt> a :: * </tt>)
UTyKinded :: Ann UType dom stage -> Ann UKind dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage
[_typeKind] :: UType dom stage -> Ann UKind dom stage
UTyPromoted :: Ann (UPromoted UType) dom stage -> UType dom stage
[_tpPromoted] :: UType dom stage -> Ann (UPromoted UType) dom stage

-- | A Template Haskell splice type (<tt> $(genType) </tt>).
UTySplice :: Ann USplice dom stage -> UType dom stage
[_tsSplice] :: UType dom stage -> Ann USplice dom stage

-- | A Template Haskell quasi-quote type (<tt> [quoter| ... ] </tt>).
UTyQuasiQuote :: Ann UQuasiQuote dom stage -> UType dom stage
[_typeQQ] :: UType dom stage -> Ann UQuasiQuote dom stage

-- | Strict type marked with <tt>!</tt>.
UTyBang :: Ann UType dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage

-- | Lazy type marked with <tt>~</tt>. (Should only be used if
--   <tt>Strict</tt> or <tt>StrictData</tt> language extension is used)
UTyLazy :: Ann UType dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage

-- | Strict type marked with UNPACK pragma. (Usually contains the bang
--   mark.)
UTyUnpack :: Ann UType dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage

-- | Strict type marked with NOUNPACK pragma. (Usually contains the bang
--   mark.)
UTyNoUnpack :: Ann UType dom stage -> UType dom stage
[_typeInner] :: UType dom stage -> Ann UType dom stage

-- | A wildcard type (<tt> _ </tt>) with <tt>-XPartialTypeSignatures</tt>
UTyWildcard :: UType dom stage

-- | A named wildcard type (<tt> _t </tt>) with
--   <tt>-XPartialTypeSignatures</tt>
UTyNamedWildc :: Ann UName dom stage -> UType dom stage
[_typeWildcardName] :: UType dom stage -> Ann UName dom stage
data UContext dom stage

-- | Assertions with the fat arrow (<tt> C a =&gt; ... </tt>)
UContext :: Ann UAssertion dom stage -> UContext dom stage
[_contextAssertion] :: UContext dom stage -> Ann UAssertion dom stage

-- | A single assertion in the context
data UAssertion dom stage

-- | Class assertion (<tt>Cls x</tt>)
UClassAssert :: Ann UName dom stage -> AnnListG UType dom stage -> UAssertion dom stage
[_assertClsName] :: UAssertion dom stage -> Ann UName dom stage
[_assertTypes] :: UAssertion dom stage -> AnnListG UType dom stage

-- | Infix class assertion, also contains type equations (<tt> a ~ X y
--   </tt>)
UInfixAssert :: Ann UType dom stage -> Ann UOperator dom stage -> Ann UType dom stage -> UAssertion dom stage
[_assertLhs] :: UAssertion dom stage -> Ann UType dom stage
[_assertOp] :: UAssertion dom stage -> Ann UOperator dom stage
[_assertRhs] :: UAssertion dom stage -> Ann UType dom stage

-- | Assertion for implicit parameter binding (<tt> ?cmp :: a -&gt; a -&gt;
--   Bool </tt>)
UImplicitAssert :: Ann UName dom stage -> Ann UType dom stage -> UAssertion dom stage
[_assertImplVar] :: UAssertion dom stage -> Ann UName dom stage
[_assertImplType] :: UAssertion dom stage -> Ann UType dom stage

-- | Multiple assertions in one (<tt> (Ord a, Show a) </tt>)
UTupleAssert :: AnnListG UAssertion dom stage -> UAssertion dom stage
[_innerAsserts] :: UAssertion dom stage -> AnnListG UAssertion dom stage

-- | Wildcard assertion (<tt> _ </tt>), enabled by
--   <tt>PartialTypeSignatures</tt>
UWildcardAssert :: UAssertion dom stage

-- | Kind constraint (<tt> :: * -&gt; * </tt>)
data UKindConstraint dom stage
UKindConstraint :: Ann UKind dom stage -> UKindConstraint dom stage
[_kindConstr] :: UKindConstraint dom stage -> Ann UKind dom stage

-- | Haskell kinds
data UKind dom stage

-- | <tt>*</tt>, the kind of types
UStarKind :: UKind dom stage

-- | <tt>#</tt>, the kind of unboxed types
UUnboxKind :: UKind dom stage

-- | <tt>-&gt;</tt>, the kind of type constructor
UFunKind :: Ann UKind dom stage -> Ann UKind dom stage -> UKind dom stage
[_kindLeft] :: UKind dom stage -> Ann UKind dom stage
[_kindRight] :: UKind dom stage -> Ann UKind dom stage

-- | A parenthesised kind
UParenKind :: Ann UKind dom stage -> UKind dom stage
[_kindParen] :: UKind dom stage -> Ann UKind dom stage

-- | Kind variable (using <tt>PolyKinds</tt> extension)
UVarKind :: Ann UName dom stage -> UKind dom stage
[_kindVar] :: UKind dom stage -> Ann UName dom stage

-- | Kind application (<tt> k1 k2 </tt>)
UAppKind :: Ann UKind dom stage -> Ann UKind dom stage -> UKind dom stage
[_kindAppFun] :: UKind dom stage -> Ann UKind dom stage
[_kindAppArg] :: UKind dom stage -> Ann UKind dom stage

-- | Infix kind application (<tt> k1 ~&gt; k2 </tt>)
UInfixAppKind :: Ann UKind dom stage -> Ann UOperator dom stage -> Ann UKind dom stage -> UKind dom stage
[_kindLhs] :: UKind dom stage -> Ann UKind dom stage
[_kindAppOp] :: UKind dom stage -> Ann UOperator dom stage
[_kindRhs] :: UKind dom stage -> Ann UKind dom stage

-- | A list kind (<tt> [k] </tt>)
UListKind :: Ann UKind dom stage -> UKind dom stage
[_kindElem] :: UKind dom stage -> Ann UKind dom stage

-- | A tuple kind (<tt> (Symbol, *) </tt>)
UTupleKind :: AnnListG UKind dom stage -> UKind dom stage
[_kindElems] :: UKind dom stage -> AnnListG UKind dom stage

-- | A promoted kind (<tt> '(k1,k2,k3) </tt>)
UPromotedKind :: Ann (UPromoted UKind) dom stage -> UKind dom stage
[_kindPromoted] :: UKind dom stage -> Ann (UPromoted UKind) dom stage

-- | A type on the kind level with <tt>TypeInType</tt>
UTypeKind :: Ann UType dom stage -> UKind dom stage
[_kindType] :: UKind dom stage -> Ann UType dom stage
data UPromoted t dom stage

-- | Numeric value promoted to the kind level.
UPromotedInt :: Integer -> UPromoted t dom stage
[_promotedIntValue] :: UPromoted t dom stage -> Integer

-- | String value promoted to the kind level.
UPromotedString :: String -> UPromoted t dom stage
[_promotedStringValue] :: UPromoted t dom stage -> String

-- | A data constructor value promoted to the kind level.
UPromotedCon :: Ann UName dom stage -> UPromoted t dom stage
[_promotedConName] :: UPromoted t dom stage -> Ann UName dom stage

-- | A list of elements as a kind.
UPromotedList :: AnnListG t dom stage -> UPromoted t dom stage
[_promotedElements] :: UPromoted t dom stage -> AnnListG t dom stage

-- | A tuple of elements as a kind.
UPromotedTuple :: AnnListG t dom stage -> UPromoted t dom stage
[_promotedElements] :: UPromoted t dom stage -> AnnListG t dom stage

-- | Kind of the unit value <tt>()</tt>.
UPromotedUnit :: UPromoted t dom stage

-- | Haskell literals
data ULiteral dom stage

-- | Character literal: <tt><tt>c</tt></tt>
UCharLit :: Char -> ULiteral dom stage
[_charLitValue] :: ULiteral dom stage -> Char

-- | String literal: <tt>"abc"</tt>
UStringLit :: String -> ULiteral dom stage
[_stringLitValue] :: ULiteral dom stage -> String

-- | Integer literal: <tt>12</tt>
UIntLit :: Integer -> ULiteral dom stage
[_intLitValue] :: ULiteral dom stage -> Integer

-- | Fractional literal: <tt>3.14</tt>
UFracLit :: Rational -> ULiteral dom stage
[_fracLitValue] :: ULiteral dom stage -> Rational

-- | Primitive integer literal (of type <tt>Int#</tt>): <tt>32#</tt>
UPrimIntLit :: Integer -> ULiteral dom stage
[_intLitValue] :: ULiteral dom stage -> Integer

-- | Primitive word literal (of type <tt>Word#</tt>): <tt>32##</tt>
UPrimWordLit :: Integer -> ULiteral dom stage
[_intLitValue] :: ULiteral dom stage -> Integer

-- | Primitive float literal (of type <tt>Float#</tt>): <tt>3.14#</tt>
UPrimFloatLit :: Rational -> ULiteral dom stage
[_floatLitValue] :: ULiteral dom stage -> Rational

-- | Primitive double literal (of type <tt>Double#</tt>): <tt>3.14##</tt>
UPrimDoubleLit :: Rational -> ULiteral dom stage
[_floatLitValue] :: ULiteral dom stage -> Rational

-- | Primitive character literal (of type <tt>Char#</tt>):
--   <tt><tt>c</tt>#</tt>
UPrimCharLit :: Char -> ULiteral dom stage
[_charLitValue] :: ULiteral dom stage -> Char

-- | Primitive string literal (of type <tt>Addr#</tt>): <tt>"xxx"#</tt>
UPrimStringLit :: String -> ULiteral dom stage
[_stringLitValue] :: ULiteral dom stage -> String
data UOperator dom stage

-- | A normal name used as an operator with backticks: <tt> a <a>mod</a> b
--   </tt>
UBacktickOp :: Ann UQualifiedName dom stage -> UOperator dom stage
[_operatorName] :: UOperator dom stage -> Ann UQualifiedName dom stage

-- | A normal operator used as an operator.
UNormalOp :: Ann UQualifiedName dom stage -> UOperator dom stage
[_operatorName] :: UOperator dom stage -> Ann UQualifiedName dom stage
data UName dom stage

-- | Parenthesized name: <tt> foldl (+) 0 </tt>
UParenName :: Ann UQualifiedName dom stage -> UName dom stage
[_simpleName] :: UName dom stage -> Ann UQualifiedName dom stage

-- | A normal, non-operator name.
UNormalName :: Ann UQualifiedName dom stage -> UName dom stage
[_simpleName] :: UName dom stage -> Ann UQualifiedName dom stage

-- | Implicit name: <tt> ?var </tt>
UImplicitName :: Ann UQualifiedName dom stage -> UName dom stage
[_simpleName] :: UName dom stage -> Ann UQualifiedName dom stage

-- | Possible qualified names. Contains also implicit names. Linear
--   implicit parameter: <tt>%x</tt>. Non-linear implicit parameter:
--   <tt>?x</tt>.
data UQualifiedName dom stage
UQualifiedName :: AnnListG UNamePart dom stage -> Ann UNamePart dom stage -> UQualifiedName dom stage
[_qualifiers] :: UQualifiedName dom stage -> AnnListG UNamePart dom stage
[_unqualifiedName] :: UQualifiedName dom stage -> Ann UNamePart dom stage
nameFromList :: AnnListG UNamePart dom stage -> UQualifiedName dom stage

-- | Parts of a qualified name.
data UNamePart dom stage
UNamePart :: String -> UNamePart dom stage
[_simpleNameStr] :: UNamePart dom stage -> String

-- | Program elements formatted as string literals (import packages, pragma
--   texts)
data UStringNode dom stage
UStringNode :: String -> UStringNode dom stage
[_stringNodeStr] :: UStringNode dom stage -> String
