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


-- | Creating the Haskell-Tools AST from GHC's representations
--   
--   This package collects information from various representations of a
--   Haskell program in GHC. Basically GHC provides us with the parsed, the
--   renamed and the type checked representation of the program, if it was
--   type correct. Each version contains different information. For
--   example, the renamed AST contains the unique names of the definitions,
--   however, template haskell splices are already resolved and thus
--   missing from that version of the AST. To get the final representation
--   we perform a transformation on the parsed and renamed representation,
--   and then use the type checked one to look up the types of the names.
--   The whole transformation is defined in the <a>Modules</a> module.
--   Other modules define the functions that convert elements of the GHC
--   AST to our AST.
@package haskell-tools-backend-ghc
@version 0.8.0.0


-- | Utility functions defined on the GHC AST representation.
module Language.Haskell.Tools.AST.FromGHC.GHCUtils
class OutputableBndr name => GHCName name
rdrName :: GHCName name => name -> RdrName
getFromNameUsing :: (GHCName name, Applicative f) => (Name -> Ghc (f Id)) -> Name -> Ghc (f name)
getBindsAndSigs :: GHCName name => HsValBinds name -> ([LSig name], LHsBinds name)
nameFromId :: GHCName name => Id -> name
unpackPostRn :: GHCName name => RdrName -> PostRn name name -> name
gunpackPostRn :: GHCName name => a -> (name -> a) -> PostRn name name -> a
occName :: GHCName n => n -> OccName
getFieldOccName :: GHCName n => Located (FieldOcc n) -> Located n
getFieldOccName' :: GHCName n => FieldOcc n -> n

-- | Loading ids for top-level ghc names
getTopLevelId :: Name -> Ghc (Maybe Id)

-- | Get names from the GHC AST
class HsHasName a
hsGetNames :: HsHasName a => a -> [Name]

-- | Get the original form of a name
rdrNameStr :: RdrName -> String
class FromGHCName n
fromGHCName :: FromGHCName n => Name -> n

-- | Tries to simplify the type that has HsAppsTy before renaming. Does not
--   always provide the correct form. Treats each operator as if they are
--   of equivalent precedence and always left-associative.
cleanHsType :: forall n. (OutputableBndr n) => HsType n -> HsType n
mergeFixityDefs :: [Located (FixitySig n)] -> [Located (FixitySig n)]
getGroupRange :: HsGroup n -> SrcSpan
getHsValRange :: HsValBinds n -> SrcSpan
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName RdrName.RdrName
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName Name.Name
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName RdrName.RdrName
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName Name.Name
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName Var.Id
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName e => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName [e]
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName e => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (SrcLoc.Located e)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsBinds.HsLocalBinds n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.HsDecl n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.InstDecl n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.DataFamInstDecl n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.TyClGroup n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.TyClDecl n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.HsDataDefn n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.ConDecl n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.HsConDeclDetails n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsTypes.ConDeclField n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsTypes.FieldOcc n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsBinds.Sig n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.ForeignDecl n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsBinds.HsValBinds n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (Bag.Bag n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsBinds.HsBind n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsExpr.ParStmtBlock l n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsTypes.HsTyVarBndr n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsExpr.Stmt n b)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsPat.Pat n)
instance (Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName (HsDecls.HsGroup n)
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.FromGHCName RdrName.RdrName
instance Language.Haskell.Tools.AST.FromGHC.GHCUtils.FromGHCName Name.Name


-- | Functions that convert the literals of the GHC AST to corresponding
--   elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Literals
trfLiteral' :: HsLit -> Trf (ULiteral (Dom r) RangeStage)
trfOverloadedLit :: OverLitVal -> Trf (ULiteral (Dom r) RangeStage)


-- | Functions that convert the basic elements of the GHC AST to
--   corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Names
trfOperator :: TransformName n r => Located n -> Trf (Ann UOperator (Dom r) RangeStage)
trfOperator' :: TransformName n r => n -> Trf (UOperator (Dom r) RangeStage)
trfName :: TransformName n r => Located n -> Trf (Ann UName (Dom r) RangeStage)
trfName' :: TransformName n r => n -> Trf (UName (Dom r) RangeStage)
trfAmbiguousFieldName :: TransformName n r => Located (AmbiguousFieldOcc n) -> Trf (Ann UName (Dom r) RangeStage)
trfAmbiguousFieldName' :: forall n r. TransformName n r => SrcSpan -> AmbiguousFieldOcc n -> Trf (Ann UName (Dom r) RangeStage)
trfAmbiguousOperator' :: forall n r. TransformName n r => SrcSpan -> AmbiguousFieldOcc n -> Trf (Ann UOperator (Dom r) RangeStage)
trfAmbiguousFieldOperator' :: t1 -> AmbiguousFieldOcc t -> Trf (Ann UOperator (Dom n) RangeStage)
class (DataId n, Eq n, GHCName n, FromGHCName n) => TransformableName n
correctNameString :: TransformableName n => n -> Trf String
transformSplice :: TransformableName n => HsSplice RdrName -> Trf (HsSplice n)

-- | This class allows us to use the same transformation code for multiple
--   variants of the GHC AST. GHC UName annotated with <tt>name</tt> can be
--   transformed to our representation with semantic annotations of
--   <tt>res</tt>.
class (TransformableName name, HsHasName name, TransformableName res, HsHasName res, GHCName res) => TransformName name res

-- | Demote a given name
transformName :: TransformName name res => name -> res
trfNameText :: String -> Trf (Ann UName (Dom r) RangeStage)
trfImplicitName :: HsIPName -> Trf (Ann UName (Dom r) RangeStage)
isOperatorStr :: String -> Bool
trfQualifiedName :: TransformName n r => Bool -> Located n -> Trf (Ann UQualifiedName (Dom r) RangeStage)
trfQualifiedNameFocus :: TransformName n r => Bool -> n -> Trf (Ann UQualifiedName (Dom r) RangeStage)
trfQualifiedName' :: TransformName n r => n -> Trf (UQualifiedName (Dom r) RangeStage)
trfOperatorStr :: Bool -> String -> Trf (AnnListG UNamePart (Dom r) RangeStage)

-- | Creates a qualified name from a name string
trfNameStr :: Bool -> String -> Trf (AnnListG UNamePart (Dom r) RangeStage)
trfNameStr' :: String -> SrcLoc -> [Ann UNamePart (Dom r) RangeStage]
trfFastString :: Located FastString -> Trf (Ann UStringNode (Dom r) RangeStage)
instance Language.Haskell.Tools.AST.FromGHC.Names.TransformableName RdrName.RdrName
instance Language.Haskell.Tools.AST.FromGHC.Names.TransformableName Name.Name
instance (n ~ r, Language.Haskell.Tools.AST.FromGHC.Names.TransformableName n, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName n) => Language.Haskell.Tools.AST.FromGHC.Names.TransformName n r
instance (Language.Haskell.Tools.AST.FromGHC.Names.TransformableName res, Language.Haskell.Tools.AST.FromGHC.GHCUtils.GHCName res, Language.Haskell.Tools.AST.FromGHC.GHCUtils.HsHasName res) => Language.Haskell.Tools.AST.FromGHC.Names.TransformName Name.Name res


-- | Functions that convert the kind-related elements of the GHC AST to
--   corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Kinds
trfKindSig :: TransformName n r => Maybe (LHsKind n) -> Trf (AnnMaybeG UKindConstraint (Dom r) RangeStage)
trfKindSig' :: TransformName n r => Located (HsKind n) -> Trf (Ann UKindConstraint (Dom r) RangeStage)
trfKind :: TransformName n r => Located (HsKind n) -> Trf (Ann UKind (Dom r) RangeStage)
trfKind' :: TransformName n r => HsKind n -> Trf (UKind (Dom r) RangeStage)
trfPromoted' :: (TransformName n r, HasNoSemanticInfo (Dom r) a) => (HsType n -> Trf (a (Dom r) RangeStage)) -> HsType n -> Trf (UPromoted a (Dom r) RangeStage)


-- | Functions that convert the type-related elements of the GHC AST to
--   corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Types
trfType :: TransformName n r => Located (HsType n) -> Trf (Ann UType (Dom r) RangeStage)
trfType' :: TransformName n r => HsType n -> Trf (UType (Dom r) RangeStage)
trfBindings :: TransformName n r => [Located (HsTyVarBndr n)] -> Trf (AnnListG UTyVar (Dom r) RangeStage)
trfTyVar :: TransformName n r => Located (HsTyVarBndr n) -> Trf (Ann UTyVar (Dom r) RangeStage)
trfTyVar' :: TransformName n r => HsTyVarBndr n -> Trf (UTyVar (Dom r) RangeStage)
trfCtx :: TransformName n r => Trf SrcLoc -> Located (HsContext n) -> Trf (AnnMaybeG UContext (Dom r) RangeStage)
trfAssertion :: TransformName n r => LHsType n -> Trf (Ann UAssertion (Dom r) RangeStage)
trfAssertion' :: forall n r. TransformName n r => HsType n -> Trf (UAssertion (Dom r) RangeStage)


-- | Functions that convert the pattern-related elements of the GHC AST to
--   corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Patterns
trfPattern :: TransformName n r => Located (Pat n) -> Trf (Ann UPattern (Dom r) RangeStage)

-- | Locations for right-associative infix patterns are incorrect in GHC
--   AST
correctPatternLoc :: Located (Pat n) -> Located (Pat n)
trfPattern' :: TransformName n r => Pat n -> Trf (UPattern (Dom r) RangeStage)
trfPatternField' :: TransformName n r => HsRecField n (LPat n) -> Trf (UPatternField (Dom r) RangeStage)


-- | Functions that convert the statement-related elements of the GHC AST
--   to corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Stmts
trfDoStmt :: TransformName n r => Located (Stmt n (LHsExpr n)) -> Trf (Ann UStmt (Dom r) RangeStage)
trfDoStmt' :: TransformName n r => Stmt n (Located (HsExpr n)) -> Trf (UStmt' UExpr (Dom r) RangeStage)
gTrfDoStmt' :: (TransformName n r, Data (ge n), Outputable (ge n)) => (Located (ge n) -> Trf (Ann ae (Dom r) RangeStage)) -> Stmt n (Located (ge n)) -> Trf (UStmt' ae (Dom r) RangeStage)
trfListCompStmts :: TransformName n r => [Located (Stmt n (LHsExpr n))] -> Trf (AnnListG UListCompBody (Dom r) RangeStage)
trfListCompStmt :: TransformName n r => Located (Stmt n (LHsExpr n)) -> Trf [Ann UCompStmt (Dom r) RangeStage]
extractActualStmt :: TransformName n r => Stmt n (LHsExpr n) -> Trf (Ann UCompStmt (Dom r) RangeStage)
getNormalStmts :: [Located (Stmt n (LHsExpr n))] -> [Located (Stmt n (LHsExpr n))]
getLastStmt :: [Located (Stmt n (LHsExpr n))] -> Located (HsExpr n)


-- | Functions that convert the expression-related elements of the GHC AST
--   to corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Exprs
trfExpr :: forall n r. TransformName n r => Located (HsExpr n) -> Trf (Ann UExpr (Dom r) RangeStage)
createScopeInfo :: Trf ScopeInfo
trfExpr' :: TransformName n r => HsExpr n -> Trf (UExpr (Dom r) RangeStage)
trfFieldInits :: TransformName n r => HsRecFields n (LHsExpr n) -> Trf (AnnListG UFieldUpdate (Dom r) RangeStage)
trfFieldInit :: TransformName n r => Located (HsRecField n (LHsExpr n)) -> Trf (Ann UFieldUpdate (Dom r) RangeStage)
trfFieldUpdate :: TransformName n r => HsRecField' (AmbiguousFieldOcc n) (LHsExpr n) -> Trf (UFieldUpdate (Dom r) RangeStage)
trfAlt :: TransformName n r => Located (Match n (LHsExpr n)) -> Trf (Ann UAlt (Dom r) RangeStage)
trfAlt' :: TransformName n r => Match n (LHsExpr n) -> Trf (UAlt (Dom r) RangeStage)
gTrfAlt' :: TransformName n r => (Located (ge n) -> Trf (Ann ae (Dom r) RangeStage)) -> Match n (Located (ge n)) -> Trf (UAlt' ae (Dom r) RangeStage)
trfCaseRhss :: TransformName n r => [Located (GRHS n (LHsExpr n))] -> Trf (Ann UCaseRhs (Dom r) RangeStage)
gTrfCaseRhss :: TransformName n r => (Located (ge n) -> Trf (Ann ae (Dom r) RangeStage)) -> [Located (GRHS n (Located (ge n)))] -> Trf (Ann (UCaseRhs' ae) (Dom r) RangeStage)
trfGuardedCaseRhs :: TransformName n r => Located (GRHS n (LHsExpr n)) -> Trf (Ann UGuardedCaseRhs (Dom r) RangeStage)
trfGuardedCaseRhs' :: TransformName n r => GRHS n (LHsExpr n) -> Trf (UGuardedCaseRhs (Dom r) RangeStage)
gTrfGuardedCaseRhs' :: TransformName n r => (Located (ge n) -> Trf (Ann ae (Dom r) RangeStage)) -> GRHS n (Located (ge n)) -> Trf (UGuardedCaseRhs' ae (Dom r) RangeStage)
trfCmdTop :: TransformName n r => Located (HsCmdTop n) -> Trf (Ann UCmd (Dom r) RangeStage)
trfCmd :: TransformName n r => Located (HsCmd n) -> Trf (Ann UCmd (Dom r) RangeStage)
trfCmd' :: TransformName n r => HsCmd n -> Trf (UCmd (Dom r) RangeStage)
trfText' :: StringLiteral -> Trf (UStringNode (Dom r) RangeStage)
trfSourceRange :: (StringLiteral, (Int, Int), (Int, Int)) -> Trf (Ann USourceRange (Dom r) RangeStage)


-- | Functions that convert the value and function definitions of the GHC
--   AST to corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Binds
trfBind :: TransformName n r => Located (HsBind n) -> Trf (Ann UValueBind (Dom r) RangeStage)
trfBind' :: TransformName n r => HsBind n -> Trf (UValueBind (Dom r) RangeStage)
trfMatch :: TransformName n r => n -> Located (Match n (LHsExpr n)) -> Trf (Ann UMatch (Dom r) RangeStage)
trfMatch' :: TransformName n r => n -> Match n (LHsExpr n) -> Trf (UMatch (Dom r) RangeStage)
trfMatchLhs :: TransformName n r => n -> MatchFixity n -> [LPat n] -> Trf (Ann UMatchLhs (Dom r) RangeStage)
trfRhss :: TransformName n r => [Located (GRHS n (LHsExpr n))] -> Trf (Ann URhs (Dom r) RangeStage)
trfGuardedRhs :: TransformName n r => Located (GRHS n (LHsExpr n)) -> Trf (Ann UGuardedRhs (Dom r) RangeStage)
trfRhsGuard :: TransformName n r => Located (Stmt n (LHsExpr n)) -> Trf (Ann URhsGuard (Dom r) RangeStage)
trfRhsGuard' :: TransformName n r => Stmt n (LHsExpr n) -> Trf (URhsGuard (Dom r) RangeStage)
trfWhereLocalBinds :: TransformName n r => SrcSpan -> HsLocalBinds n -> Trf (AnnMaybeG ULocalBinds (Dom r) RangeStage)
getBindLocs :: HsLocalBinds n -> SrcSpan
trfLocalBinds :: TransformName n r => AnnKeywordId -> HsLocalBinds n -> Trf (AnnListG ULocalBind (Dom r) RangeStage)
trfIpBind :: TransformName n r => Located (IPBind n) -> Trf (Ann ULocalBind (Dom r) RangeStage)
trfLocalSig :: TransformName n r => Located (Sig n) -> Trf (Ann ULocalBind (Dom r) RangeStage)
trfTypeSig :: TransformName n r => Located (Sig n) -> Trf (Ann UTypeSignature (Dom r) RangeStage)
trfTypeSig' :: TransformName n r => Sig n -> Trf (UTypeSignature (Dom r) RangeStage)
trfFixitySig :: TransformName n r => FixitySig n -> Trf (UFixitySignature (Dom r) RangeStage)
trfInlinePragma :: TransformName n r => Located n -> InlinePragma -> Trf (Ann UInlinePragma (Dom r) RangeStage)
trfPhase :: Trf SrcLoc -> Activation -> Trf (AnnMaybeG UPhaseControl (Dom r) RangeStage)
trfPhaseNum :: PhaseNum -> Trf (Ann PhaseNumber (Dom r) RangeStage)
trfConlike :: [SrcSpan] -> RuleMatchInfo -> Trf (AnnMaybeG UConlikeAnnot (Dom r) RangeStage)


-- | Functions that convert the declarations of the GHC AST to
--   corresponding elements in the Haskell-tools AST representation
module Language.Haskell.Tools.AST.FromGHC.Decls
trfDecls :: TransformName n r => [LHsDecl n] -> Trf (AnnListG UDecl (Dom r) RangeStage)
trfDeclsGroup :: forall n r. TransformName n r => HsGroup n -> Trf (AnnListG UDecl (Dom r) RangeStage)
trfDecl :: TransformName n r => Located (HsDecl n) -> Trf (Ann UDecl (Dom r) RangeStage)
trfGADT :: TransformName n r => NewOrData -> Located n -> LHsQTyVars n -> Located (HsContext n) -> Maybe (Located (HsKind n)) -> [Located (ConDecl n)] -> Maybe (Located [LHsSigType n]) -> AnnKeywordId -> Trf SrcLoc -> Trf (UDecl (Dom r) RangeStage)
trfDataDef :: TransformName n r => NewOrData -> Located n -> LHsQTyVars n -> Located (HsContext n) -> [Located (ConDecl n)] -> Maybe (Located [LHsSigType n]) -> AnnKeywordId -> Trf SrcLoc -> Trf (UDecl (Dom r) RangeStage)
trfVal :: TransformName n r => HsBindLR n n -> Trf (UDecl (Dom r) RangeStage)
trfSig :: TransformName n r => Sig n -> Trf (UDecl (Dom r) RangeStage)
trfSpecializePragma :: TransformName n r => Located n -> [Located (HsType n)] -> Activation -> Trf (Ann USpecializePragma (Dom r) RangeStage)
trfConDecl :: TransformName n r => Located (ConDecl n) -> Trf (Ann UConDecl (Dom r) RangeStage)
trfConDecl' :: TransformName n r => ConDecl n -> Trf (UConDecl (Dom r) RangeStage)
trfConTyVars :: TransformName n r => Maybe (LHsQTyVars n) -> Trf (AnnListG UTyVar (Dom r) RangeStage)
trfConCtx :: TransformName n r => Maybe (LHsContext n) -> Trf (AnnMaybeG UContext (Dom r) RangeStage)
trfGADTConDecl :: TransformName n r => Located (ConDecl n) -> Trf (Ann UGadtConDecl (Dom r) RangeStage)
trfGADTConDecl' :: TransformName n r => ConDecl n -> Trf (UGadtConDecl (Dom r) RangeStage)
trfGadtConType :: TransformName n r => Located (HsType n) -> Trf (Ann UGadtConType (Dom r) RangeStage)
trfFieldDecl :: TransformName n r => Located (ConDeclField n) -> Trf (Ann UFieldDecl (Dom r) RangeStage)
trfFieldDecl' :: TransformName n r => ConDeclField n -> Trf (UFieldDecl (Dom r) RangeStage)
trfDerivings :: TransformName n r => Located [LHsSigType n] -> Trf (Ann UDeriving (Dom r) RangeStage)
trfInstanceRule :: TransformName n r => Located (HsType n) -> Trf (Ann UInstanceRule (Dom r) RangeStage)
trfInstanceRule' :: TransformName n r => HsType n -> Trf (UInstanceRule (Dom r) RangeStage)
instanceHead :: Trf (Ann UInstanceHead (Dom r) RangeStage) -> Trf (UInstanceRule (Dom r) RangeStage)
makeInstanceRuleTyVars :: TransformName n r => Located n -> HsImplicitBndrs n [LHsType n] -> Trf (Ann UInstanceRule (Dom r) RangeStage)
trfInstanceHead :: TransformName n r => Located (HsType n) -> Trf (Ann UInstanceHead (Dom r) RangeStage)
trfInstanceHead' :: TransformName n r => HsType n -> Trf (UInstanceHead (Dom r) RangeStage)
trfTypeEqs :: TransformName n r => Maybe [Located (TyFamInstEqn n)] -> Trf (AnnListG UTypeEqn (Dom r) RangeStage)
trfTypeEq :: TransformName n r => Located (TyFamInstEqn n) -> Trf (Ann UTypeEqn (Dom r) RangeStage)
trfFunDeps :: TransformName n r => [Located (FunDep (Located n))] -> Trf (AnnMaybeG UFunDeps (Dom r) RangeStage)
trfFunDep' :: TransformName n r => FunDep (Located n) -> Trf (UFunDep (Dom r) RangeStage)
createDeclHead :: TransformName n r => Located n -> LHsQTyVars n -> Trf (Ann UDeclHead (Dom r) RangeStage)
wrapDeclHead :: TransformName n r => [LHsTyVarBndr n] -> Trf (Ann UDeclHead (Dom r) RangeStage) -> Trf (Ann UDeclHead (Dom r) RangeStage)

-- | Get the parentheses directly before and after (for parenthesized
--   application)
addParenLocs :: SrcSpan -> Trf SrcSpan
createClassBody :: TransformName n r => [LSig n] -> LHsBinds n -> [LFamilyDecl n] -> [LTyFamDefltEqn n] -> Trf (AnnMaybeG UClassBody (Dom r) RangeStage)
trfClassElemSig :: TransformName n r => Located (Sig n) -> Trf (Ann UClassElement (Dom r) RangeStage)
trfTypeFam :: TransformName n r => Located (FamilyDecl n) -> Trf (Ann UTypeFamily (Dom r) RangeStage)
trfTypeFam' :: TransformName n r => FamilyDecl n -> Trf (UTypeFamily (Dom r) RangeStage)
trfTypeFamDef :: TransformName n r => Located (TyFamDefltEqn n) -> Trf (Ann UClassElement (Dom r) RangeStage)
trfInstBody :: TransformName n r => LHsBinds n -> [LSig n] -> [LTyFamInstDecl n] -> [LDataFamInstDecl n] -> Trf (AnnMaybeG UInstBody (Dom r) RangeStage)
trfClassInstSig :: TransformName n r => Located (Sig n) -> Trf (Ann UInstBodyDecl (Dom r) RangeStage)
trfInstTypeFam :: TransformName n r => Located (TyFamInstDecl n) -> Trf (Ann UInstBodyDecl (Dom r) RangeStage)
trfInstDataFam :: TransformName n r => Located (DataFamInstDecl n) -> Trf (Ann UInstBodyDecl (Dom r) RangeStage)
trfPatternSynonym :: forall n r. TransformName n r => PatSynBind n n -> Trf (UPatternSynonym (Dom r) RangeStage)
trfFamilyKind :: TransformName n r => Located (FamilyResultSig n) -> Trf (AnnMaybeG UKindConstraint (Dom r) RangeStage)
trfFamilyResultSig :: TransformName n r => Located (FamilyResultSig n) -> Maybe (LInjectivityAnn n) -> Trf (AnnMaybeG UTypeFamilySpec (Dom r) RangeStage)
trfAnnotationSubject :: TransformName n r => SourceText -> AnnProvenance n -> SrcLoc -> Trf (Ann UAnnotationSubject (Dom r) RangeStage)
trfDataKeyword :: NewOrData -> Trf (Ann UDataOrNewtypeKeyword (Dom r) RangeStage)
trfCallConv :: Located CCallConv -> Trf (Ann UCallConv (Dom r) RangeStage)
trfCallConv' :: CCallConv -> Trf (UCallConv (Dom r) RangeStage)
trfSafety :: SrcSpan -> Located Safety -> Trf (AnnMaybeG USafety (Dom r) RangeStage)
trfOverlap :: Located OverlapMode -> Trf (Ann UOverlapPragma (Dom r) RangeStage)
trfRole :: Located (Maybe Role) -> Trf (Ann URole (Dom r) RangeStage)
trfRewriteRule :: TransformName n r => Located (RuleDecl n) -> Trf (Ann URule (Dom r) RangeStage)
trfRuleBndr :: TransformName n r => Located (RuleBndr n) -> Trf (Ann URuleVar (Dom r) RangeStage)
trfMinimalFormula :: TransformName n r => Located (BooleanFormula (Located n)) -> Trf (Ann UMinimalFormula (Dom r) RangeStage)
trfMinimalFormula' :: TransformName n r => BooleanFormula (Located n) -> Trf (UMinimalFormula (Dom r) RangeStage)


-- | Functions that convert the module-related elements (modules, imports,
--   exports) of the GHC AST to corresponding elements in the Haskell-tools
--   AST representation Also contains the entry point of the transformation
--   that collects the information from different GHC AST representations.
module Language.Haskell.Tools.AST.FromGHC.Modules
trfModule :: ModSummary -> Located (HsModule RdrName) -> Trf (Ann UModule (Dom RdrName) RangeStage)
trfModuleRename :: ModSummary -> Ann UModule (Dom RdrName) RangeStage -> (HsGroup Name, [LImportDecl Name], Maybe [LIE Name], Maybe LHsDocString) -> Located (HsModule RdrName) -> Trf (Ann UModule (Dom Name) RangeStage)
loadSplices :: ModSummary -> HsModule RdrName -> AnnListG UImportDecl (Dom Name) RangeStage -> [Name] -> HsGroup Name -> Trf a -> Trf a
trfModuleHead :: TransformName n r => Maybe (Located ModuleName) -> SrcLoc -> Maybe (Located [LIE n]) -> Maybe (Located WarningTxt) -> Trf (AnnMaybeG UModuleHead (Dom r) RangeStage)
trfFilePragmas :: Trf (AnnListG UFilePragma (Dom r) RangeStage)
trfLanguagePragma :: Located String -> Trf (Ann UFilePragma (Dom r) RangeStage)
trfOptionsPragma :: Located String -> Trf (Ann UFilePragma (Dom r) RangeStage)
trfModulePragma :: SrcLoc -> Maybe (Located WarningTxt) -> Trf (AnnMaybeG UModulePragma (Dom r) RangeStage)
trfExportList :: TransformName n r => Trf SrcLoc -> Maybe (Located [LIE n]) -> Trf (AnnMaybeG UExportSpecs (Dom r) RangeStage)
trfExportList' :: TransformName n r => [LIE n] -> Trf (UExportSpecs (Dom r) RangeStage)
trfExport :: TransformName n r => LIE n -> Trf (Maybe (Ann UExportSpec (Dom r) RangeStage))
trfImports :: TransformName n r => [LImportDecl n] -> Trf (AnnListG UImportDecl (Dom r) RangeStage)
trfImport :: TransformName n r => LImportDecl n -> Trf (Ann UImportDecl (Dom r) RangeStage)
trfImportSpecs :: TransformName n r => Maybe (Bool, Located [LIE n]) -> Trf (AnnMaybeG UImportSpec (Dom r) RangeStage)
trfIESpec :: TransformName n r => LIE n -> Trf (Maybe (Ann UIESpec (Dom r) RangeStage))
trfIESpec' :: TransformName n r => IE n -> Trf (Maybe (UIESpec (Dom r) RangeStage))
trfImportModifier :: Trf (AnnMaybeG UImportModifier (Dom r) RangeStage)
trfModuleName :: Located ModuleName -> Trf (Ann UModuleName (Dom r) RangeStage)
trfModuleName' :: ModuleName -> Trf (UModuleName (Dom r) RangeStage)


-- | Functions that convert the Template-Haskell-related elements of the
--   GHC AST to corresponding elements in the Haskell-tools AST
--   representation
module Language.Haskell.Tools.AST.FromGHC.TH
trfQuasiQuotation' :: TransformName n r => HsSplice n -> Trf (UQuasiQuote (Dom r) RangeStage)
trfSplice :: TransformName n r => HsSplice n -> Trf (Ann USplice (Dom r) RangeStage)
getSpliceLoc :: HsSplice a -> SrcSpan
trfSplice' :: TransformName n r => HsSplice n -> Trf (USplice (Dom r) RangeStage)
trfSpliceExpr :: TransformName n r => Located (HsExpr n) -> Trf (USplice (Dom r) RangeStage)
trfBracket' :: TransformName n r => HsBracket n -> Trf (UBracket (Dom r) RangeStage)


-- | The FromGHC module provides a way to transform the GHC AST into our
--   AST. This transformation is done in the Ghc monad. The conversion can
--   be performed from the Parsed and the Renamed GHC AST. If the renamed
--   AST is given, additional semantic information is looked up while
--   traversing the AST.
module Language.Haskell.Tools.AST.FromGHC
trfModule :: ModSummary -> Located (HsModule RdrName) -> Trf (Ann UModule (Dom RdrName) RangeStage)
trfModuleRename :: ModSummary -> Ann UModule (Dom RdrName) RangeStage -> (HsGroup Name, [LImportDecl Name], Maybe [LIE Name], Maybe LHsDocString) -> Located (HsModule RdrName) -> Trf (Ann UModule (Dom Name) RangeStage)
addTypeInfos :: LHsBinds Id -> Ann UModule (Dom Name) RangeStage -> Ghc (Ann UModule IdDom RangeStage)

-- | Performs the transformation given the tokens of the source file
runTrf :: Map ApiAnnKey [SrcSpan] -> Map String [Located String] -> Trf a -> Ghc a
