packages feed

retrie 1.1.0.0 → 1.2.0.0

raw patch · 44 files changed

+1156/−892 lines, 44 filesdep +exceptionsdep ~basedep ~ghcdep ~ghc-exactprintPVP ok

version bump matches the API change (PVP)

Dependencies added: exceptions

Dependency ranges changed: base, ghc, ghc-exactprint, haskell-src-exts, optparse-applicative, text

API changes (from Hackage documentation)

- Retrie.ExactPrint: Ann :: !DeltaPos -> ![(Comment, DeltaPos)] -> ![(Comment, DeltaPos)] -> ![(KeywordId, DeltaPos)] -> !Maybe [SrcSpan] -> !Maybe AnnKey -> Annotation
- Retrie.ExactPrint: AnnComment :: Comment -> KeywordId
- Retrie.ExactPrint: AnnKey :: AnnSpan -> AnnConName -> AnnKey
- Retrie.ExactPrint: AnnSemiSep :: KeywordId
- Retrie.ExactPrint: AnnString :: String -> KeywordId
- Retrie.ExactPrint: AnnTypeApp :: KeywordId
- Retrie.ExactPrint: CN :: String -> AnnConName
- Retrie.ExactPrint: DP :: (Int, Int) -> DeltaPos
- Retrie.ExactPrint: G :: AnnKeywordId -> KeywordId
- Retrie.ExactPrint: [annCapturedSpan] :: Annotation -> !Maybe AnnKey
- Retrie.ExactPrint: [annEntryDelta] :: Annotation -> !DeltaPos
- Retrie.ExactPrint: [annFollowingComments] :: Annotation -> ![(Comment, DeltaPos)]
- Retrie.ExactPrint: [annPriorComments] :: Annotation -> ![(Comment, DeltaPos)]
- Retrie.ExactPrint: [annSortKey] :: Annotation -> !Maybe [SrcSpan]
- Retrie.ExactPrint: [annsDP] :: Annotation -> ![(KeywordId, DeltaPos)]
- Retrie.ExactPrint: [unConName] :: AnnConName -> String
- Retrie.ExactPrint: addAnnotationsForPretty :: Annotate a => [Comment] -> Located a -> Anns -> Anns
- Retrie.ExactPrint: addSimpleAnnT :: forall a (m :: Type -> Type). (Constraints a, Monad m) => a -> DeltaPos -> [(KeywordId, DeltaPos)] -> TransformT m ()
- Retrie.ExactPrint: addTrailingComma :: Data a => Located a -> DeltaPos -> Anns -> Anns
- Retrie.ExactPrint: addTrailingCommaT :: forall a (m :: Type -> Type). (Data a, Monad m) => Located a -> TransformT m ()
- Retrie.ExactPrint: annGetConstr :: Data a => a -> AnnConName
- Retrie.ExactPrint: annLeadingCommentEntryDelta :: Annotation -> DeltaPos
- Retrie.ExactPrint: annNone :: Annotation
- Retrie.ExactPrint: balanceTrailingComments :: forall (m :: Type -> Type) a b. (Monad m, Data a, Data b) => Located a -> Located b -> TransformT m [(Comment, DeltaPos)]
- Retrie.ExactPrint: captureOrderAnnKey :: AnnKey -> [Located b] -> Anns -> Anns
- Retrie.ExactPrint: class Data ast => Annotate ast
- Retrie.ExactPrint: cloneT :: (Data a, Typeable a, Monad m) => a -> TransformT m a
- Retrie.ExactPrint: data AnnConName
- Retrie.ExactPrint: data AnnKey
- Retrie.ExactPrint: data Annotation
- Retrie.ExactPrint: data KeywordId
- Retrie.ExactPrint: emptyAnns :: Anns
- Retrie.ExactPrint: getAnnsT :: forall (m :: Type -> Type). Monad m => TransformT m Anns
- Retrie.ExactPrint: getEntryDPT :: forall a (m :: Type -> Type). (Constraints a, Monad m) => a -> TransformT m DeltaPos
- Retrie.ExactPrint: graftT :: forall a (m :: Type -> Type). (Data a, Monad m) => Anns -> a -> TransformT m a
- Retrie.ExactPrint: hasDeclsSybTransform :: (Data t2, Monad m) => (forall t. HasDecls t => t -> m t) -> (LHsBind GhcPs -> m (LHsBind GhcPs)) -> t2 -> m t2
- Retrie.ExactPrint: hsDeclsGeneric :: forall t (m :: Type -> Type). (Data t, Monad m) => t -> TransformT m [LHsDecl GhcPs]
- Retrie.ExactPrint: mergeAnnList :: [Anns] -> Anns
- Retrie.ExactPrint: mergeAnns :: Anns -> Anns -> Anns
- Retrie.ExactPrint: mkAnnKey :: Constraints a => a -> AnnKey
- Retrie.ExactPrint: modifyAnnsT :: forall (m :: Type -> Type). Monad m => (Anns -> Anns) -> TransformT m ()
- Retrie.ExactPrint: moveTrailingComments :: (Data a, Data b) => Located a -> Located b -> Transform ()
- Retrie.ExactPrint: newtype DeltaPos
- Retrie.ExactPrint: putAnnsT :: forall (m :: Type -> Type). Monad m => Anns -> TransformT m ()
- Retrie.ExactPrint: relativiseApiAnns :: (Data (SrcSpanLess ast), Annotate ast, HasSrcSpan ast) => ast -> ApiAnns -> Anns
- Retrie.ExactPrint: relativiseApiAnnsWithComments :: (Data (SrcSpanLess ast), Annotate ast, HasSrcSpan ast) => [Comment] -> ast -> ApiAnns -> Anns
- Retrie.ExactPrint: removeTrailingCommaT :: forall a (m :: Type -> Type). (Data a, Monad m) => Located a -> TransformT m ()
- Retrie.ExactPrint: setEntryDPT :: (Data a, Monad m) => Located a -> DeltaPos -> TransformT m ()
- Retrie.ExactPrint: setPrecedingLines :: Data a => Located a -> Int -> Int -> Anns -> Anns
- Retrie.ExactPrint: setPrecedingLinesDecl :: LHsDecl GhcPs -> Int -> Int -> Anns -> Anns
- Retrie.ExactPrint: setPrecedingLinesDeclT :: forall (m :: Type -> Type). Monad m => LHsDecl GhcPs -> Int -> Int -> TransformT m ()
- Retrie.ExactPrint: setPrecedingLinesT :: forall a (m :: Type -> Type). (Data a, Monad m) => Located a -> Int -> Int -> TransformT m ()
- Retrie.ExactPrint: tryTransferEntryDPT :: (Data a, Data b, Monad m) => Located a -> Located b -> TransformT m ()
- Retrie.ExactPrint: type Anns = Map AnnKey Annotation
- Retrie.ExactPrint.Annotated: annsA :: Annotated ast -> Anns
- Retrie.Expr: patToExprA :: AlphaEnv -> AnnotatedPat -> AnnotatedHsExpr
- Retrie.Expr: setAnnsFor :: (Data e, Monad m) => Located e -> [(KeywordId, DeltaPos)] -> TransformT m (Located e)
- Retrie.GHC: ABE :: XABE p -> IdP p -> IdP p -> HsWrapper -> TcSpecPrags -> ABExport p
- Retrie.GHC: AbsBinds :: XAbsBinds idL idR -> [TyVar] -> [EvVar] -> [ABExport idL] -> [TcEvBinds] -> LHsBinds idL -> Bool -> HsBindLR idL idR
- Retrie.GHC: Ambiguous :: XAmbiguous pass -> Located RdrName -> AmbiguousFieldOcc pass
- Retrie.GHC: AnnD :: XAnnD p -> AnnDecl p -> HsDecl p
- Retrie.GHC: AnyclassStrategy :: DerivStrategy pass
- Retrie.GHC: ApplicativeArgMany :: XApplicativeArgMany idL -> [ExprLStmt idL] -> HsExpr idL -> LPat idL -> ApplicativeArg idL
- Retrie.GHC: ApplicativeArgOne :: XApplicativeArgOne idL -> LPat idL -> LHsExpr idL -> Bool -> SyntaxExpr idL -> ApplicativeArg idL
- Retrie.GHC: ApplicativeStmt :: XApplicativeStmt idL idR body -> [(SyntaxExpr idR, ApplicativeArg idL)] -> Maybe (SyntaxExpr idR) -> StmtLR idL idR body
- Retrie.GHC: ArgDocMap :: Map Name (Map Int HsDocString) -> ArgDocMap
- Retrie.GHC: ArithSeq :: XArithSeq p -> Maybe (SyntaxExpr p) -> ArithSeqInfo p -> HsExpr p
- Retrie.GHC: ArrowExpr :: HsStmtContext id
- Retrie.GHC: AsPat :: XAsPat p -> Located (IdP p) -> LPat p -> Pat p
- Retrie.GHC: BangPat :: XBangPat p -> LPat p -> Pat p
- Retrie.GHC: BindStmt :: XBindStmt idL idR body -> LPat idL -> body -> SyntaxExpr idR -> SyntaxExpr idR -> StmtLR idL idR body
- Retrie.GHC: BodyStmt :: XBodyStmt idL idR body -> body -> SyntaxExpr idR -> SyntaxExpr idR -> StmtLR idL idR body
- Retrie.GHC: CExport :: Located CExportSpec -> Located SourceText -> ForeignExport
- Retrie.GHC: CFunction :: CCallTarget -> CImportSpec
- Retrie.GHC: CImport :: Located CCallConv -> Located Safety -> Maybe Header -> CImportSpec -> Located SourceText -> ForeignImport
- Retrie.GHC: CLabel :: CLabelString -> CImportSpec
- Retrie.GHC: CWrapper :: CImportSpec
- Retrie.GHC: CaseAlt :: HsMatchContext id
- Retrie.GHC: ClassDecl :: XClassDecl pass -> LHsContext pass -> Located (IdP pass) -> LHsQTyVars pass -> LexicalFixity -> [LHsFunDep pass] -> [LSig pass] -> LHsBinds pass -> [LFamilyDecl pass] -> [LTyFamDefltDecl pass] -> [LDocDecl] -> TyClDecl pass
- Retrie.GHC: ClassOpSig :: XClassOpSig pass -> Bool -> [Located (IdP pass)] -> LHsSigType pass -> Sig pass
- Retrie.GHC: ClosedTypeFamily :: Maybe [LTyFamInstEqn pass] -> FamilyInfo pass
- Retrie.GHC: ClsInstD :: XClsInstD pass -> ClsInstDecl pass -> InstDecl pass
- Retrie.GHC: ClsInstDecl :: XCClsInstDecl pass -> LHsSigType pass -> LHsBinds pass -> [LSig pass] -> [LTyFamInstDecl pass] -> [LDataFamInstDecl pass] -> Maybe (Located OverlapMode) -> ClsInstDecl pass
- Retrie.GHC: CmdTopTc :: Type -> Type -> CmdSyntaxTable GhcTc -> CmdTopTc
- Retrie.GHC: CoPat :: XCoPat p -> HsWrapper -> Pat p -> Type -> Pat p
- Retrie.GHC: CompleteMatchSig :: XCompleteMatchSig pass -> SourceText -> Located [Located (IdP pass)] -> Maybe (Located (IdP pass)) -> Sig pass
- Retrie.GHC: ConDeclField :: XConDeclField pass -> [LFieldOcc pass] -> LBangType pass -> Maybe LHsDocString -> ConDeclField pass
- Retrie.GHC: ConDeclGADT :: XConDeclGADT pass -> [Located (IdP pass)] -> Located Bool -> LHsQTyVars pass -> Maybe (LHsContext pass) -> HsConDeclDetails pass -> LHsType pass -> Maybe LHsDocString -> ConDecl pass
- Retrie.GHC: ConDeclH98 :: XConDeclH98 pass -> Located (IdP pass) -> Located Bool -> [LHsTyVarBndr pass] -> Maybe (LHsContext pass) -> HsConDeclDetails pass -> Maybe LHsDocString -> ConDecl pass
- Retrie.GHC: ConPatIn :: Located (IdP p) -> HsConPatDetails p -> Pat p
- Retrie.GHC: ConPatOut :: Located ConLike -> [Type] -> [TyVar] -> [EvVar] -> TcEvBinds -> HsConPatDetails p -> HsWrapper -> Pat p
- Retrie.GHC: DataDecl :: XDataDecl pass -> Located (IdP pass) -> LHsQTyVars pass -> LexicalFixity -> HsDataDefn pass -> TyClDecl pass
- Retrie.GHC: DataDeclRn :: Bool -> NameSet -> DataDeclRn
- Retrie.GHC: DataFamInstD :: XDataFamInstD pass -> DataFamInstDecl pass -> InstDecl pass
- Retrie.GHC: DataFamInstDecl :: FamInstEqn pass (HsDataDefn pass) -> DataFamInstDecl pass
- Retrie.GHC: DataFamily :: FamilyInfo pass
- Retrie.GHC: DataType :: NewOrData
- Retrie.GHC: DecBrG :: XDecBrG p -> HsGroup p -> HsBracket p
- Retrie.GHC: DecBrL :: XDecBrL p -> [LHsDecl p] -> HsBracket p
- Retrie.GHC: DeclDocMap :: Map Name HsDocString -> DeclDocMap
- Retrie.GHC: DefD :: XDefD p -> DefaultDecl p -> HsDecl p
- Retrie.GHC: DefaultDecl :: XCDefaultDecl pass -> [LHsType pass] -> DefaultDecl pass
- Retrie.GHC: DelayedSplice :: TcLclEnv -> LHsExpr GhcRn -> TcType -> LHsExpr GhcTcId -> DelayedSplice
- Retrie.GHC: DerivD :: XDerivD p -> DerivDecl p -> HsDecl p
- Retrie.GHC: DerivDecl :: XCDerivDecl pass -> LHsSigWcType pass -> Maybe (LDerivStrategy pass) -> Maybe (Located OverlapMode) -> DerivDecl pass
- Retrie.GHC: DoExpr :: HsStmtContext id
- Retrie.GHC: DocCommentNamed :: String -> HsDocString -> DocDecl
- Retrie.GHC: DocCommentNext :: HsDocString -> DocDecl
- Retrie.GHC: DocCommentPrev :: HsDocString -> DocDecl
- Retrie.GHC: DocD :: XDocD p -> DocDecl -> HsDecl p
- Retrie.GHC: DocGroup :: Int -> HsDocString -> DocDecl
- Retrie.GHC: EmptyLocalBinds :: XEmptyLocalBinds idL idR -> HsLocalBindsLR idL idR
- Retrie.GHC: ExpBr :: XExpBr p -> LHsExpr p -> HsBracket p
- Retrie.GHC: ExplicitBidirectional :: MatchGroup id (LHsExpr id) -> HsPatSynDir id
- Retrie.GHC: ExplicitList :: XExplicitList p -> Maybe (SyntaxExpr p) -> [LHsExpr p] -> HsExpr p
- Retrie.GHC: ExplicitSum :: XExplicitSum p -> ConTag -> Arity -> LHsExpr p -> HsExpr p
- Retrie.GHC: ExplicitTuple :: XExplicitTuple p -> [LHsTupArg p] -> Boxity -> HsExpr p
- Retrie.GHC: ExprWithTySig :: XExprWithTySig p -> LHsExpr p -> LHsSigWcType (NoGhcTc p) -> HsExpr p
- Retrie.GHC: FamDecl :: XFamDecl pass -> FamilyDecl pass -> TyClDecl pass
- Retrie.GHC: FamEqn :: XCFamEqn pass rhs -> Located (IdP pass) -> Maybe [LHsTyVarBndr pass] -> HsTyPats pass -> LexicalFixity -> rhs -> FamEqn pass rhs
- Retrie.GHC: FamilyDecl :: XCFamilyDecl pass -> FamilyInfo pass -> Located (IdP pass) -> LHsQTyVars pass -> LexicalFixity -> LFamilyResultSig pass -> Maybe (LInjectivityAnn pass) -> FamilyDecl pass
- Retrie.GHC: FieldOcc :: XCFieldOcc pass -> Located RdrName -> FieldOcc pass
- Retrie.GHC: FixSig :: XFixSig pass -> FixitySig pass -> Sig pass
- Retrie.GHC: FixitySig :: XFixitySig pass -> [Located (IdP pass)] -> Fixity -> FixitySig pass
- Retrie.GHC: ForD :: XForD p -> ForeignDecl p -> HsDecl p
- Retrie.GHC: ForallInvis :: ForallVisFlag
- Retrie.GHC: ForallVis :: ForallVisFlag
- Retrie.GHC: ForeignExport :: XForeignExport pass -> Located (IdP pass) -> LHsSigType pass -> ForeignExport -> ForeignDecl pass
- Retrie.GHC: ForeignImport :: XForeignImport pass -> Located (IdP pass) -> LHsSigType pass -> ForeignImport -> ForeignDecl pass
- Retrie.GHC: From :: LHsExpr id -> ArithSeqInfo id
- Retrie.GHC: FromThen :: LHsExpr id -> LHsExpr id -> ArithSeqInfo id
- Retrie.GHC: FromThenTo :: LHsExpr id -> LHsExpr id -> LHsExpr id -> ArithSeqInfo id
- Retrie.GHC: FromTo :: LHsExpr id -> LHsExpr id -> ArithSeqInfo id
- Retrie.GHC: FunBind :: XFunBind idL idR -> Located (IdP idL) -> MatchGroup idR (LHsExpr idR) -> HsWrapper -> [Tickish Id] -> HsBindLR idL idR
- Retrie.GHC: FunRhs :: Located id -> LexicalFixity -> SrcStrictness -> HsMatchContext id
- Retrie.GHC: GRHS :: XCGRHS p body -> [GuardLStmt p] -> body -> GRHS p body
- Retrie.GHC: GRHSs :: XCGRHSs p body -> [LGRHS p body] -> LHsLocalBinds p -> GRHSs p body
- Retrie.GHC: GhciStmtCtxt :: HsStmtContext id
- Retrie.GHC: GroupForm :: TransForm
- Retrie.GHC: HasDollar :: SpliceDecoration
- Retrie.GHC: HasParens :: SpliceDecoration
- Retrie.GHC: HsAnnotation :: XHsAnnotation pass -> SourceText -> AnnProvenance (IdP pass) -> Located (HsExpr pass) -> AnnDecl pass
- Retrie.GHC: HsApp :: XApp p -> LHsExpr p -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsAppKindTy :: XAppKindTy pass -> LHsType pass -> LHsKind pass -> HsType pass
- Retrie.GHC: HsAppTy :: XAppTy pass -> LHsType pass -> LHsType pass -> HsType pass
- Retrie.GHC: HsAppType :: XAppTypeE p -> LHsExpr p -> LHsWcType (NoGhcTc p) -> HsExpr p
- Retrie.GHC: HsArgPar :: SrcSpan -> HsArg tm ty
- Retrie.GHC: HsBangTy :: XBangTy pass -> HsSrcBang -> LHsType pass -> HsType pass
- Retrie.GHC: HsBinTick :: XBinTick p -> Int -> Int -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsBoxedOrConstraintTuple :: HsTupleSort
- Retrie.GHC: HsBoxedTuple :: HsTupleSort
- Retrie.GHC: HsBracket :: XBracket p -> HsBracket p -> HsExpr p
- Retrie.GHC: HsCase :: XCase p -> LHsExpr p -> MatchGroup p (LHsExpr p) -> HsExpr p
- Retrie.GHC: HsChar :: XHsChar x -> Char -> HsLit x
- Retrie.GHC: HsCharPrim :: XHsCharPrim x -> Char -> HsLit x
- Retrie.GHC: HsCmdApp :: XCmdApp id -> LHsCmd id -> LHsExpr id -> HsCmd id
- Retrie.GHC: HsCmdArrApp :: XCmdArrApp id -> LHsExpr id -> LHsExpr id -> HsArrAppType -> Bool -> HsCmd id
- Retrie.GHC: HsCmdArrForm :: XCmdArrForm id -> LHsExpr id -> LexicalFixity -> Maybe Fixity -> [LHsCmdTop id] -> HsCmd id
- Retrie.GHC: HsCmdCase :: XCmdCase id -> LHsExpr id -> MatchGroup id (LHsCmd id) -> HsCmd id
- Retrie.GHC: HsCmdDo :: XCmdDo id -> Located [CmdLStmt id] -> HsCmd id
- Retrie.GHC: HsCmdIf :: XCmdIf id -> Maybe (SyntaxExpr id) -> LHsExpr id -> LHsCmd id -> LHsCmd id -> HsCmd id
- Retrie.GHC: HsCmdLam :: XCmdLam id -> MatchGroup id (LHsCmd id) -> HsCmd id
- Retrie.GHC: HsCmdLet :: XCmdLet id -> LHsLocalBinds id -> LHsCmd id -> HsCmd id
- Retrie.GHC: HsCmdPar :: XCmdPar id -> LHsCmd id -> HsCmd id
- Retrie.GHC: HsCmdTop :: XCmdTop p -> LHsCmd p -> HsCmdTop p
- Retrie.GHC: HsCmdWrap :: XCmdWrap id -> HsWrapper -> HsCmd id -> HsCmd id
- Retrie.GHC: HsConLikeOut :: XConLikeOut p -> ConLike -> HsExpr p
- Retrie.GHC: HsConstraintTuple :: HsTupleSort
- Retrie.GHC: HsCoreAnn :: XCoreAnn p -> SourceText -> StringLiteral -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsDataDefn :: XCHsDataDefn pass -> NewOrData -> LHsContext pass -> Maybe (Located CType) -> Maybe (LHsKind pass) -> [LConDecl pass] -> HsDeriving pass -> HsDataDefn pass
- Retrie.GHC: HsDerivingClause :: XCHsDerivingClause pass -> Maybe (LDerivStrategy pass) -> Located [LHsSigType pass] -> HsDerivingClause pass
- Retrie.GHC: HsDo :: XDo p -> HsStmtContext Name -> Located [ExprLStmt p] -> HsExpr p
- Retrie.GHC: HsDocTy :: XDocTy pass -> LHsType pass -> LHsDocString -> HsType pass
- Retrie.GHC: HsDoublePrim :: XHsDoublePrim x -> FractionalLit -> HsLit x
- Retrie.GHC: HsExplicitListTy :: XExplicitListTy pass -> PromotionFlag -> [LHsType pass] -> HsType pass
- Retrie.GHC: HsExplicitTupleTy :: XExplicitTupleTy pass -> [LHsType pass] -> HsType pass
- Retrie.GHC: HsFirstOrderApp :: HsArrAppType
- Retrie.GHC: HsFloatPrim :: XHsFloatPrim x -> FractionalLit -> HsLit x
- Retrie.GHC: HsForAllTy :: XForAllTy pass -> ForallVisFlag -> [LHsTyVarBndr pass] -> LHsType pass -> HsType pass
- Retrie.GHC: HsFractional :: !FractionalLit -> OverLitVal
- Retrie.GHC: HsFunTy :: XFunTy pass -> LHsType pass -> LHsType pass -> HsType pass
- Retrie.GHC: HsGroup :: XCHsGroup p -> HsValBinds p -> [LSpliceDecl p] -> [TyClGroup p] -> [LDerivDecl p] -> [LFixitySig p] -> [LDefaultDecl p] -> [LForeignDecl p] -> [LWarnDecls p] -> [LAnnDecl p] -> [LRuleDecls p] -> [LDocDecl] -> HsGroup p
- Retrie.GHC: HsHigherOrderApp :: HsArrAppType
- Retrie.GHC: HsIB :: XHsIB pass thing -> thing -> HsImplicitBndrs pass thing
- Retrie.GHC: HsIPBinds :: XHsIPBinds idL idR -> HsIPBinds idR -> HsLocalBindsLR idL idR
- Retrie.GHC: HsIPName :: FastString -> HsIPName
- Retrie.GHC: HsIPVar :: XIPVar p -> HsIPName -> HsExpr p
- Retrie.GHC: HsIParamTy :: XIParamTy pass -> Located HsIPName -> LHsType pass -> HsType pass
- Retrie.GHC: HsIf :: XIf p -> Maybe (SyntaxExpr p) -> LHsExpr p -> LHsExpr p -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsInt :: XHsInt x -> IntegralLit -> HsLit x
- Retrie.GHC: HsInt64Prim :: XHsInt64Prim x -> Integer -> HsLit x
- Retrie.GHC: HsIntPrim :: XHsIntPrim x -> Integer -> HsLit x
- Retrie.GHC: HsInteger :: XHsInteger x -> Integer -> Type -> HsLit x
- Retrie.GHC: HsIntegral :: !IntegralLit -> OverLitVal
- Retrie.GHC: HsIsString :: !SourceText -> !FastString -> OverLitVal
- Retrie.GHC: HsKindSig :: XKindSig pass -> LHsType pass -> LHsKind pass -> HsType pass
- Retrie.GHC: HsLam :: XLam p -> MatchGroup p (LHsExpr p) -> HsExpr p
- Retrie.GHC: HsLamCase :: XLamCase p -> MatchGroup p (LHsExpr p) -> HsExpr p
- Retrie.GHC: HsLazy :: HsImplBang
- Retrie.GHC: HsLet :: XLet p -> LHsLocalBinds p -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsListTy :: XListTy pass -> LHsType pass -> HsType pass
- Retrie.GHC: HsLit :: XLitE p -> HsLit p -> HsExpr p
- Retrie.GHC: HsMultiIf :: XMultiIf p -> [LGRHS p (LHsExpr p)] -> HsExpr p
- Retrie.GHC: HsNumTy :: SourceText -> Integer -> HsTyLit
- Retrie.GHC: HsOpTy :: XOpTy pass -> LHsType pass -> Located (IdP pass) -> LHsType pass -> HsType pass
- Retrie.GHC: HsOverLabel :: XOverLabel p -> Maybe (IdP p) -> FastString -> HsExpr p
- Retrie.GHC: HsOverLit :: XOverLitE p -> HsOverLit p -> HsExpr p
- Retrie.GHC: HsPar :: XPar p -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsParTy :: XParTy pass -> LHsType pass -> HsType pass
- Retrie.GHC: HsProc :: XProc p -> LPat p -> LHsCmdTop p -> HsExpr p
- Retrie.GHC: HsQTvs :: XHsQTvs pass -> [LHsTyVarBndr pass] -> LHsQTyVars pass
- Retrie.GHC: HsQualTy :: XQualTy pass -> LHsContext pass -> LHsType pass -> HsType pass
- Retrie.GHC: HsQuasiQuote :: XQuasiQuote id -> IdP id -> IdP id -> SrcSpan -> FastString -> HsSplice id
- Retrie.GHC: HsRat :: XHsRat x -> FractionalLit -> Type -> HsLit x
- Retrie.GHC: HsRecField :: Located id -> arg -> Bool -> HsRecField' id arg
- Retrie.GHC: HsRecFields :: [LHsRecField p arg] -> Maybe (Located Int) -> HsRecFields p arg
- Retrie.GHC: HsRecFld :: XRecFld p -> AmbiguousFieldOcc p -> HsExpr p
- Retrie.GHC: HsRecTy :: XRecTy pass -> [LConDeclField pass] -> HsType pass
- Retrie.GHC: HsRnBracketOut :: XRnBracketOut p -> HsBracket GhcRn -> [PendingRnSplice] -> HsExpr p
- Retrie.GHC: HsRule :: XHsRule pass -> Located (SourceText, RuleName) -> Activation -> Maybe [LHsTyVarBndr (NoGhcTc pass)] -> [LRuleBndr pass] -> Located (HsExpr pass) -> Located (HsExpr pass) -> RuleDecl pass
- Retrie.GHC: HsRuleRn :: NameSet -> NameSet -> HsRuleRn
- Retrie.GHC: HsRules :: XCRuleDecls pass -> SourceText -> [LRuleDecl pass] -> RuleDecls pass
- Retrie.GHC: HsSCC :: XSCC p -> SourceText -> StringLiteral -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsSpliceE :: XSpliceE p -> HsSplice p -> HsExpr p
- Retrie.GHC: HsSpliceTy :: XSpliceTy pass -> HsSplice pass -> HsType pass
- Retrie.GHC: HsSpliced :: XSpliced id -> ThModFinalizers -> HsSplicedThing id -> HsSplice id
- Retrie.GHC: HsSplicedExpr :: HsExpr id -> HsSplicedThing id
- Retrie.GHC: HsSplicedPat :: Pat id -> HsSplicedThing id
- Retrie.GHC: HsSplicedT :: DelayedSplice -> HsSplice id
- Retrie.GHC: HsSplicedTy :: HsType id -> HsSplicedThing id
- Retrie.GHC: HsSrcBang :: SourceText -> SrcUnpackedness -> SrcStrictness -> HsSrcBang
- Retrie.GHC: HsStarTy :: XStarTy pass -> Bool -> HsType pass
- Retrie.GHC: HsStatic :: XStatic p -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsStrTy :: SourceText -> FastString -> HsTyLit
- Retrie.GHC: HsStrict :: HsImplBang
- Retrie.GHC: HsString :: XHsString x -> FastString -> HsLit x
- Retrie.GHC: HsStringPrim :: XHsStringPrim x -> ByteString -> HsLit x
- Retrie.GHC: HsSumTy :: XSumTy pass -> [LHsType pass] -> HsType pass
- Retrie.GHC: HsTcBracketOut :: XTcBracketOut p -> HsBracket GhcRn -> [PendingTcSplice] -> HsExpr p
- Retrie.GHC: HsTick :: XTick p -> Tickish (IdP p) -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsTickPragma :: XTickPragma p -> SourceText -> (StringLiteral, (Int, Int), (Int, Int)) -> ((SourceText, SourceText), (SourceText, SourceText)) -> LHsExpr p -> HsExpr p
- Retrie.GHC: HsTupleTy :: XTupleTy pass -> HsTupleSort -> [LHsType pass] -> HsType pass
- Retrie.GHC: HsTyLit :: XTyLit pass -> HsTyLit -> HsType pass
- Retrie.GHC: HsTyVar :: XTyVar pass -> PromotionFlag -> Located (IdP pass) -> HsType pass
- Retrie.GHC: HsTypeArg :: SrcSpan -> ty -> HsArg tm ty
- Retrie.GHC: HsTypedSplice :: XTypedSplice id -> SpliceDecoration -> IdP id -> LHsExpr id -> HsSplice id
- Retrie.GHC: HsUnboundVar :: XUnboundVar p -> UnboundVar -> HsExpr p
- Retrie.GHC: HsUnboxedTuple :: HsTupleSort
- Retrie.GHC: HsUnpack :: Maybe Coercion -> HsImplBang
- Retrie.GHC: HsUntypedSplice :: XUntypedSplice id -> SpliceDecoration -> IdP id -> LHsExpr id -> HsSplice id
- Retrie.GHC: HsValArg :: tm -> HsArg tm ty
- Retrie.GHC: HsValBinds :: XHsValBinds idL idR -> HsValBindsLR idL idR -> HsLocalBindsLR idL idR
- Retrie.GHC: HsVar :: XVar p -> Located (IdP p) -> HsExpr p
- Retrie.GHC: HsWC :: XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
- Retrie.GHC: HsWildCardTy :: XWildCardTy pass -> HsType pass
- Retrie.GHC: HsWord64Prim :: XHsWord64Prim x -> Integer -> HsLit x
- Retrie.GHC: HsWordPrim :: XHsWordPrim x -> Integer -> HsLit x
- Retrie.GHC: HsWrap :: XWrap p -> HsWrapper -> HsExpr p -> HsExpr p
- Retrie.GHC: IEDoc :: XIEDoc pass -> HsDocString -> IE pass
- Retrie.GHC: IEDocNamed :: XIEDocNamed pass -> String -> IE pass
- Retrie.GHC: IEGroup :: XIEGroup pass -> Int -> HsDocString -> IE pass
- Retrie.GHC: IEModuleContents :: XIEModuleContents pass -> Located ModuleName -> IE pass
- Retrie.GHC: IEName :: Located name -> IEWrappedName name
- Retrie.GHC: IEPattern :: Located name -> IEWrappedName name
- Retrie.GHC: IEThingAbs :: XIEThingAbs pass -> LIEWrappedName (IdP pass) -> IE pass
- Retrie.GHC: IEThingAll :: XIEThingAll pass -> LIEWrappedName (IdP pass) -> IE pass
- Retrie.GHC: IEThingWith :: XIEThingWith pass -> LIEWrappedName (IdP pass) -> IEWildcard -> [LIEWrappedName (IdP pass)] -> [Located (FieldLbl (IdP pass))] -> IE pass
- Retrie.GHC: IEType :: Located name -> IEWrappedName name
- Retrie.GHC: IEVar :: XIEVar pass -> LIEWrappedName (IdP pass) -> IE pass
- Retrie.GHC: IEWildcard :: Int -> IEWildcard
- Retrie.GHC: IPBind :: XCIPBind id -> Either (Located HsIPName) (IdP id) -> LHsExpr id -> IPBind id
- Retrie.GHC: IPBinds :: XIPBinds id -> [LIPBind id] -> HsIPBinds id
- Retrie.GHC: IdSig :: XIdSig pass -> Id -> Sig pass
- Retrie.GHC: IfAlt :: HsMatchContext id
- Retrie.GHC: ImplicitBidirectional :: HsPatSynDir id
- Retrie.GHC: ImportDecl :: XCImportDecl pass -> SourceText -> Located ModuleName -> Maybe StringLiteral -> Bool -> Bool -> ImportDeclQualifiedStyle -> Bool -> Maybe (Located ModuleName) -> Maybe (Bool, Located [LIE pass]) -> ImportDecl pass
- Retrie.GHC: InfixCon :: arg -> arg -> HsConDetails arg rec
- Retrie.GHC: InjectivityAnn :: Located (IdP pass) -> [Located (IdP pass)] -> InjectivityAnn pass
- Retrie.GHC: InlineSig :: XInlineSig pass -> Located (IdP pass) -> InlinePragma -> Sig pass
- Retrie.GHC: InstD :: XInstD p -> InstDecl p -> HsDecl p
- Retrie.GHC: IsDefaultMethod :: TcSpecPrags
- Retrie.GHC: KindSig :: XCKindSig pass -> LHsKind pass -> FamilyResultSig pass
- Retrie.GHC: KindSigD :: XKindSigD p -> StandaloneKindSig p -> HsDecl p
- Retrie.GHC: KindedTyVar :: XKindedTyVar pass -> Located (IdP pass) -> LHsKind pass -> HsTyVarBndr pass
- Retrie.GHC: LambdaExpr :: HsMatchContext id
- Retrie.GHC: LastStmt :: XLastStmt idL idR body -> body -> Bool -> SyntaxExpr idR -> StmtLR idL idR body
- Retrie.GHC: LazyPat :: XLazyPat p -> LPat p -> Pat p
- Retrie.GHC: LetStmt :: XLetStmt idL idR body -> LHsLocalBindsLR idL idR -> StmtLR idL idR body
- Retrie.GHC: ListComp :: HsStmtContext id
- Retrie.GHC: ListPat :: XListPat p -> [LPat p] -> Pat p
- Retrie.GHC: ListPatTc :: Type -> Maybe (Type, SyntaxExpr GhcTc) -> ListPatTc
- Retrie.GHC: LitPat :: XLitPat p -> HsLit p -> Pat p
- Retrie.GHC: MDoExpr :: HsStmtContext id
- Retrie.GHC: MG :: XMG p body -> Located [LMatch p body] -> Origin -> MatchGroup p body
- Retrie.GHC: Match :: XCMatch p body -> HsMatchContext (NameOrRdrName (IdP p)) -> [LPat p] -> GRHSs p body -> Match p body
- Retrie.GHC: MatchGroupTc :: [Type] -> Type -> MatchGroupTc
- Retrie.GHC: MinimalSig :: XMinimalSig pass -> SourceText -> LBooleanFormula (Located (IdP pass)) -> Sig pass
- Retrie.GHC: Missing :: XMissing id -> HsTupArg id
- Retrie.GHC: ModuleAnnProvenance :: AnnProvenance name
- Retrie.GHC: MonadComp :: HsStmtContext id
- Retrie.GHC: NHsCoreTy :: Type -> NewHsTypeX
- Retrie.GHC: NPat :: XNPat p -> Located (HsOverLit p) -> Maybe (SyntaxExpr p) -> SyntaxExpr p -> Pat p
- Retrie.GHC: NPatBindTc :: NameSet -> Type -> NPatBindTc
- Retrie.GHC: NPlusKPat :: XNPlusKPat p -> Located (IdP p) -> Located (HsOverLit p) -> HsOverLit p -> SyntaxExpr p -> SyntaxExpr p -> Pat p
- Retrie.GHC: NValBinds :: [(RecFlag, LHsBinds idL)] -> [LSig GhcRn] -> NHsValBindsLR idL
- Retrie.GHC: NegApp :: XNegApp p -> LHsExpr p -> SyntaxExpr p -> HsExpr p
- Retrie.GHC: NewType :: NewOrData
- Retrie.GHC: NewtypeStrategy :: DerivStrategy pass
- Retrie.GHC: NoExtField :: NoExtField
- Retrie.GHC: NoIEWildcard :: IEWildcard
- Retrie.GHC: NoParens :: SpliceDecoration
- Retrie.GHC: NoSig :: XNoSig pass -> FamilyResultSig pass
- Retrie.GHC: NoSrcStrict :: SrcStrictness
- Retrie.GHC: NoSrcUnpack :: SrcUnpackedness
- Retrie.GHC: NotQualified :: ImportDeclQualifiedStyle
- Retrie.GHC: OpApp :: XOpApp p -> LHsExpr p -> LHsExpr p -> LHsExpr p -> HsExpr p
- Retrie.GHC: OpenTypeFamily :: FamilyInfo pass
- Retrie.GHC: OutOfScope :: OccName -> GlobalRdrEnv -> UnboundVar
- Retrie.GHC: OverLit :: XOverLit p -> OverLitVal -> HsExpr p -> HsOverLit p
- Retrie.GHC: OverLitTc :: Bool -> Type -> OverLitTc
- Retrie.GHC: PSB :: XPSB idL idR -> Located (IdP idL) -> HsPatSynDetails (Located (IdP idR)) -> LPat idR -> HsPatSynDir idR -> PatSynBind idL idR
- Retrie.GHC: ParPat :: XParPat p -> LPat p -> Pat p
- Retrie.GHC: ParStmt :: XParStmt idL idR body -> [ParStmtBlock idL idR] -> HsExpr idR -> SyntaxExpr idR -> StmtLR idL idR body
- Retrie.GHC: ParStmtBlock :: XParStmtBlock idL idR -> [ExprLStmt idL] -> [IdP idR] -> SyntaxExpr idR -> ParStmtBlock idL idR
- Retrie.GHC: ParStmtCtxt :: HsStmtContext id -> HsStmtContext id
- Retrie.GHC: Parsed :: Pass
- Retrie.GHC: PatBind :: XPatBind idL idR -> LPat idL -> GRHSs idR (LHsExpr idR) -> ([Tickish Id], [[Tickish Id]]) -> HsBindLR idL idR
- Retrie.GHC: PatBindGuards :: HsMatchContext id
- Retrie.GHC: PatBindRhs :: HsMatchContext id
- Retrie.GHC: PatBr :: XPatBr p -> LPat p -> HsBracket p
- Retrie.GHC: PatGuard :: HsMatchContext id -> HsStmtContext id
- Retrie.GHC: PatSyn :: HsMatchContext id
- Retrie.GHC: PatSynBind :: XPatSynBind idL idR -> PatSynBind idL idR -> HsBindLR idL idR
- Retrie.GHC: PatSynSig :: XPatSynSig pass -> [Located (IdP pass)] -> LHsSigType pass -> Sig pass
- Retrie.GHC: PendingRnSplice :: UntypedSpliceFlavour -> SplicePointName -> LHsExpr GhcRn -> PendingRnSplice
- Retrie.GHC: PendingTcSplice :: SplicePointName -> LHsExpr GhcTc -> PendingTcSplice
- Retrie.GHC: PrefixCon :: [arg] -> HsConDetails arg rec
- Retrie.GHC: Present :: XPresent id -> LHsExpr id -> HsTupArg id
- Retrie.GHC: ProcExpr :: HsMatchContext id
- Retrie.GHC: QualifiedPost :: ImportDeclQualifiedStyle
- Retrie.GHC: QualifiedPre :: ImportDeclQualifiedStyle
- Retrie.GHC: RecCon :: rec -> HsConDetails arg rec
- Retrie.GHC: RecStmt :: XRecStmt idL idR body -> [LStmtLR idL idR body] -> [IdP idR] -> [IdP idR] -> SyntaxExpr idR -> SyntaxExpr idR -> SyntaxExpr idR -> StmtLR idL idR body
- Retrie.GHC: RecStmtTc :: Type -> [PostTcExpr] -> [PostTcExpr] -> Type -> RecStmtTc
- Retrie.GHC: RecUpd :: HsMatchContext id
- Retrie.GHC: RecordCon :: XRecordCon p -> Located (IdP p) -> HsRecordBinds p -> HsExpr p
- Retrie.GHC: RecordConTc :: ConLike -> PostTcExpr -> RecordConTc
- Retrie.GHC: RecordPatSynField :: a -> a -> RecordPatSynField a
- Retrie.GHC: RecordUpd :: XRecordUpd p -> LHsExpr p -> [LHsRecUpdField p] -> HsExpr p
- Retrie.GHC: RecordUpdTc :: [ConLike] -> [Type] -> [Type] -> HsWrapper -> RecordUpdTc
- Retrie.GHC: Renamed :: Pass
- Retrie.GHC: RoleAnnotD :: XRoleAnnotD p -> RoleAnnotDecl p -> HsDecl p
- Retrie.GHC: RoleAnnotDecl :: XCRoleAnnotDecl pass -> Located (IdP pass) -> [Located (Maybe Role)] -> RoleAnnotDecl pass
- Retrie.GHC: RuleBndr :: XCRuleBndr pass -> Located (IdP pass) -> RuleBndr pass
- Retrie.GHC: RuleBndrSig :: XRuleBndrSig pass -> Located (IdP pass) -> LHsSigWcType pass -> RuleBndr pass
- Retrie.GHC: RuleD :: XRuleD p -> RuleDecls p -> HsDecl p
- Retrie.GHC: SCCFunSig :: XSCCFunSig pass -> SourceText -> Located (IdP pass) -> Maybe (Located StringLiteral) -> Sig pass
- Retrie.GHC: SectionL :: XSectionL p -> LHsExpr p -> LHsExpr p -> HsExpr p
- Retrie.GHC: SectionR :: XSectionR p -> LHsExpr p -> LHsExpr p -> HsExpr p
- Retrie.GHC: SigD :: XSigD p -> Sig p -> HsDecl p
- Retrie.GHC: SigPat :: XSigPat p -> LPat p -> LHsSigWcType (NoGhcTc p) -> Pat p
- Retrie.GHC: SpecInstSig :: XSpecInstSig pass -> SourceText -> LHsSigType pass -> Sig pass
- Retrie.GHC: SpecPrag :: Id -> HsWrapper -> InlinePragma -> TcSpecPrag
- Retrie.GHC: SpecPrags :: [LTcSpecPrag] -> TcSpecPrags
- Retrie.GHC: SpecSig :: XSpecSig pass -> Located (IdP pass) -> [LHsSigType pass] -> InlinePragma -> Sig pass
- Retrie.GHC: SpliceD :: XSpliceD p -> SpliceDecl p -> HsDecl p
- Retrie.GHC: SpliceDecl :: XSpliceDecl p -> Located (HsSplice p) -> SpliceExplicitFlag -> SpliceDecl p
- Retrie.GHC: SplicePat :: XSplicePat p -> HsSplice p -> Pat p
- Retrie.GHC: SrcLazy :: SrcStrictness
- Retrie.GHC: SrcNoUnpack :: SrcUnpackedness
- Retrie.GHC: SrcStrict :: SrcStrictness
- Retrie.GHC: SrcUnpack :: SrcUnpackedness
- Retrie.GHC: StandaloneKindSig :: XStandaloneKindSig pass -> Located (IdP pass) -> LHsSigType pass -> StandaloneKindSig pass
- Retrie.GHC: StmtCtxt :: HsStmtContext id -> HsMatchContext id
- Retrie.GHC: StockStrategy :: DerivStrategy pass
- Retrie.GHC: SumPat :: XSumPat p -> LPat p -> ConTag -> Arity -> Pat p
- Retrie.GHC: SynDecl :: XSynDecl pass -> Located (IdP pass) -> LHsQTyVars pass -> LexicalFixity -> LHsType pass -> TyClDecl pass
- Retrie.GHC: SyntaxExpr :: HsExpr p -> [HsWrapper] -> HsWrapper -> SyntaxExpr p
- Retrie.GHC: TExpBr :: XTExpBr p -> LHsExpr p -> HsBracket p
- Retrie.GHC: ThModFinalizers :: [ForeignRef (Q ())] -> ThModFinalizers
- Retrie.GHC: ThPatQuote :: HsMatchContext id
- Retrie.GHC: ThPatSplice :: HsMatchContext id
- Retrie.GHC: ThenForm :: TransForm
- Retrie.GHC: TransStmt :: XTransStmt idL idR body -> TransForm -> [ExprLStmt idL] -> [(IdP idR, IdP idR)] -> LHsExpr idR -> Maybe (LHsExpr idR) -> SyntaxExpr idR -> SyntaxExpr idR -> HsExpr idR -> StmtLR idL idR body
- Retrie.GHC: TransStmtCtxt :: HsStmtContext id -> HsStmtContext id
- Retrie.GHC: TrueExprHole :: OccName -> UnboundVar
- Retrie.GHC: TuplePat :: XTuplePat p -> [LPat p] -> Boxity -> Pat p
- Retrie.GHC: TyClD :: XTyClD p -> TyClDecl p -> HsDecl p
- Retrie.GHC: TyClGroup :: XCTyClGroup pass -> [LTyClDecl pass] -> [LRoleAnnotDecl pass] -> [LStandaloneKindSig pass] -> [LInstDecl pass] -> TyClGroup pass
- Retrie.GHC: TyFamInstD :: XTyFamInstD pass -> TyFamInstDecl pass -> InstDecl pass
- Retrie.GHC: TyFamInstDecl :: TyFamInstEqn pass -> TyFamInstDecl pass
- Retrie.GHC: TyVarSig :: XTyVarSig pass -> LHsTyVarBndr pass -> FamilyResultSig pass
- Retrie.GHC: TypBr :: XTypBr p -> LHsType p -> HsBracket p
- Retrie.GHC: TypeAnnProvenance :: Located name -> AnnProvenance name
- Retrie.GHC: TypeSig :: XTypeSig pass -> [Located (IdP pass)] -> LHsSigWcType pass -> Sig pass
- Retrie.GHC: Typechecked :: Pass
- Retrie.GHC: Unambiguous :: XUnambiguous pass -> Located RdrName -> AmbiguousFieldOcc pass
- Retrie.GHC: Unidirectional :: HsPatSynDir id
- Retrie.GHC: UntypedDeclSplice :: UntypedSpliceFlavour
- Retrie.GHC: UntypedExpSplice :: UntypedSpliceFlavour
- Retrie.GHC: UntypedPatSplice :: UntypedSpliceFlavour
- Retrie.GHC: UntypedTypeSplice :: UntypedSpliceFlavour
- Retrie.GHC: UserTyVar :: XUserTyVar pass -> Located (IdP pass) -> HsTyVarBndr pass
- Retrie.GHC: ValBinds :: XValBinds idL idR -> LHsBindsLR idL idR -> [LSig idR] -> HsValBindsLR idL idR
- Retrie.GHC: ValD :: XValD p -> HsBind p -> HsDecl p
- Retrie.GHC: ValueAnnProvenance :: Located name -> AnnProvenance name
- Retrie.GHC: VarBind :: XVarBind idL idR -> IdP idL -> LHsExpr idR -> Bool -> HsBindLR idL idR
- Retrie.GHC: VarBr :: XVarBr p -> Bool -> IdP p -> HsBracket p
- Retrie.GHC: VarPat :: XVarPat p -> Located (IdP p) -> Pat p
- Retrie.GHC: ViaStrategy :: XViaStrategy pass -> DerivStrategy pass
- Retrie.GHC: ViewPat :: XViewPat p -> LHsExpr p -> LPat p -> Pat p
- Retrie.GHC: Warning :: XWarning pass -> [Located (IdP pass)] -> WarningTxt -> WarnDecl pass
- Retrie.GHC: WarningD :: XWarningD p -> WarnDecls p -> HsDecl p
- Retrie.GHC: Warnings :: XWarnings pass -> SourceText -> [LWarnDecl pass] -> WarnDecls pass
- Retrie.GHC: WildPat :: XWildPat p -> Pat p
- Retrie.GHC: XABExport :: XXABExport p -> ABExport p
- Retrie.GHC: XAmbiguousFieldOcc :: XXAmbiguousFieldOcc pass -> AmbiguousFieldOcc pass
- Retrie.GHC: XAnnDecl :: XXAnnDecl pass -> AnnDecl pass
- Retrie.GHC: XApplicativeArg :: XXApplicativeArg idL -> ApplicativeArg idL
- Retrie.GHC: XBracket :: XXBracket p -> HsBracket p
- Retrie.GHC: XClsInstDecl :: XXClsInstDecl pass -> ClsInstDecl pass
- Retrie.GHC: XCmd :: XXCmd id -> HsCmd id
- Retrie.GHC: XCmdTop :: XXCmdTop p -> HsCmdTop p
- Retrie.GHC: XConDecl :: XXConDecl pass -> ConDecl pass
- Retrie.GHC: XConDeclField :: XXConDeclField pass -> ConDeclField pass
- Retrie.GHC: XDefaultDecl :: XXDefaultDecl pass -> DefaultDecl pass
- Retrie.GHC: XDerivDecl :: XXDerivDecl pass -> DerivDecl pass
- Retrie.GHC: XExpr :: XXExpr p -> HsExpr p
- Retrie.GHC: XFamEqn :: XXFamEqn pass rhs -> FamEqn pass rhs
- Retrie.GHC: XFamilyDecl :: XXFamilyDecl pass -> FamilyDecl pass
- Retrie.GHC: XFamilyResultSig :: XXFamilyResultSig pass -> FamilyResultSig pass
- Retrie.GHC: XFieldOcc :: XXFieldOcc pass -> FieldOcc pass
- Retrie.GHC: XFixitySig :: XXFixitySig pass -> FixitySig pass
- Retrie.GHC: XForeignDecl :: XXForeignDecl pass -> ForeignDecl pass
- Retrie.GHC: XGRHS :: XXGRHS p body -> GRHS p body
- Retrie.GHC: XGRHSs :: XXGRHSs p body -> GRHSs p body
- Retrie.GHC: XHsBindsLR :: XXHsBindsLR idL idR -> HsBindLR idL idR
- Retrie.GHC: XHsDataDefn :: XXHsDataDefn pass -> HsDataDefn pass
- Retrie.GHC: XHsDecl :: XXHsDecl p -> HsDecl p
- Retrie.GHC: XHsDerivingClause :: XXHsDerivingClause pass -> HsDerivingClause pass
- Retrie.GHC: XHsGroup :: XXHsGroup p -> HsGroup p
- Retrie.GHC: XHsIPBinds :: XXHsIPBinds id -> HsIPBinds id
- Retrie.GHC: XHsImplicitBndrs :: XXHsImplicitBndrs pass thing -> HsImplicitBndrs pass thing
- Retrie.GHC: XHsLocalBindsLR :: XXHsLocalBindsLR idL idR -> HsLocalBindsLR idL idR
- Retrie.GHC: XHsType :: XXType pass -> HsType pass
- Retrie.GHC: XHsWildCardBndrs :: XXHsWildCardBndrs pass thing -> HsWildCardBndrs pass thing
- Retrie.GHC: XIE :: XXIE pass -> IE pass
- Retrie.GHC: XIPBind :: XXIPBind id -> IPBind id
- Retrie.GHC: XImportDecl :: XXImportDecl pass -> ImportDecl pass
- Retrie.GHC: XInstDecl :: XXInstDecl pass -> InstDecl pass
- Retrie.GHC: XLHsQTyVars :: XXLHsQTyVars pass -> LHsQTyVars pass
- Retrie.GHC: XLit :: XXLit x -> HsLit x
- Retrie.GHC: XMatch :: XXMatch p body -> Match p body
- Retrie.GHC: XMatchGroup :: XXMatchGroup p body -> MatchGroup p body
- Retrie.GHC: XOverLit :: XXOverLit p -> HsOverLit p
- Retrie.GHC: XParStmtBlock :: XXParStmtBlock idL idR -> ParStmtBlock idL idR
- Retrie.GHC: XPat :: XXPat p -> Pat p
- Retrie.GHC: XPatSynBind :: XXPatSynBind idL idR -> PatSynBind idL idR
- Retrie.GHC: XRoleAnnotDecl :: XXRoleAnnotDecl pass -> RoleAnnotDecl pass
- Retrie.GHC: XRuleBndr :: XXRuleBndr pass -> RuleBndr pass
- Retrie.GHC: XRuleDecl :: XXRuleDecl pass -> RuleDecl pass
- Retrie.GHC: XRuleDecls :: XXRuleDecls pass -> RuleDecls pass
- Retrie.GHC: XSig :: XXSig pass -> Sig pass
- Retrie.GHC: XSplice :: XXSplice id -> HsSplice id
- Retrie.GHC: XSpliceDecl :: XXSpliceDecl p -> SpliceDecl p
- Retrie.GHC: XStandaloneKindSig :: XXStandaloneKindSig pass -> StandaloneKindSig pass
- Retrie.GHC: XStmtLR :: XXStmtLR idL idR body -> StmtLR idL idR body
- Retrie.GHC: XTupArg :: XXTupArg id -> HsTupArg id
- Retrie.GHC: XTyClDecl :: XXTyClDecl pass -> TyClDecl pass
- Retrie.GHC: XTyClGroup :: XXTyClGroup pass -> TyClGroup pass
- Retrie.GHC: XTyVarBndr :: XXTyVarBndr pass -> HsTyVarBndr pass
- Retrie.GHC: XValBindsLR :: XXValBindsLR idL idR -> HsValBindsLR idL idR
- Retrie.GHC: XWarnDecl :: XXWarnDecl pass -> WarnDecl pass
- Retrie.GHC: XWarnDecls :: XXWarnDecls pass -> WarnDecls pass
- Retrie.GHC: [abe_ext] :: ABExport p -> XABE p
- Retrie.GHC: [abe_mono] :: ABExport p -> IdP p
- Retrie.GHC: [abe_poly] :: ABExport p -> IdP p
- Retrie.GHC: [abe_prags] :: ABExport p -> TcSpecPrags
- Retrie.GHC: [abe_wrap] :: ABExport p -> HsWrapper
- Retrie.GHC: [abs_binds] :: HsBindLR idL idR -> LHsBinds idL
- Retrie.GHC: [abs_ev_binds] :: HsBindLR idL idR -> [TcEvBinds]
- Retrie.GHC: [abs_ev_vars] :: HsBindLR idL idR -> [EvVar]
- Retrie.GHC: [abs_exports] :: HsBindLR idL idR -> [ABExport idL]
- Retrie.GHC: [abs_ext] :: HsBindLR idL idR -> XAbsBinds idL idR
- Retrie.GHC: [abs_sig] :: HsBindLR idL idR -> Bool
- Retrie.GHC: [abs_tvs] :: HsBindLR idL idR -> [TyVar]
- Retrie.GHC: [app_arg_pattern] :: ApplicativeArg idL -> LPat idL
- Retrie.GHC: [app_stmts] :: ApplicativeArg idL -> [ExprLStmt idL]
- Retrie.GHC: [arg_expr] :: ApplicativeArg idL -> LHsExpr idL
- Retrie.GHC: [bv_pattern] :: ApplicativeArg idL -> LPat idL
- Retrie.GHC: [cd_fld_doc] :: ConDeclField pass -> Maybe LHsDocString
- Retrie.GHC: [cd_fld_ext] :: ConDeclField pass -> XConDeclField pass
- Retrie.GHC: [cd_fld_names] :: ConDeclField pass -> [LFieldOcc pass]
- Retrie.GHC: [cd_fld_type] :: ConDeclField pass -> LBangType pass
- Retrie.GHC: [cid_binds] :: ClsInstDecl pass -> LHsBinds pass
- Retrie.GHC: [cid_d_ext] :: InstDecl pass -> XClsInstD pass
- Retrie.GHC: [cid_datafam_insts] :: ClsInstDecl pass -> [LDataFamInstDecl pass]
- Retrie.GHC: [cid_ext] :: ClsInstDecl pass -> XCClsInstDecl pass
- Retrie.GHC: [cid_inst] :: InstDecl pass -> ClsInstDecl pass
- Retrie.GHC: [cid_overlap_mode] :: ClsInstDecl pass -> Maybe (Located OverlapMode)
- Retrie.GHC: [cid_poly_ty] :: ClsInstDecl pass -> LHsSigType pass
- Retrie.GHC: [cid_sigs] :: ClsInstDecl pass -> [LSig pass]
- Retrie.GHC: [cid_tyfam_insts] :: ClsInstDecl pass -> [LTyFamInstDecl pass]
- Retrie.GHC: [con_args] :: ConDecl pass -> HsConDeclDetails pass
- Retrie.GHC: [con_doc] :: ConDecl pass -> Maybe LHsDocString
- Retrie.GHC: [con_ex_tvs] :: ConDecl pass -> [LHsTyVarBndr pass]
- Retrie.GHC: [con_ext] :: ConDecl pass -> XConDeclH98 pass
- Retrie.GHC: [con_forall] :: ConDecl pass -> Located Bool
- Retrie.GHC: [con_g_ext] :: ConDecl pass -> XConDeclGADT pass
- Retrie.GHC: [con_mb_cxt] :: ConDecl pass -> Maybe (LHsContext pass)
- Retrie.GHC: [con_name] :: ConDecl pass -> Located (IdP pass)
- Retrie.GHC: [con_names] :: ConDecl pass -> [Located (IdP pass)]
- Retrie.GHC: [con_qvars] :: ConDecl pass -> LHsQTyVars pass
- Retrie.GHC: [con_res_ty] :: ConDecl pass -> LHsType pass
- Retrie.GHC: [dd_ND] :: HsDataDefn pass -> NewOrData
- Retrie.GHC: [dd_cType] :: HsDataDefn pass -> Maybe (Located CType)
- Retrie.GHC: [dd_cons] :: HsDataDefn pass -> [LConDecl pass]
- Retrie.GHC: [dd_ctxt] :: HsDataDefn pass -> LHsContext pass
- Retrie.GHC: [dd_derivs] :: HsDataDefn pass -> HsDeriving pass
- Retrie.GHC: [dd_ext] :: HsDataDefn pass -> XCHsDataDefn pass
- Retrie.GHC: [dd_kindSig] :: HsDataDefn pass -> Maybe (LHsKind pass)
- Retrie.GHC: [deriv_clause_ext] :: HsDerivingClause pass -> XCHsDerivingClause pass
- Retrie.GHC: [deriv_clause_strategy] :: HsDerivingClause pass -> Maybe (LDerivStrategy pass)
- Retrie.GHC: [deriv_clause_tys] :: HsDerivingClause pass -> Located [LHsSigType pass]
- Retrie.GHC: [deriv_ext] :: DerivDecl pass -> XCDerivDecl pass
- Retrie.GHC: [deriv_overlap_mode] :: DerivDecl pass -> Maybe (Located OverlapMode)
- Retrie.GHC: [deriv_strategy] :: DerivDecl pass -> Maybe (LDerivStrategy pass)
- Retrie.GHC: [deriv_type] :: DerivDecl pass -> LHsSigWcType pass
- Retrie.GHC: [dfid_eqn] :: DataFamInstDecl pass -> FamInstEqn pass (HsDataDefn pass)
- Retrie.GHC: [dfid_ext] :: InstDecl pass -> XDataFamInstD pass
- Retrie.GHC: [dfid_inst] :: InstDecl pass -> DataFamInstDecl pass
- Retrie.GHC: [extFieldOcc] :: FieldOcc pass -> XCFieldOcc pass
- Retrie.GHC: [fail_operator] :: ApplicativeArg idL -> SyntaxExpr idL
- Retrie.GHC: [fdExt] :: FamilyDecl pass -> XCFamilyDecl pass
- Retrie.GHC: [fdFixity] :: FamilyDecl pass -> LexicalFixity
- Retrie.GHC: [fdInfo] :: FamilyDecl pass -> FamilyInfo pass
- Retrie.GHC: [fdInjectivityAnn] :: FamilyDecl pass -> Maybe (LInjectivityAnn pass)
- Retrie.GHC: [fdLName] :: FamilyDecl pass -> Located (IdP pass)
- Retrie.GHC: [fdResultSig] :: FamilyDecl pass -> LFamilyResultSig pass
- Retrie.GHC: [fdTyVars] :: FamilyDecl pass -> LHsQTyVars pass
- Retrie.GHC: [fd_e_ext] :: ForeignDecl pass -> XForeignExport pass
- Retrie.GHC: [fd_fe] :: ForeignDecl pass -> ForeignExport
- Retrie.GHC: [fd_fi] :: ForeignDecl pass -> ForeignImport
- Retrie.GHC: [fd_i_ext] :: ForeignDecl pass -> XForeignImport pass
- Retrie.GHC: [fd_name] :: ForeignDecl pass -> Located (IdP pass)
- Retrie.GHC: [fd_sig_ty] :: ForeignDecl pass -> LHsSigType pass
- Retrie.GHC: [feqn_bndrs] :: FamEqn pass rhs -> Maybe [LHsTyVarBndr pass]
- Retrie.GHC: [feqn_ext] :: FamEqn pass rhs -> XCFamEqn pass rhs
- Retrie.GHC: [feqn_fixity] :: FamEqn pass rhs -> LexicalFixity
- Retrie.GHC: [feqn_pats] :: FamEqn pass rhs -> HsTyPats pass
- Retrie.GHC: [feqn_rhs] :: FamEqn pass rhs -> rhs
- Retrie.GHC: [feqn_tycon] :: FamEqn pass rhs -> Located (IdP pass)
- Retrie.GHC: [final_expr] :: ApplicativeArg idL -> HsExpr idL
- Retrie.GHC: [fun_co_fn] :: HsBindLR idL idR -> HsWrapper
- Retrie.GHC: [fun_ext] :: HsBindLR idL idR -> XFunBind idL idR
- Retrie.GHC: [fun_id] :: HsBindLR idL idR -> Located (IdP idL)
- Retrie.GHC: [fun_matches] :: HsBindLR idL idR -> MatchGroup idR (LHsExpr idR)
- Retrie.GHC: [fun_tick] :: HsBindLR idL idR -> [Tickish Id]
- Retrie.GHC: [grhssExt] :: GRHSs p body -> XCGRHSs p body
- Retrie.GHC: [grhssGRHSs] :: GRHSs p body -> [LGRHS p body]
- Retrie.GHC: [grhssLocalBinds] :: GRHSs p body -> LHsLocalBinds p
- Retrie.GHC: [group_ext] :: TyClGroup pass -> XCTyClGroup pass
- Retrie.GHC: [group_instds] :: TyClGroup pass -> [LInstDecl pass]
- Retrie.GHC: [group_kisigs] :: TyClGroup pass -> [LStandaloneKindSig pass]
- Retrie.GHC: [group_roles] :: TyClGroup pass -> [LRoleAnnotDecl pass]
- Retrie.GHC: [group_tyclds] :: TyClGroup pass -> [LTyClDecl pass]
- Retrie.GHC: [hsRecFieldArg] :: HsRecField' id arg -> arg
- Retrie.GHC: [hsRecFieldLbl] :: HsRecField' id arg -> Located id
- Retrie.GHC: [hsRecPun] :: HsRecField' id arg -> Bool
- Retrie.GHC: [hs_annds] :: HsGroup p -> [LAnnDecl p]
- Retrie.GHC: [hs_defds] :: HsGroup p -> [LDefaultDecl p]
- Retrie.GHC: [hs_derivds] :: HsGroup p -> [LDerivDecl p]
- Retrie.GHC: [hs_docs] :: HsGroup p -> [LDocDecl]
- Retrie.GHC: [hs_ext] :: HsGroup p -> XCHsGroup p
- Retrie.GHC: [hs_fixds] :: HsGroup p -> [LFixitySig p]
- Retrie.GHC: [hs_fords] :: HsGroup p -> [LForeignDecl p]
- Retrie.GHC: [hs_ruleds] :: HsGroup p -> [LRuleDecls p]
- Retrie.GHC: [hs_splcds] :: HsGroup p -> [LSpliceDecl p]
- Retrie.GHC: [hs_tyclds] :: HsGroup p -> [TyClGroup p]
- Retrie.GHC: [hs_valds] :: HsGroup p -> HsValBinds p
- Retrie.GHC: [hs_warnds] :: HsGroup p -> [LWarnDecls p]
- Retrie.GHC: [hsib_body] :: HsImplicitBndrs pass thing -> thing
- Retrie.GHC: [hsib_ext] :: HsImplicitBndrs pass thing -> XHsIB pass thing
- Retrie.GHC: [hsq_explicit] :: LHsQTyVars pass -> [LHsTyVarBndr pass]
- Retrie.GHC: [hsq_ext] :: LHsQTyVars pass -> XHsQTvs pass
- Retrie.GHC: [hst_bndrs] :: HsType pass -> [LHsTyVarBndr pass]
- Retrie.GHC: [hst_body] :: HsType pass -> LHsType pass
- Retrie.GHC: [hst_ctxt] :: HsType pass -> LHsContext pass
- Retrie.GHC: [hst_fvf] :: HsType pass -> ForallVisFlag
- Retrie.GHC: [hst_xforall] :: HsType pass -> XForAllTy pass
- Retrie.GHC: [hst_xqual] :: HsType pass -> XQualTy pass
- Retrie.GHC: [hswc_body] :: HsWildCardBndrs pass thing -> thing
- Retrie.GHC: [hswc_ext] :: HsWildCardBndrs pass thing -> XHsWC pass thing
- Retrie.GHC: [ideclAs] :: ImportDecl pass -> Maybe (Located ModuleName)
- Retrie.GHC: [ideclExt] :: ImportDecl pass -> XCImportDecl pass
- Retrie.GHC: [ideclHiding] :: ImportDecl pass -> Maybe (Bool, Located [LIE pass])
- Retrie.GHC: [ideclImplicit] :: ImportDecl pass -> Bool
- Retrie.GHC: [ideclName] :: ImportDecl pass -> Located ModuleName
- Retrie.GHC: [ideclPkgQual] :: ImportDecl pass -> Maybe StringLiteral
- Retrie.GHC: [ideclQualified] :: ImportDecl pass -> ImportDeclQualifiedStyle
- Retrie.GHC: [ideclSafe] :: ImportDecl pass -> Bool
- Retrie.GHC: [ideclSourceSrc] :: ImportDecl pass -> SourceText
- Retrie.GHC: [ideclSource] :: ImportDecl pass -> Bool
- Retrie.GHC: [is_body_stmt] :: ApplicativeArg idL -> Bool
- Retrie.GHC: [m_ctxt] :: Match p body -> HsMatchContext (NameOrRdrName (IdP p))
- Retrie.GHC: [m_ext] :: Match p body -> XCMatch p body
- Retrie.GHC: [m_grhss] :: Match p body -> GRHSs p body
- Retrie.GHC: [m_pats] :: Match p body -> [LPat p]
- Retrie.GHC: [mc_fixity] :: HsMatchContext id -> LexicalFixity
- Retrie.GHC: [mc_fun] :: HsMatchContext id -> Located id
- Retrie.GHC: [mc_strictness] :: HsMatchContext id -> SrcStrictness
- Retrie.GHC: [mg_alts] :: MatchGroup p body -> Located [LMatch p body]
- Retrie.GHC: [mg_arg_tys] :: MatchGroupTc -> [Type]
- Retrie.GHC: [mg_ext] :: MatchGroup p body -> XMG p body
- Retrie.GHC: [mg_origin] :: MatchGroup p body -> Origin
- Retrie.GHC: [mg_res_ty] :: MatchGroupTc -> Type
- Retrie.GHC: [ol_ext] :: HsOverLit p -> XOverLit p
- Retrie.GHC: [ol_rebindable] :: OverLitTc -> Bool
- Retrie.GHC: [ol_type] :: OverLitTc -> Type
- Retrie.GHC: [ol_val] :: HsOverLit p -> OverLitVal
- Retrie.GHC: [ol_witness] :: HsOverLit p -> HsExpr p
- Retrie.GHC: [pat_arg_tys] :: Pat p -> [Type]
- Retrie.GHC: [pat_args] :: Pat p -> HsConPatDetails p
- Retrie.GHC: [pat_binds] :: Pat p -> TcEvBinds
- Retrie.GHC: [pat_con] :: Pat p -> Located ConLike
- Retrie.GHC: [pat_dicts] :: Pat p -> [EvVar]
- Retrie.GHC: [pat_ext] :: HsBindLR idL idR -> XPatBind idL idR
- Retrie.GHC: [pat_fvs] :: NPatBindTc -> NameSet
- Retrie.GHC: [pat_lhs] :: HsBindLR idL idR -> LPat idL
- Retrie.GHC: [pat_rhs] :: HsBindLR idL idR -> GRHSs idR (LHsExpr idR)
- Retrie.GHC: [pat_rhs_ty] :: NPatBindTc -> Type
- Retrie.GHC: [pat_ticks] :: HsBindLR idL idR -> ([Tickish Id], [[Tickish Id]])
- Retrie.GHC: [pat_tvs] :: Pat p -> [TyVar]
- Retrie.GHC: [pat_wrap] :: Pat p -> HsWrapper
- Retrie.GHC: [psb_args] :: PatSynBind idL idR -> HsPatSynDetails (Located (IdP idR))
- Retrie.GHC: [psb_def] :: PatSynBind idL idR -> LPat idR
- Retrie.GHC: [psb_dir] :: PatSynBind idL idR -> HsPatSynDir idR
- Retrie.GHC: [psb_ext] :: PatSynBind idL idR -> XPSB idL idR
- Retrie.GHC: [psb_id] :: PatSynBind idL idR -> Located (IdP idL)
- Retrie.GHC: [rcon_con_expr] :: RecordConTc -> PostTcExpr
- Retrie.GHC: [rcon_con_like] :: RecordConTc -> ConLike
- Retrie.GHC: [rcon_con_name] :: HsExpr p -> Located (IdP p)
- Retrie.GHC: [rcon_ext] :: HsExpr p -> XRecordCon p
- Retrie.GHC: [rcon_flds] :: HsExpr p -> HsRecordBinds p
- Retrie.GHC: [rd_act] :: RuleDecl pass -> Activation
- Retrie.GHC: [rd_ext] :: RuleDecl pass -> XHsRule pass
- Retrie.GHC: [rd_lhs] :: RuleDecl pass -> Located (HsExpr pass)
- Retrie.GHC: [rd_name] :: RuleDecl pass -> Located (SourceText, RuleName)
- Retrie.GHC: [rd_rhs] :: RuleDecl pass -> Located (HsExpr pass)
- Retrie.GHC: [rd_tmvs] :: RuleDecl pass -> [LRuleBndr pass]
- Retrie.GHC: [rd_tyvs] :: RuleDecl pass -> Maybe [LHsTyVarBndr (NoGhcTc pass)]
- Retrie.GHC: [rdrNameFieldOcc] :: FieldOcc pass -> Located RdrName
- Retrie.GHC: [rds_ext] :: RuleDecls pass -> XCRuleDecls pass
- Retrie.GHC: [rds_rules] :: RuleDecls pass -> [LRuleDecl pass]
- Retrie.GHC: [rds_src] :: RuleDecls pass -> SourceText
- Retrie.GHC: [recS_bind_fn] :: StmtLR idL idR body -> SyntaxExpr idR
- Retrie.GHC: [recS_bind_ty] :: RecStmtTc -> Type
- Retrie.GHC: [recS_ext] :: StmtLR idL idR body -> XRecStmt idL idR body
- Retrie.GHC: [recS_later_ids] :: StmtLR idL idR body -> [IdP idR]
- Retrie.GHC: [recS_later_rets] :: RecStmtTc -> [PostTcExpr]
- Retrie.GHC: [recS_mfix_fn] :: StmtLR idL idR body -> SyntaxExpr idR
- Retrie.GHC: [recS_rec_ids] :: StmtLR idL idR body -> [IdP idR]
- Retrie.GHC: [recS_rec_rets] :: RecStmtTc -> [PostTcExpr]
- Retrie.GHC: [recS_ret_fn] :: StmtLR idL idR body -> SyntaxExpr idR
- Retrie.GHC: [recS_ret_ty] :: RecStmtTc -> Type
- Retrie.GHC: [recS_stmts] :: StmtLR idL idR body -> [LStmtLR idL idR body]
- Retrie.GHC: [rec_dotdot] :: HsRecFields p arg -> Maybe (Located Int)
- Retrie.GHC: [rec_flds] :: HsRecFields p arg -> [LHsRecField p arg]
- Retrie.GHC: [recordPatSynPatVar] :: RecordPatSynField a -> a
- Retrie.GHC: [recordPatSynSelectorId] :: RecordPatSynField a -> a
- Retrie.GHC: [rupd_cons] :: RecordUpdTc -> [ConLike]
- Retrie.GHC: [rupd_expr] :: HsExpr p -> LHsExpr p
- Retrie.GHC: [rupd_ext] :: HsExpr p -> XRecordUpd p
- Retrie.GHC: [rupd_flds] :: HsExpr p -> [LHsRecUpdField p]
- Retrie.GHC: [rupd_in_tys] :: RecordUpdTc -> [Type]
- Retrie.GHC: [rupd_out_tys] :: RecordUpdTc -> [Type]
- Retrie.GHC: [rupd_wrap] :: RecordUpdTc -> HsWrapper
- Retrie.GHC: [syn_arg_wraps] :: SyntaxExpr p -> [HsWrapper]
- Retrie.GHC: [syn_expr] :: SyntaxExpr p -> HsExpr p
- Retrie.GHC: [syn_res_wrap] :: SyntaxExpr p -> HsWrapper
- Retrie.GHC: [tcdATDefs] :: TyClDecl pass -> [LTyFamDefltDecl pass]
- Retrie.GHC: [tcdATs] :: TyClDecl pass -> [LFamilyDecl pass]
- Retrie.GHC: [tcdCExt] :: TyClDecl pass -> XClassDecl pass
- Retrie.GHC: [tcdCtxt] :: TyClDecl pass -> LHsContext pass
- Retrie.GHC: [tcdDExt] :: TyClDecl pass -> XDataDecl pass
- Retrie.GHC: [tcdDataCusk] :: DataDeclRn -> Bool
- Retrie.GHC: [tcdDataDefn] :: TyClDecl pass -> HsDataDefn pass
- Retrie.GHC: [tcdDocs] :: TyClDecl pass -> [LDocDecl]
- Retrie.GHC: [tcdFDs] :: TyClDecl pass -> [LHsFunDep pass]
- Retrie.GHC: [tcdFExt] :: TyClDecl pass -> XFamDecl pass
- Retrie.GHC: [tcdFVs] :: DataDeclRn -> NameSet
- Retrie.GHC: [tcdFam] :: TyClDecl pass -> FamilyDecl pass
- Retrie.GHC: [tcdFixity] :: TyClDecl pass -> LexicalFixity
- Retrie.GHC: [tcdLName] :: TyClDecl pass -> Located (IdP pass)
- Retrie.GHC: [tcdMeths] :: TyClDecl pass -> LHsBinds pass
- Retrie.GHC: [tcdRhs] :: TyClDecl pass -> LHsType pass
- Retrie.GHC: [tcdSExt] :: TyClDecl pass -> XSynDecl pass
- Retrie.GHC: [tcdSigs] :: TyClDecl pass -> [LSig pass]
- Retrie.GHC: [tcdTyVars] :: TyClDecl pass -> LHsQTyVars pass
- Retrie.GHC: [tfid_eqn] :: TyFamInstDecl pass -> TyFamInstEqn pass
- Retrie.GHC: [tfid_ext] :: InstDecl pass -> XTyFamInstD pass
- Retrie.GHC: [tfid_inst] :: InstDecl pass -> TyFamInstDecl pass
- Retrie.GHC: [trS_bind] :: StmtLR idL idR body -> SyntaxExpr idR
- Retrie.GHC: [trS_bndrs] :: StmtLR idL idR body -> [(IdP idR, IdP idR)]
- Retrie.GHC: [trS_by] :: StmtLR idL idR body -> Maybe (LHsExpr idR)
- Retrie.GHC: [trS_ext] :: StmtLR idL idR body -> XTransStmt idL idR body
- Retrie.GHC: [trS_fmap] :: StmtLR idL idR body -> HsExpr idR
- Retrie.GHC: [trS_form] :: StmtLR idL idR body -> TransForm
- Retrie.GHC: [trS_ret] :: StmtLR idL idR body -> SyntaxExpr idR
- Retrie.GHC: [trS_stmts] :: StmtLR idL idR body -> [ExprLStmt idL]
- Retrie.GHC: [trS_using] :: StmtLR idL idR body -> LHsExpr idR
- Retrie.GHC: [var_ext] :: HsBindLR idL idR -> XVarBind idL idR
- Retrie.GHC: [var_id] :: HsBindLR idL idR -> IdP idL
- Retrie.GHC: [var_inline] :: HsBindLR idL idR -> Bool
- Retrie.GHC: [var_rhs] :: HsBindLR idL idR -> LHsExpr idR
- Retrie.GHC: [wd_ext] :: WarnDecls pass -> XWarnings pass
- Retrie.GHC: [wd_src] :: WarnDecls pass -> SourceText
- Retrie.GHC: [wd_warnings] :: WarnDecls pass -> [LWarnDecl pass]
- Retrie.GHC: [xarg_app_arg_many] :: ApplicativeArg idL -> XApplicativeArgMany idL
- Retrie.GHC: [xarg_app_arg_one] :: ApplicativeArg idL -> XApplicativeArgOne idL
- Retrie.GHC: ambiguousFieldOcc :: FieldOcc GhcTc -> AmbiguousFieldOcc GhcTc
- Retrie.GHC: annProvenanceName_maybe :: AnnProvenance name -> Maybe name
- Retrie.GHC: appendDocs :: HsDocString -> HsDocString -> HsDocString
- Retrie.GHC: appendGroups :: forall (p :: Pass). HsGroup (GhcPass p) -> HsGroup (GhcPass p) -> HsGroup (GhcPass p)
- Retrie.GHC: chunkify :: [a] -> [[a]]
- Retrie.GHC: class Convertable a b | a -> b
- Retrie.GHC: collectEvVarsPat :: Pat GhcTc -> Bag EvVar
- Retrie.GHC: collectEvVarsPats :: [Pat GhcTc] -> Bag EvVar
- Retrie.GHC: collectHsBindBinders :: (SrcSpanLess (LPat p) ~ Pat p, HasSrcSpan (LPat p)) => HsBindLR p idR -> [IdP p]
- Retrie.GHC: collectHsBindListBinders :: forall (p :: Pass) idR. [LHsBindLR (GhcPass p) idR] -> [IdP (GhcPass p)]
- Retrie.GHC: collectHsBindsBinders :: forall (p :: Pass) idR. LHsBindsLR (GhcPass p) idR -> [IdP (GhcPass p)]
- Retrie.GHC: collectHsIdBinders :: forall (idL :: Pass) (idR :: Pass). HsValBindsLR (GhcPass idL) (GhcPass idR) -> [IdP (GhcPass idL)]
- Retrie.GHC: collectHsValBinders :: forall (idL :: Pass) (idR :: Pass). HsValBindsLR (GhcPass idL) (GhcPass idR) -> [IdP (GhcPass idL)]
- Retrie.GHC: collectLStmtBinders :: forall (idL :: Pass) (idR :: Pass) body. LStmtLR (GhcPass idL) (GhcPass idR) body -> [IdP (GhcPass idL)]
- Retrie.GHC: collectLStmtsBinders :: forall (idL :: Pass) (idR :: Pass) body. [LStmtLR (GhcPass idL) (GhcPass idR) body] -> [IdP (GhcPass idL)]
- Retrie.GHC: collectLocalBinders :: forall (idL :: Pass) (idR :: Pass). HsLocalBindsLR (GhcPass idL) (GhcPass idR) -> [IdP (GhcPass idL)]
- Retrie.GHC: collectMethodBinders :: LHsBindsLR idL idR -> [Located (IdP idL)]
- Retrie.GHC: collectPatBinders :: forall (p :: Pass). LPat (GhcPass p) -> [IdP (GhcPass p)]
- Retrie.GHC: collectPatsBinders :: forall (p :: Pass). [LPat (GhcPass p)] -> [IdP (GhcPass p)]
- Retrie.GHC: collectRuleBndrSigTys :: [RuleBndr pass] -> [LHsSigWcType pass]
- Retrie.GHC: collectStmtBinders :: forall (idL :: Pass) (idR :: Pass) body. StmtLR (GhcPass idL) (GhcPass idR) body -> [IdP (GhcPass idL)]
- Retrie.GHC: collectStmtsBinders :: forall (idL :: Pass) (idR :: Pass) body. [StmtLR (GhcPass idL) (GhcPass idR) body] -> [IdP (GhcPass idL)]
- Retrie.GHC: concatDocs :: [HsDocString] -> Maybe HsDocString
- Retrie.GHC: convert :: Convertable a b => a -> b
- Retrie.GHC: convertLit :: ConvertIdX a b => HsLit a -> HsLit b
- Retrie.GHC: countTyClDecls :: [TyClDecl pass] -> (Int, Int, Int, Int, Int)
- Retrie.GHC: data ABExport p
- Retrie.GHC: data AmbiguousFieldOcc pass
- Retrie.GHC: data AnnDecl pass
- Retrie.GHC: data AnnProvenance name
- Retrie.GHC: data ApplicativeArg idL
- Retrie.GHC: data ArithSeqInfo id
- Retrie.GHC: data CImportSpec
- Retrie.GHC: data ClsInstDecl pass
- Retrie.GHC: data CmdTopTc
- Retrie.GHC: data ConDecl pass
- Retrie.GHC: data ConDeclField pass
- Retrie.GHC: data DataDeclRn
- Retrie.GHC: data DefaultDecl pass
- Retrie.GHC: data DelayedSplice
- Retrie.GHC: data DerivDecl pass
- Retrie.GHC: data DerivStrategy pass
- Retrie.GHC: data DocDecl
- Retrie.GHC: data FamEqn pass rhs
- Retrie.GHC: data FamilyDecl pass
- Retrie.GHC: data FamilyInfo pass
- Retrie.GHC: data FamilyResultSig pass
- Retrie.GHC: data FieldOcc pass
- Retrie.GHC: data Fixity
- Retrie.GHC: data FixitySig pass
- Retrie.GHC: data ForallVisFlag
- Retrie.GHC: data ForeignDecl pass
- Retrie.GHC: data ForeignExport
- Retrie.GHC: data ForeignImport
- Retrie.GHC: data GRHS p body
- Retrie.GHC: data GRHSs p body
- Retrie.GHC: data GhcPass (c :: Pass)
- Retrie.GHC: data HsArg tm ty
- Retrie.GHC: data HsArrAppType
- Retrie.GHC: data HsBindLR idL idR
- Retrie.GHC: data HsBracket p
- Retrie.GHC: data HsCmd id
- Retrie.GHC: data HsCmdTop p
- Retrie.GHC: data HsConDetails arg rec
- Retrie.GHC: data HsDataDefn pass
- Retrie.GHC: data HsDecl p
- Retrie.GHC: data HsDerivingClause pass
- Retrie.GHC: data HsDocString
- Retrie.GHC: data HsExpr p
- Retrie.GHC: data HsGroup p
- Retrie.GHC: data HsIPBinds id
- Retrie.GHC: data HsImplBang
- Retrie.GHC: data HsImplicitBndrs pass thing
- Retrie.GHC: data HsLit x
- Retrie.GHC: data HsLocalBindsLR idL idR
- Retrie.GHC: data HsMatchContext id
- Retrie.GHC: data HsOverLit p
- Retrie.GHC: data HsPatSynDir id
- Retrie.GHC: data HsRecField' id arg
- Retrie.GHC: data HsRecFields p arg
- Retrie.GHC: data HsRuleRn
- Retrie.GHC: data HsSplice id
- Retrie.GHC: data HsSplicedThing id
- Retrie.GHC: data HsSrcBang
- Retrie.GHC: data HsStmtContext id
- Retrie.GHC: data HsTupArg id
- Retrie.GHC: data HsTupleSort
- Retrie.GHC: data HsTyLit
- Retrie.GHC: data HsTyVarBndr pass
- Retrie.GHC: data HsType pass
- Retrie.GHC: data HsValBindsLR idL idR
- Retrie.GHC: data HsWildCardBndrs pass thing
- Retrie.GHC: data IE pass
- Retrie.GHC: data IEWildcard
- Retrie.GHC: data IEWrappedName name
- Retrie.GHC: data IPBind id
- Retrie.GHC: data ImportDecl pass
- Retrie.GHC: data ImportDeclQualifiedStyle
- Retrie.GHC: data InjectivityAnn pass
- Retrie.GHC: data InstDecl pass
- Retrie.GHC: data LHsQTyVars pass
- Retrie.GHC: data ListPatTc
- Retrie.GHC: data Match p body
- Retrie.GHC: data MatchGroup p body
- Retrie.GHC: data MatchGroupTc
- Retrie.GHC: data NHsValBindsLR idL
- Retrie.GHC: data NPatBindTc
- Retrie.GHC: data NewHsTypeX
- Retrie.GHC: data NewOrData
- Retrie.GHC: data NoExtCon
- Retrie.GHC: data NoExtField
- Retrie.GHC: data OverLitTc
- Retrie.GHC: data OverLitVal
- Retrie.GHC: data ParStmtBlock idL idR
- Retrie.GHC: data Pass
- Retrie.GHC: data Pat p
- Retrie.GHC: data PatSynBind idL idR
- Retrie.GHC: data PendingRnSplice
- Retrie.GHC: data PendingTcSplice
- Retrie.GHC: data RecStmtTc
- Retrie.GHC: data RecordConTc
- Retrie.GHC: data RecordPatSynField a
- Retrie.GHC: data RecordUpdTc
- Retrie.GHC: data RoleAnnotDecl pass
- Retrie.GHC: data RuleBndr pass
- Retrie.GHC: data RuleDecl pass
- Retrie.GHC: data RuleDecls pass
- Retrie.GHC: data Sig pass
- Retrie.GHC: data SpliceDecl p
- Retrie.GHC: data SpliceDecoration
- Retrie.GHC: data SrcStrictness
- Retrie.GHC: data SrcUnpackedness
- Retrie.GHC: data StandaloneKindSig pass
- Retrie.GHC: data StmtLR idL idR body
- Retrie.GHC: data SyntaxExpr p
- Retrie.GHC: data TcSpecPrag
- Retrie.GHC: data TcSpecPrags
- Retrie.GHC: data TransForm
- Retrie.GHC: data TyClDecl pass
- Retrie.GHC: data TyClGroup pass
- Retrie.GHC: data UnboundVar
- Retrie.GHC: data UntypedSpliceFlavour
- Retrie.GHC: data WarnDecl pass
- Retrie.GHC: data WarnDecls pass
- Retrie.GHC: derivStrategyName :: DerivStrategy a -> SDoc
- Retrie.GHC: docDeclDoc :: DocDecl -> HsDocString
- Retrie.GHC: dropWildCards :: LHsSigWcType pass -> LHsSigType pass
- Retrie.GHC: emptyArgDocMap :: ArgDocMap
- Retrie.GHC: emptyDeclDocMap :: DeclDocMap
- Retrie.GHC: emptyLHsBinds :: LHsBindsLR idL idR
- Retrie.GHC: emptyLHsQTvs :: LHsQTyVars GhcRn
- Retrie.GHC: emptyLocalBinds :: forall (a :: Pass) (b :: Pass). HsLocalBindsLR (GhcPass a) (GhcPass b)
- Retrie.GHC: emptyRdrGroup :: forall (p :: Pass). HsGroup (GhcPass p)
- Retrie.GHC: emptyRecStmt :: forall (idL :: Pass) bodyR. StmtLR (GhcPass idL) GhcPs bodyR
- Retrie.GHC: emptyRecStmtId :: StmtLR GhcTc GhcTc bodyR
- Retrie.GHC: emptyRecStmtName :: StmtLR GhcRn GhcRn bodyR
- Retrie.GHC: emptyRnGroup :: forall (p :: Pass). HsGroup (GhcPass p)
- Retrie.GHC: emptyTransStmt :: StmtLR GhcPs GhcPs (LHsExpr GhcPs)
- Retrie.GHC: emptyValBindsIn :: forall (a :: Pass) (b :: Pass). HsValBindsLR (GhcPass a) (GhcPass b)
- Retrie.GHC: emptyValBindsOut :: forall (a :: Pass) (b :: Pass). HsValBindsLR (GhcPass a) (GhcPass b)
- Retrie.GHC: eqEmptyLocalBinds :: HsLocalBindsLR a b -> Bool
- Retrie.GHC: famResultKindSignature :: forall (p :: Pass). FamilyResultSig (GhcPass p) -> Maybe (LHsKind (GhcPass p))
- Retrie.GHC: familyDeclLName :: forall (p :: Pass). FamilyDecl (GhcPass p) -> Located (IdP (GhcPass p))
- Retrie.GHC: familyDeclName :: forall (p :: Pass). FamilyDecl (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: flattenRuleDecls :: [LRuleDecls pass] -> [LRuleDecl pass]
- Retrie.GHC: foldDerivStrategy :: forall p (pass :: Pass) r. p ~ GhcPass pass => r -> (XViaStrategy p -> r) -> DerivStrategy p -> r
- Retrie.GHC: getBangStrictness :: LHsType a -> HsSrcBang
- Retrie.GHC: getBangType :: LHsType a -> LHsType a
- Retrie.GHC: getConArgs :: ConDecl pass -> HsConDeclDetails pass
- Retrie.GHC: getConNames :: forall (p :: Pass). ConDecl (GhcPass p) -> [Located (IdP (GhcPass p))]
- Retrie.GHC: getLHsInstDeclClass_maybe :: forall (p :: Pass). LHsSigType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
- Retrie.GHC: getLHsInstDeclHead :: forall (p :: Pass). LHsSigType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: getPatSynBinds :: [(RecFlag, LHsBinds id)] -> [PatSynBind id id]
- Retrie.GHC: hasSpecPrags :: TcSpecPrags -> Bool
- Retrie.GHC: hsAllLTyVarNames :: LHsQTyVars GhcRn -> [Name]
- Retrie.GHC: hsConDeclArgTys :: HsConDeclDetails pass -> [LBangType pass]
- Retrie.GHC: hsConDeclTheta :: Maybe (LHsContext pass) -> [LHsType pass]
- Retrie.GHC: hsConDetailsArgs :: HsConDetails (LHsType a) (Located [LConDeclField a]) -> [LHsType a]
- Retrie.GHC: hsConPatArgs :: HsConPatDetails p -> [LPat p]
- Retrie.GHC: hsDataFamInstBinders :: forall (p :: Pass). DataFamInstDecl (GhcPass p) -> ([Located (IdP (GhcPass p))], [LFieldOcc (GhcPass p)])
- Retrie.GHC: hsDeclHasCusk :: TyClDecl GhcRn -> Bool
- Retrie.GHC: hsDocStringToByteString :: HsDocString -> ByteString
- Retrie.GHC: hsExplicitLTyVarNames :: forall (p :: Pass). LHsQTyVars (GhcPass p) -> [IdP (GhcPass p)]
- Retrie.GHC: hsExprNeedsParens :: PprPrec -> HsExpr p -> Bool
- Retrie.GHC: hsForeignDeclsBinders :: [LForeignDecl pass] -> [Located (IdP pass)]
- Retrie.GHC: hsGroupBinders :: HsGroup GhcRn -> [Name]
- Retrie.GHC: hsGroupInstDecls :: HsGroup id -> [LInstDecl id]
- Retrie.GHC: hsIPNameFS :: HsIPName -> FastString
- Retrie.GHC: hsImplicitBody :: forall (p :: Pass) thing. HsImplicitBndrs (GhcPass p) thing -> thing
- Retrie.GHC: hsLMatchPats :: forall (id :: Pass) body. LMatch (GhcPass id) body -> [LPat (GhcPass id)]
- Retrie.GHC: hsLTyClDeclBinders :: forall (p :: Pass). Located (TyClDecl (GhcPass p)) -> ([Located (IdP (GhcPass p))], [LFieldOcc (GhcPass p)])
- Retrie.GHC: hsLTyVarBndrToType :: forall (p :: Pass). LHsTyVarBndr (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: hsLTyVarBndrsToTypes :: forall (p :: Pass). LHsQTyVars (GhcPass p) -> [LHsType (GhcPass p)]
- Retrie.GHC: hsLTyVarLocName :: forall (p :: Pass). LHsTyVarBndr (GhcPass p) -> Located (IdP (GhcPass p))
- Retrie.GHC: hsLTyVarLocNames :: forall (p :: Pass). LHsQTyVars (GhcPass p) -> [Located (IdP (GhcPass p))]
- Retrie.GHC: hsLTyVarName :: forall (p :: Pass). LHsTyVarBndr (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: hsLTyVarNames :: forall (p :: Pass). [LHsTyVarBndr (GhcPass p)] -> [IdP (GhcPass p)]
- Retrie.GHC: hsLitNeedsParens :: PprPrec -> HsLit x -> Bool
- Retrie.GHC: hsOverLitNeedsParens :: PprPrec -> HsOverLit x -> Bool
- Retrie.GHC: hsPatSynSelectors :: forall (p :: Pass). HsValBinds (GhcPass p) -> [IdP (GhcPass p)]
- Retrie.GHC: hsQTvExplicit :: LHsQTyVars pass -> [LHsTyVarBndr pass]
- Retrie.GHC: hsRecFieldId :: HsRecField GhcTc arg -> Located Id
- Retrie.GHC: hsRecFieldSel :: HsRecField pass arg -> Located (XCFieldOcc pass)
- Retrie.GHC: hsRecFields :: HsRecFields p arg -> [XCFieldOcc p]
- Retrie.GHC: hsRecFieldsArgs :: HsRecFields p arg -> [arg]
- Retrie.GHC: hsRecUpdFieldId :: HsRecField' (AmbiguousFieldOcc GhcTc) arg -> Located Id
- Retrie.GHC: hsRecUpdFieldOcc :: HsRecField' (AmbiguousFieldOcc GhcTc) arg -> LFieldOcc GhcTc
- Retrie.GHC: hsRecUpdFieldRdr :: forall (p :: Pass). HsRecUpdField (GhcPass p) -> Located RdrName
- Retrie.GHC: hsScopedTvs :: LHsSigType GhcRn -> [Name]
- Retrie.GHC: hsSigDoc :: Sig name -> SDoc
- Retrie.GHC: hsSigType :: forall (p :: Pass). LHsSigType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: hsSigWcType :: LHsSigWcType pass -> LHsType pass
- Retrie.GHC: hsTvbAllKinded :: LHsQTyVars pass -> Bool
- Retrie.GHC: hsTyClForeignBinders :: [TyClGroup GhcRn] -> [LForeignDecl GhcRn] -> [Name]
- Retrie.GHC: hsTyGetAppHead_maybe :: forall (p :: Pass). LHsType (GhcPass p) -> Maybe (Located (IdP (GhcPass p)))
- Retrie.GHC: hsTyKindSig :: LHsType pass -> Maybe (LHsKind pass)
- Retrie.GHC: hsTyVarName :: forall (p :: Pass). HsTyVarBndr (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: hsTypeNeedsParens :: PprPrec -> HsType pass -> Bool
- Retrie.GHC: hsValBindsImplicits :: forall (idR :: Pass). HsValBindsLR GhcRn (GhcPass idR) -> [(SrcSpan, [Name])]
- Retrie.GHC: hsWcScopedTvs :: LHsSigWcType GhcRn -> [Name]
- Retrie.GHC: hsmodDecls :: HsModule pass -> [LHsDecl pass]
- Retrie.GHC: hsmodDeprecMessage :: HsModule pass -> Maybe (Located WarningTxt)
- Retrie.GHC: hsmodExports :: HsModule pass -> Maybe (Located [LIE pass])
- Retrie.GHC: hsmodHaddockModHeader :: HsModule pass -> Maybe LHsDocString
- Retrie.GHC: hsmodImports :: HsModule pass -> [LImportDecl pass]
- Retrie.GHC: hsmodName :: HsModule pass -> Maybe (Located ModuleName)
- Retrie.GHC: ieLWrappedName :: LIEWrappedName name -> Located name
- Retrie.GHC: ieName :: forall (p :: Pass). IE (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: ieNames :: forall (p :: Pass). IE (GhcPass p) -> [IdP (GhcPass p)]
- Retrie.GHC: ieWrappedName :: IEWrappedName name -> name
- Retrie.GHC: ignoreParens :: LHsType pass -> LHsType pass
- Retrie.GHC: importDeclQualifiedStyle :: Maybe (Located a) -> Maybe (Located a) -> ImportDeclQualifiedStyle
- Retrie.GHC: instDeclDataFamInsts :: forall (p :: Pass). [LInstDecl (GhcPass p)] -> [DataFamInstDecl (GhcPass p)]
- Retrie.GHC: isAtomicHsExpr :: HsExpr id -> Bool
- Retrie.GHC: isBangedHsBind :: HsBind GhcTc -> Bool
- Retrie.GHC: isBangedLPat :: forall (p :: Pass). LPat (GhcPass p) -> Bool
- Retrie.GHC: isClassDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isClosedTypeFamilyInfo :: FamilyInfo pass -> Bool
- Retrie.GHC: isCompleteMatchSig :: LSig name -> Bool
- Retrie.GHC: isComprehensionContext :: HsStmtContext id -> Bool
- Retrie.GHC: isDataDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isDataFamilyDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isDefaultMethod :: TcSpecPrags -> Bool
- Retrie.GHC: isEmptyIPBindsPR :: forall (p :: Pass). HsIPBinds (GhcPass p) -> Bool
- Retrie.GHC: isEmptyIPBindsTc :: HsIPBinds GhcTc -> Bool
- Retrie.GHC: isEmptyLHsBinds :: LHsBindsLR idL idR -> Bool
- Retrie.GHC: isEmptyLHsQTvs :: LHsQTyVars GhcRn -> Bool
- Retrie.GHC: isEmptyLocalBindsPR :: forall (a :: Pass) (b :: Pass). HsLocalBindsLR (GhcPass a) (GhcPass b) -> Bool
- Retrie.GHC: isEmptyLocalBindsTc :: forall (a :: Pass). HsLocalBindsLR (GhcPass a) GhcTc -> Bool
- Retrie.GHC: isEmptyMatchGroup :: MatchGroup id body -> Bool
- Retrie.GHC: isEmptyValBinds :: forall (a :: Pass) (b :: Pass). HsValBindsLR (GhcPass a) (GhcPass b) -> Bool
- Retrie.GHC: isFamilyDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isFixityLSig :: LSig name -> Bool
- Retrie.GHC: isHsKindedTyVar :: HsTyVarBndr pass -> Bool
- Retrie.GHC: isImportDeclQualified :: ImportDeclQualifiedStyle -> Bool
- Retrie.GHC: isInfixFunBind :: HsBindLR id1 id2 -> Bool
- Retrie.GHC: isInfixMatch :: Match id body -> Bool
- Retrie.GHC: isInlineLSig :: LSig name -> Bool
- Retrie.GHC: isIrrefutableHsPat :: forall (p :: Pass). OutputableBndrId p => LPat (GhcPass p) -> Bool
- Retrie.GHC: isLHsForAllTy :: LHsType p -> Bool
- Retrie.GHC: isMinimalLSig :: LSig name -> Bool
- Retrie.GHC: isMonadCompContext :: HsStmtContext id -> Bool
- Retrie.GHC: isMonadFailStmtContext :: HsStmtContext id -> Bool
- Retrie.GHC: isOpenTypeFamilyInfo :: FamilyInfo pass -> Bool
- Retrie.GHC: isPatSynCtxt :: HsMatchContext id -> Bool
- Retrie.GHC: isPragLSig :: LSig name -> Bool
- Retrie.GHC: isQuietHsCmd :: HsCmd id -> Bool
- Retrie.GHC: isQuietHsExpr :: HsExpr id -> Bool
- Retrie.GHC: isSCCFunSig :: LSig name -> Bool
- Retrie.GHC: isSingletonMatchGroup :: [LMatch id body] -> Bool
- Retrie.GHC: isSpecInstLSig :: LSig name -> Bool
- Retrie.GHC: isSpecLSig :: LSig name -> Bool
- Retrie.GHC: isSynDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isTypeFamilyDecl :: TyClDecl pass -> Bool
- Retrie.GHC: isTypeLSig :: LSig name -> Bool
- Retrie.GHC: isTypedBracket :: HsBracket id -> Bool
- Retrie.GHC: isTypedSplice :: HsSplice id -> Bool
- Retrie.GHC: isUnliftedHsBind :: HsBind GhcTc -> Bool
- Retrie.GHC: lPatImplicits :: LPat GhcRn -> [(SrcSpan, [Name])]
- Retrie.GHC: lStmtsImplicits :: forall (idR :: Pass) body. [LStmtLR GhcRn (GhcPass idR) (Located (body (GhcPass idR)))] -> [(SrcSpan, [Name])]
- Retrie.GHC: lieWrappedName :: LIEWrappedName name -> name
- Retrie.GHC: looksLazyPatBind :: forall (p :: Pass). HsBind (GhcPass p) -> Bool
- Retrie.GHC: mapDerivStrategy :: forall p (pass :: Pass). p ~ GhcPass pass => (XViaStrategy p -> XViaStrategy p) -> DerivStrategy p -> DerivStrategy p
- Retrie.GHC: matchContextErrString :: Outputable id => HsMatchContext id -> SDoc
- Retrie.GHC: matchGroupArity :: forall (id :: Pass) body. MatchGroup (GhcPass id) body -> Arity
- Retrie.GHC: matchSeparator :: HsMatchContext id -> SDoc
- Retrie.GHC: missingTupArg :: HsTupArg GhcPs
- Retrie.GHC: mkAmbiguousFieldOcc :: Located RdrName -> AmbiguousFieldOcc GhcPs
- Retrie.GHC: mkAnonWildCardTy :: HsType GhcPs
- Retrie.GHC: mkBigLHsPatTup :: [LPat GhcRn] -> LPat GhcRn
- Retrie.GHC: mkBigLHsTup :: forall (id :: Pass). [LHsExpr (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: mkBigLHsVarPatTup :: [IdP GhcRn] -> LPat GhcRn
- Retrie.GHC: mkBigLHsVarTup :: forall (id :: Pass). [IdP (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: mkBindStmt :: forall (idL :: Pass) (idR :: Pass) bodyR. XBindStmt (GhcPass idL) (GhcPass idR) (Located (bodyR (GhcPass idR))) ~ NoExtField => LPat (GhcPass idL) -> Located (bodyR (GhcPass idR)) -> StmtLR (GhcPass idL) (GhcPass idR) (Located (bodyR (GhcPass idR)))
- Retrie.GHC: mkBodyStmt :: forall bodyR (idL :: Pass). Located (bodyR GhcPs) -> StmtLR (GhcPass idL) GhcPs (Located (bodyR GhcPs))
- Retrie.GHC: mkCharLitPat :: forall (p :: Pass). SourceText -> Char -> OutPat (GhcPass p)
- Retrie.GHC: mkChunkified :: ([a] -> a) -> [a] -> a
- Retrie.GHC: mkClassOpSigs :: [LSig GhcPs] -> [LSig GhcPs]
- Retrie.GHC: mkEmptyImplicitBndrs :: thing -> HsImplicitBndrs GhcRn thing
- Retrie.GHC: mkEmptyWildCardBndrs :: thing -> HsWildCardBndrs GhcRn thing
- Retrie.GHC: mkFieldOcc :: Located RdrName -> FieldOcc GhcPs
- Retrie.GHC: mkFunBind :: Origin -> Located RdrName -> [LMatch GhcPs (LHsExpr GhcPs)] -> HsBind GhcPs
- Retrie.GHC: mkGroupByUsingStmt :: [ExprLStmt GhcPs] -> LHsExpr GhcPs -> LHsExpr GhcPs -> StmtLR GhcPs GhcPs (LHsExpr GhcPs)
- Retrie.GHC: mkGroupUsingStmt :: [ExprLStmt GhcPs] -> LHsExpr GhcPs -> StmtLR GhcPs GhcPs (LHsExpr GhcPs)
- Retrie.GHC: mkHsApp :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: mkHsAppKindTy :: forall (p :: Pass). XAppKindTy (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: mkHsAppTy :: forall (p :: Pass). LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: mkHsAppType :: forall (id :: Pass). NoGhcTc (GhcPass id) ~ GhcRn => LHsExpr (GhcPass id) -> LHsWcType GhcRn -> LHsExpr (GhcPass id)
- Retrie.GHC: mkHsAppTypes :: LHsExpr GhcRn -> [LHsWcType GhcRn] -> LHsExpr GhcRn
- Retrie.GHC: mkHsAppTys :: forall (p :: Pass). LHsType (GhcPass p) -> [LHsType (GhcPass p)] -> LHsType (GhcPass p)
- Retrie.GHC: mkHsCaseAlt :: forall (p :: Pass) body. LPat (GhcPass p) -> Located (body (GhcPass p)) -> LMatch (GhcPass p) (Located (body (GhcPass p)))
- Retrie.GHC: mkHsCmdIf :: forall (p :: Pass). LHsExpr (GhcPass p) -> LHsCmd (GhcPass p) -> LHsCmd (GhcPass p) -> HsCmd (GhcPass p)
- Retrie.GHC: mkHsCmdWrap :: forall (p :: Pass). HsWrapper -> HsCmd (GhcPass p) -> HsCmd (GhcPass p)
- Retrie.GHC: mkHsComp :: HsStmtContext Name -> [ExprLStmt GhcPs] -> LHsExpr GhcPs -> HsExpr GhcPs
- Retrie.GHC: mkHsDictLet :: TcEvBinds -> LHsExpr GhcTc -> LHsExpr GhcTc
- Retrie.GHC: mkHsDo :: HsStmtContext Name -> [ExprLStmt GhcPs] -> HsExpr GhcPs
- Retrie.GHC: mkHsDocString :: String -> HsDocString
- Retrie.GHC: mkHsDocStringUtf8ByteString :: ByteString -> HsDocString
- Retrie.GHC: mkHsFractional :: FractionalLit -> HsOverLit GhcPs
- Retrie.GHC: mkHsIf :: forall (p :: Pass). LHsExpr (GhcPass p) -> LHsExpr (GhcPass p) -> LHsExpr (GhcPass p) -> HsExpr (GhcPass p)
- Retrie.GHC: mkHsImplicitBndrs :: thing -> HsImplicitBndrs GhcPs thing
- Retrie.GHC: mkHsIntegral :: IntegralLit -> HsOverLit GhcPs
- Retrie.GHC: mkHsIsString :: SourceText -> FastString -> HsOverLit GhcPs
- Retrie.GHC: mkHsLam :: forall (p :: Pass). XMG (GhcPass p) (LHsExpr (GhcPass p)) ~ NoExtField => [LPat (GhcPass p)] -> LHsExpr (GhcPass p) -> LHsExpr (GhcPass p)
- Retrie.GHC: mkHsLams :: [TyVar] -> [EvVar] -> LHsExpr GhcTc -> LHsExpr GhcTc
- Retrie.GHC: mkHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> HsExpr GhcPs
- Retrie.GHC: mkHsOpTy :: forall (p :: Pass). LHsType (GhcPass p) -> Located (IdP (GhcPass p)) -> LHsType (GhcPass p) -> HsType (GhcPass p)
- Retrie.GHC: mkHsPar :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: mkHsQTvs :: [LHsTyVarBndr GhcPs] -> LHsQTyVars GhcPs
- Retrie.GHC: mkHsQuasiQuote :: RdrName -> SrcSpan -> FastString -> HsSplice GhcPs
- Retrie.GHC: mkHsSigEnv :: (LSig GhcRn -> Maybe ([Located Name], a)) -> [LSig GhcRn] -> NameEnv a
- Retrie.GHC: mkHsString :: forall (p :: Pass). String -> HsLit (GhcPass p)
- Retrie.GHC: mkHsStringPrimLit :: forall (p :: Pass). FastString -> HsLit (GhcPass p)
- Retrie.GHC: mkHsVarBind :: SrcSpan -> RdrName -> LHsExpr GhcPs -> LHsBind GhcPs
- Retrie.GHC: mkHsWildCardBndrs :: thing -> HsWildCardBndrs GhcPs thing
- Retrie.GHC: mkHsWrap :: forall (id :: Pass). HsWrapper -> HsExpr (GhcPass id) -> HsExpr (GhcPass id)
- Retrie.GHC: mkHsWrapCo :: forall (id :: Pass). TcCoercionN -> HsExpr (GhcPass id) -> HsExpr (GhcPass id)
- Retrie.GHC: mkHsWrapCoR :: forall (id :: Pass). TcCoercionR -> HsExpr (GhcPass id) -> HsExpr (GhcPass id)
- Retrie.GHC: mkHsWrapPat :: forall (id :: Pass). HsWrapper -> Pat (GhcPass id) -> Type -> Pat (GhcPass id)
- Retrie.GHC: mkHsWrapPatCo :: forall (id :: Pass). TcCoercionN -> Pat (GhcPass id) -> Type -> Pat (GhcPass id)
- Retrie.GHC: mkLHsCmdWrap :: forall (p :: Pass). HsWrapper -> LHsCmd (GhcPass p) -> LHsCmd (GhcPass p)
- Retrie.GHC: mkLHsPar :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: mkLHsSigType :: LHsType GhcPs -> LHsSigType GhcPs
- Retrie.GHC: mkLHsSigWcType :: LHsType GhcPs -> LHsSigWcType GhcPs
- Retrie.GHC: mkLHsTupleExpr :: forall (a :: Pass). [LHsExpr (GhcPass a)] -> LHsExpr (GhcPass a)
- Retrie.GHC: mkLHsVarTuple :: forall (a :: Pass). [IdP (GhcPass a)] -> LHsExpr (GhcPass a)
- Retrie.GHC: mkLHsWrap :: forall (id :: Pass). HsWrapper -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: mkLHsWrapCo :: forall (id :: Pass). TcCoercionN -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: mkLastStmt :: forall bodyR (idR :: Pass) (idL :: Pass). Located (bodyR (GhcPass idR)) -> StmtLR (GhcPass idL) (GhcPass idR) (Located (bodyR (GhcPass idR)))
- Retrie.GHC: mkMatch :: forall (p :: Pass). HsMatchContext (NameOrRdrName (IdP (GhcPass p))) -> [LPat (GhcPass p)] -> LHsExpr (GhcPass p) -> Located (HsLocalBinds (GhcPass p)) -> LMatch (GhcPass p) (LHsExpr (GhcPass p))
- Retrie.GHC: mkMatchGroup :: XMG name (Located (body name)) ~ NoExtField => Origin -> [LMatch name (Located (body name))] -> MatchGroup name (Located (body name))
- Retrie.GHC: mkNPat :: Located (HsOverLit GhcPs) -> Maybe (SyntaxExpr GhcPs) -> Pat GhcPs
- Retrie.GHC: mkNPlusKPat :: Located RdrName -> Located (HsOverLit GhcPs) -> Pat GhcPs
- Retrie.GHC: mkNilPat :: forall (p :: Pass). Type -> OutPat (GhcPass p)
- Retrie.GHC: mkParPat :: forall (name :: Pass). LPat (GhcPass name) -> LPat (GhcPass name)
- Retrie.GHC: mkPatSynBind :: Located RdrName -> HsPatSynDetails (Located RdrName) -> LPat GhcPs -> HsPatSynDir GhcPs -> HsBind GhcPs
- Retrie.GHC: mkPrefixConPat :: forall (p :: Pass). DataCon -> [OutPat (GhcPass p)] -> [Type] -> OutPat (GhcPass p)
- Retrie.GHC: mkPrefixFunRhs :: Located id -> HsMatchContext id
- Retrie.GHC: mkRecStmt :: forall (idL :: Pass) bodyR. [LStmtLR (GhcPass idL) GhcPs bodyR] -> StmtLR (GhcPass idL) GhcPs bodyR
- Retrie.GHC: mkRnSyntaxExpr :: Name -> SyntaxExpr GhcRn
- Retrie.GHC: mkSimpleGeneratedFunBind :: SrcSpan -> RdrName -> [LPat GhcPs] -> LHsExpr GhcPs -> LHsBind GhcPs
- Retrie.GHC: mkSimpleMatch :: forall (p :: Pass) body. HsMatchContext (NameOrRdrName (IdP (GhcPass p))) -> [LPat (GhcPass p)] -> Located (body (GhcPass p)) -> LMatch (GhcPass p) (Located (body (GhcPass p)))
- Retrie.GHC: mkSyntaxExpr :: forall (p :: Pass). HsExpr (GhcPass p) -> SyntaxExpr (GhcPass p)
- Retrie.GHC: mkTcBindStmt :: LPat GhcTc -> Located (bodyR GhcTc) -> StmtLR GhcTc GhcTc (Located (bodyR GhcTc))
- Retrie.GHC: mkTopFunBind :: Origin -> Located Name -> [LMatch GhcRn (LHsExpr GhcRn)] -> HsBind GhcRn
- Retrie.GHC: mkTransformByStmt :: [ExprLStmt GhcPs] -> LHsExpr GhcPs -> LHsExpr GhcPs -> StmtLR GhcPs GhcPs (LHsExpr GhcPs)
- Retrie.GHC: mkTransformStmt :: [ExprLStmt GhcPs] -> LHsExpr GhcPs -> StmtLR GhcPs GhcPs (LHsExpr GhcPs)
- Retrie.GHC: mkTypedSplice :: SpliceDecoration -> LHsExpr GhcPs -> HsSplice GhcPs
- Retrie.GHC: mkUntypedSplice :: SpliceDecoration -> LHsExpr GhcPs -> HsSplice GhcPs
- Retrie.GHC: mkVarBind :: forall (p :: Pass). IdP (GhcPass p) -> LHsExpr (GhcPass p) -> LHsBind (GhcPass p)
- Retrie.GHC: negateOverLitVal :: OverLitVal -> OverLitVal
- Retrie.GHC: newOrDataToFlavour :: NewOrData -> TyConFlavour
- Retrie.GHC: newtype ArgDocMap
- Retrie.GHC: newtype DataFamInstDecl pass
- Retrie.GHC: newtype DeclDocMap
- Retrie.GHC: newtype HsIPName
- Retrie.GHC: newtype ThModFinalizers
- Retrie.GHC: newtype TyFamInstDecl pass
- Retrie.GHC: nlConPat :: RdrName -> [LPat GhcPs] -> LPat GhcPs
- Retrie.GHC: nlConPatName :: Name -> [LPat GhcRn] -> LPat GhcRn
- Retrie.GHC: nlConVarPat :: RdrName -> [RdrName] -> LPat GhcPs
- Retrie.GHC: nlConVarPatName :: Name -> [Name] -> LPat GhcRn
- Retrie.GHC: nlHsApp :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsAppKindTy :: forall (p :: Pass). LHsType (GhcPass p) -> LHsKind (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: nlHsAppTy :: forall (p :: Pass). LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: nlHsApps :: forall (id :: Pass). IdP (GhcPass id) -> [LHsExpr (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsCase :: LHsExpr GhcPs -> [LMatch GhcPs (LHsExpr GhcPs)] -> LHsExpr GhcPs
- Retrie.GHC: nlHsDataCon :: DataCon -> LHsExpr GhcTc
- Retrie.GHC: nlHsDo :: HsStmtContext Name -> [LStmt GhcPs (LHsExpr GhcPs)] -> LHsExpr GhcPs
- Retrie.GHC: nlHsFunTy :: forall (p :: Pass). LHsType (GhcPass p) -> LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: nlHsIf :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsIntLit :: forall (p :: Pass). Integer -> LHsExpr (GhcPass p)
- Retrie.GHC: nlHsLam :: LMatch GhcPs (LHsExpr GhcPs) -> LHsExpr GhcPs
- Retrie.GHC: nlHsLit :: forall (p :: Pass). HsLit (GhcPass p) -> LHsExpr (GhcPass p)
- Retrie.GHC: nlHsOpApp :: LHsExpr GhcPs -> IdP GhcPs -> LHsExpr GhcPs -> LHsExpr GhcPs
- Retrie.GHC: nlHsPar :: forall (id :: Pass). LHsExpr (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsParTy :: forall (p :: Pass). LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: nlHsSyntaxApps :: forall (id :: Pass). SyntaxExpr (GhcPass id) -> [LHsExpr (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsTyApp :: forall (id :: Pass). IdP (GhcPass id) -> [Type] -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsTyApps :: forall (id :: Pass). IdP (GhcPass id) -> [Type] -> [LHsExpr (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsTyConApp :: forall (p :: Pass). IdP (GhcPass p) -> [LHsType (GhcPass p)] -> LHsType (GhcPass p)
- Retrie.GHC: nlHsTyVar :: forall (p :: Pass). IdP (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: nlHsVar :: forall (id :: Pass). IdP (GhcPass id) -> LHsExpr (GhcPass id)
- Retrie.GHC: nlHsVarApps :: forall (id :: Pass). IdP (GhcPass id) -> [IdP (GhcPass id)] -> LHsExpr (GhcPass id)
- Retrie.GHC: nlInfixConPat :: RdrName -> LPat GhcPs -> LPat GhcPs -> LPat GhcPs
- Retrie.GHC: nlList :: [LHsExpr GhcPs] -> LHsExpr GhcPs
- Retrie.GHC: nlLitPat :: HsLit GhcPs -> LPat GhcPs
- Retrie.GHC: nlNullaryConPat :: forall (p :: Pass). IdP (GhcPass p) -> LPat (GhcPass p)
- Retrie.GHC: nlParPat :: forall (name :: Pass). LPat (GhcPass name) -> LPat (GhcPass name)
- Retrie.GHC: nlTuplePat :: [LPat GhcPs] -> Boxity -> LPat GhcPs
- Retrie.GHC: nlVarPat :: forall (id :: Pass). IdP (GhcPass id) -> LPat (GhcPass id)
- Retrie.GHC: nlWildConPat :: DataCon -> LPat GhcPs
- Retrie.GHC: nlWildPat :: LPat GhcPs
- Retrie.GHC: nlWildPatName :: LPat GhcRn
- Retrie.GHC: noExpr :: forall (p :: Pass). HsExpr (GhcPass p)
- Retrie.GHC: noExtCon :: NoExtCon -> a
- Retrie.GHC: noExtField :: NoExtField
- Retrie.GHC: noLHsContext :: LHsContext pass
- Retrie.GHC: noSpecPrags :: TcSpecPrags
- Retrie.GHC: noSyntaxExpr :: forall (p :: Pass). SyntaxExpr (GhcPass p)
- Retrie.GHC: numVisibleArgs :: [HsArg tm ty] -> Arity
- Retrie.GHC: overLitType :: HsOverLit GhcTc -> Type
- Retrie.GHC: parenthesizeHsContext :: forall (p :: Pass). PprPrec -> LHsContext (GhcPass p) -> LHsContext (GhcPass p)
- Retrie.GHC: parenthesizeHsExpr :: forall (p :: Pass). PprPrec -> LHsExpr (GhcPass p) -> LHsExpr (GhcPass p)
- Retrie.GHC: parenthesizeHsType :: forall (p :: Pass). PprPrec -> LHsType (GhcPass p) -> LHsType (GhcPass p)
- Retrie.GHC: parenthesizePat :: forall (p :: Pass). PprPrec -> LPat (GhcPass p) -> LPat (GhcPass p)
- Retrie.GHC: patNeedsParens :: PprPrec -> Pat p -> Bool
- Retrie.GHC: placeHolderNamesTc :: NameSet
- Retrie.GHC: plusHsValBinds :: forall (a :: Pass). HsValBinds (GhcPass a) -> HsValBinds (GhcPass a) -> HsValBinds (GhcPass a)
- Retrie.GHC: pmPprHsLit :: forall (x :: Pass). HsLit (GhcPass x) -> SDoc
- Retrie.GHC: pp_dotdot :: SDoc
- Retrie.GHC: pp_rhs :: Outputable body => HsMatchContext idL -> body -> SDoc
- Retrie.GHC: pp_st_suffix :: SourceText -> SDoc -> SDoc -> SDoc
- Retrie.GHC: pprAStmtContext :: (Outputable id, Outputable (NameOrRdrName id)) => HsStmtContext id -> SDoc
- Retrie.GHC: pprAnonWildCard :: SDoc
- Retrie.GHC: pprArg :: forall (idL :: Pass). OutputableBndrId idL => ApplicativeArg (GhcPass idL) -> SDoc
- Retrie.GHC: pprBinds :: forall (idL :: Pass) (idR :: Pass). (OutputableBndrId idL, OutputableBndrId idR) => HsLocalBindsLR (GhcPass idL) (GhcPass idR) -> SDoc
- Retrie.GHC: pprBy :: Outputable body => Maybe body -> SDoc
- Retrie.GHC: pprCmd :: forall (p :: Pass). OutputableBndrId p => HsCmd (GhcPass p) -> SDoc
- Retrie.GHC: pprCmdArg :: forall (p :: Pass). OutputableBndrId p => HsCmdTop (GhcPass p) -> SDoc
- Retrie.GHC: pprComp :: forall (p :: Pass) body. (OutputableBndrId p, Outputable body) => [LStmt (GhcPass p) body] -> SDoc
- Retrie.GHC: pprConArgs :: forall (p :: Pass). OutputableBndrId p => HsConPatDetails (GhcPass p) -> SDoc
- Retrie.GHC: pprConDeclFields :: forall (p :: Pass). OutputableBndrId p => [LConDeclField (GhcPass p)] -> SDoc
- Retrie.GHC: pprDataFamInstFlavour :: forall (p :: Pass). DataFamInstDecl (GhcPass p) -> SDoc
- Retrie.GHC: pprDebugParendExpr :: forall (p :: Pass). OutputableBndrId p => PprPrec -> LHsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprDeclList :: [SDoc] -> SDoc
- Retrie.GHC: pprDo :: forall (p :: Pass) body any. (OutputableBndrId p, Outputable body) => HsStmtContext any -> [LStmt (GhcPass p) body] -> SDoc
- Retrie.GHC: pprExpr :: forall (p :: Pass). OutputableBndrId p => HsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprExternalSrcLoc :: (StringLiteral, (Int, Int), (Int, Int)) -> SDoc
- Retrie.GHC: pprFullRuleName :: Located (SourceText, RuleName) -> SDoc
- Retrie.GHC: pprFunBind :: forall (idR :: Pass) body. (OutputableBndrId idR, Outputable body) => MatchGroup (GhcPass idR) body -> SDoc
- Retrie.GHC: pprGRHS :: forall (idR :: Pass) body idL. (OutputableBndrId idR, Outputable body) => HsMatchContext idL -> GRHS (GhcPass idR) body -> SDoc
- Retrie.GHC: pprGRHSs :: forall (idR :: Pass) body idL. (OutputableBndrId idR, Outputable body) => HsMatchContext idL -> GRHSs (GhcPass idR) body -> SDoc
- Retrie.GHC: pprHsBracket :: forall (p :: Pass). OutputableBndrId p => HsBracket (GhcPass p) -> SDoc
- Retrie.GHC: pprHsExplicitForAll :: forall (p :: Pass). OutputableBndrId p => ForallVisFlag -> Maybe [LHsTyVarBndr (GhcPass p)] -> SDoc
- Retrie.GHC: pprHsFamInstLHS :: forall (p :: Pass). OutputableBndrId p => IdP (GhcPass p) -> Maybe [LHsTyVarBndr (GhcPass p)] -> HsTyPats (GhcPass p) -> LexicalFixity -> LHsContext (GhcPass p) -> SDoc
- Retrie.GHC: pprHsForAll :: forall (p :: Pass). OutputableBndrId p => ForallVisFlag -> [LHsTyVarBndr (GhcPass p)] -> LHsContext (GhcPass p) -> SDoc
- Retrie.GHC: pprHsForAllExtra :: forall (p :: Pass). OutputableBndrId p => Maybe SrcSpan -> ForallVisFlag -> [LHsTyVarBndr (GhcPass p)] -> LHsContext (GhcPass p) -> SDoc
- Retrie.GHC: pprHsType :: forall (p :: Pass). OutputableBndrId p => HsType (GhcPass p) -> SDoc
- Retrie.GHC: pprImpExp :: (HasOccName name, OutputableBndr name) => name -> SDoc
- Retrie.GHC: pprLCmd :: forall (p :: Pass). OutputableBndrId p => LHsCmd (GhcPass p) -> SDoc
- Retrie.GHC: pprLExpr :: forall (p :: Pass). OutputableBndrId p => LHsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprLHsBinds :: forall (idL :: Pass) (idR :: Pass). (OutputableBndrId idL, OutputableBndrId idR) => LHsBindsLR (GhcPass idL) (GhcPass idR) -> SDoc
- Retrie.GHC: pprLHsBindsForUser :: forall (idL :: Pass) (idR :: Pass) (id2 :: Pass). (OutputableBndrId idL, OutputableBndrId idR, OutputableBndrId id2) => LHsBindsLR (GhcPass idL) (GhcPass idR) -> [LSig (GhcPass id2)] -> [SDoc]
- Retrie.GHC: pprLHsContext :: forall (p :: Pass). OutputableBndrId p => LHsContext (GhcPass p) -> SDoc
- Retrie.GHC: pprMatch :: forall (idR :: Pass) body. (OutputableBndrId idR, Outputable body) => Match (GhcPass idR) body -> SDoc
- Retrie.GHC: pprMatchContext :: (Outputable (NameOrRdrName id), Outputable id) => HsMatchContext id -> SDoc
- Retrie.GHC: pprMatchContextNoun :: (Outputable (NameOrRdrName id), Outputable id) => HsMatchContext id -> SDoc
- Retrie.GHC: pprMatchInCtxt :: forall (idR :: Pass) body. (OutputableBndrId idR, Outputable (NameOrRdrName (NameOrRdrName (IdP (GhcPass idR)))), Outputable body) => Match (GhcPass idR) body -> SDoc
- Retrie.GHC: pprMatches :: forall (idR :: Pass) body. (OutputableBndrId idR, Outputable body) => MatchGroup (GhcPass idR) body -> SDoc
- Retrie.GHC: pprMinimalSig :: OutputableBndr name => LBooleanFormula (Located name) -> SDoc
- Retrie.GHC: pprParendExpr :: forall (p :: Pass). OutputableBndrId p => PprPrec -> HsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprParendLExpr :: forall (p :: Pass). OutputableBndrId p => PprPrec -> LHsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprParendLPat :: forall (p :: Pass). OutputableBndrId p => PprPrec -> LPat (GhcPass p) -> SDoc
- Retrie.GHC: pprPatBind :: forall (bndr :: Pass) (p :: Pass) body. (OutputableBndrId bndr, OutputableBndrId p, Outputable body) => LPat (GhcPass bndr) -> GRHSs (GhcPass p) body -> SDoc
- Retrie.GHC: pprPendingSplice :: forall (p :: Pass). OutputableBndrId p => SplicePointName -> LHsExpr (GhcPass p) -> SDoc
- Retrie.GHC: pprQuals :: forall (p :: Pass) body. (OutputableBndrId p, Outputable body) => [LStmt (GhcPass p) body] -> SDoc
- Retrie.GHC: pprSpec :: OutputableBndr id => id -> SDoc -> InlinePragma -> SDoc
- Retrie.GHC: pprSplice :: forall (p :: Pass). OutputableBndrId p => HsSplice (GhcPass p) -> SDoc
- Retrie.GHC: pprSpliceDecl :: forall (p :: Pass). OutputableBndrId p => HsSplice (GhcPass p) -> SpliceExplicitFlag -> SDoc
- Retrie.GHC: pprStmt :: forall (idL :: Pass) (idR :: Pass) body. (OutputableBndrId idL, OutputableBndrId idR, Outputable body) => StmtLR (GhcPass idL) (GhcPass idR) body -> SDoc
- Retrie.GHC: pprStmtContext :: (Outputable id, Outputable (NameOrRdrName id)) => HsStmtContext id -> SDoc
- Retrie.GHC: pprStmtInCtxt :: forall (idL :: Pass) (idR :: Pass) body. (OutputableBndrId idL, OutputableBndrId idR, Outputable body) => HsStmtContext (IdP (GhcPass idL)) -> StmtLR (GhcPass idL) (GhcPass idR) body -> SDoc
- Retrie.GHC: pprTcSpecPrags :: TcSpecPrags -> SDoc
- Retrie.GHC: pprTicks :: SDoc -> SDoc -> SDoc
- Retrie.GHC: pprTransStmt :: Outputable body => Maybe body -> body -> TransForm -> SDoc
- Retrie.GHC: pprTransformStmt :: forall (p :: Pass). OutputableBndrId p => [IdP (GhcPass p)] -> LHsExpr (GhcPass p) -> Maybe (LHsExpr (GhcPass p)) -> SDoc
- Retrie.GHC: pprTyClDeclFlavour :: forall (p :: Pass). TyClDecl (GhcPass p) -> SDoc
- Retrie.GHC: pprTyFamInstDecl :: forall (p :: Pass). OutputableBndrId p => TopLevelFlag -> TyFamInstDecl (GhcPass p) -> SDoc
- Retrie.GHC: pprVarSig :: OutputableBndr id => [id] -> SDoc -> SDoc
- Retrie.GHC: ppr_apps :: forall (p :: Pass). OutputableBndrId p => HsExpr (GhcPass p) -> [Either (LHsExpr (GhcPass p)) (LHsWcType (NoGhcTc (GhcPass p)))] -> SDoc
- Retrie.GHC: ppr_cmd :: forall (p :: Pass). OutputableBndrId p => HsCmd (GhcPass p) -> SDoc
- Retrie.GHC: ppr_do_stmts :: forall (idL :: Pass) (idR :: Pass) body. (OutputableBndrId idL, OutputableBndrId idR, Outputable body) => [LStmtLR (GhcPass idL) (GhcPass idR) body] -> SDoc
- Retrie.GHC: ppr_expr :: forall (p :: Pass). OutputableBndrId p => HsExpr (GhcPass p) -> SDoc
- Retrie.GHC: ppr_infix_expr :: forall (p :: Pass). OutputableBndrId p => HsExpr (GhcPass p) -> Maybe SDoc
- Retrie.GHC: ppr_lcmd :: forall (p :: Pass). OutputableBndrId p => LHsCmd (GhcPass p) -> SDoc
- Retrie.GHC: ppr_lexpr :: forall (p :: Pass). OutputableBndrId p => LHsExpr (GhcPass p) -> SDoc
- Retrie.GHC: ppr_mbDoc :: Maybe LHsDocString -> SDoc
- Retrie.GHC: ppr_monobind :: forall (idL :: Pass) (idR :: Pass). (OutputableBndrId idL, OutputableBndrId idR) => HsBindLR (GhcPass idL) (GhcPass idR) -> SDoc
- Retrie.GHC: ppr_quasi :: OutputableBndr p => p -> p -> FastString -> SDoc
- Retrie.GHC: ppr_sig :: forall (p :: Pass). OutputableBndrId p => Sig (GhcPass p) -> SDoc
- Retrie.GHC: ppr_splice :: forall (p :: Pass). OutputableBndrId p => SDoc -> IdP (GhcPass p) -> LHsExpr (GhcPass p) -> SDoc -> SDoc
- Retrie.GHC: ppr_splice_decl :: forall (p :: Pass). OutputableBndrId p => HsSplice (GhcPass p) -> SDoc
- Retrie.GHC: pragBrackets :: SDoc -> SDoc
- Retrie.GHC: pragSrcBrackets :: SourceText -> String -> SDoc -> SDoc
- Retrie.GHC: rdrNameAmbiguousFieldOcc :: forall (p :: Pass). AmbiguousFieldOcc (GhcPass p) -> RdrName
- Retrie.GHC: replaceLWrappedName :: LIEWrappedName name1 -> name2 -> LIEWrappedName name2
- Retrie.GHC: replaceWrappedName :: IEWrappedName name1 -> name2 -> IEWrappedName name2
- Retrie.GHC: resultVariableName :: forall (a :: Pass). FamilyResultSig (GhcPass a) -> Maybe (IdP (GhcPass a))
- Retrie.GHC: roleAnnotDeclName :: forall (p :: Pass). RoleAnnotDecl (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: selectorAmbiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> Id
- Retrie.GHC: simpleImportDecl :: forall (p :: Pass). ModuleName -> ImportDecl (GhcPass p)
- Retrie.GHC: splitHsFunType :: LHsType GhcRn -> ([LHsType GhcRn], LHsType GhcRn)
- Retrie.GHC: splitLHsForAllTyInvis :: LHsType pass -> ([LHsTyVarBndr pass], LHsType pass)
- Retrie.GHC: splitLHsInstDeclTy :: LHsSigType GhcRn -> ([Name], LHsContext GhcRn, LHsType GhcRn)
- Retrie.GHC: splitLHsPatSynTy :: LHsType pass -> ([LHsTyVarBndr pass], LHsContext pass, [LHsTyVarBndr pass], LHsContext pass, LHsType pass)
- Retrie.GHC: splitLHsQualTy :: LHsType pass -> (LHsContext pass, LHsType pass)
- Retrie.GHC: splitLHsSigmaTyInvis :: LHsType pass -> ([LHsTyVarBndr pass], LHsContext pass, LHsType pass)
- Retrie.GHC: standaloneKindSigName :: forall (p :: Pass). StandaloneKindSig (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: tcdName :: forall (p :: Pass). TyClDecl (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: thBrackets :: SDoc -> SDoc -> SDoc
- Retrie.GHC: thTyBrackets :: SDoc -> SDoc
- Retrie.GHC: tupArgPresent :: LHsTupArg id -> Bool
- Retrie.GHC: tyClDeclLName :: forall (p :: Pass). TyClDecl (GhcPass p) -> Located (IdP (GhcPass p))
- Retrie.GHC: tyClDeclTyVars :: TyClDecl pass -> LHsQTyVars pass
- Retrie.GHC: tyClGroupInstDecls :: [TyClGroup pass] -> [LInstDecl pass]
- Retrie.GHC: tyClGroupKindSigs :: [TyClGroup pass] -> [LStandaloneKindSig pass]
- Retrie.GHC: tyClGroupRoleDecls :: [TyClGroup pass] -> [LRoleAnnotDecl pass]
- Retrie.GHC: tyClGroupTyClDecls :: [TyClGroup pass] -> [LTyClDecl pass]
- Retrie.GHC: tyFamInstDeclLName :: forall (p :: Pass). TyFamInstDecl (GhcPass p) -> Located (IdP (GhcPass p))
- Retrie.GHC: tyFamInstDeclName :: forall (p :: Pass). TyFamInstDecl (GhcPass p) -> IdP (GhcPass p)
- Retrie.GHC: type BangType pass = HsType pass
- Retrie.GHC: type CmdLStmt id = LStmt id LHsCmd id
- Retrie.GHC: type CmdStmt id = Stmt id LHsCmd id
- Retrie.GHC: type CmdSyntaxTable p = [(Name, HsExpr p)]
- Retrie.GHC: type ConvertIdX a b = (XHsDoublePrim a ~ XHsDoublePrim b, XHsFloatPrim a ~ XHsFloatPrim b, XHsRat a ~ XHsRat b, XHsInteger a ~ XHsInteger b, XHsWord64Prim a ~ XHsWord64Prim b, XHsInt64Prim a ~ XHsInt64Prim b, XHsWordPrim a ~ XHsWordPrim b, XHsIntPrim a ~ XHsIntPrim b, XHsInt a ~ XHsInt b, XHsStringPrim a ~ XHsStringPrim b, XHsString a ~ XHsString b, XHsCharPrim a ~ XHsCharPrim b, XHsChar a ~ XHsChar b, XXLit a ~ XXLit b)
- Retrie.GHC: type ExprLStmt id = LStmt id LHsExpr id
- Retrie.GHC: type ExprStmt id = Stmt id LHsExpr id
- Retrie.GHC: type FamInstEqn pass rhs = HsImplicitBndrs pass FamEqn pass rhs
- Retrie.GHC: type ForallXABExport (c :: Type -> Constraint) x = (c XABE x, c XXABExport x)
- Retrie.GHC: type ForallXAmbiguousFieldOcc (c :: Type -> Constraint) x = (c XUnambiguous x, c XAmbiguous x, c XXAmbiguousFieldOcc x)
- Retrie.GHC: type ForallXAnnDecl (c :: Type -> Constraint) x = (c XHsAnnotation x, c XXAnnDecl x)
- Retrie.GHC: type ForallXApplicativeArg (c :: Type -> Constraint) x = (c XApplicativeArgOne x, c XApplicativeArgMany x, c XXApplicativeArg x)
- Retrie.GHC: type ForallXBracket (c :: Type -> Constraint) x = (c XExpBr x, c XPatBr x, c XDecBrL x, c XDecBrG x, c XTypBr x, c XVarBr x, c XTExpBr x, c XXBracket x)
- Retrie.GHC: type ForallXClsInstDecl (c :: Type -> Constraint) x = (c XCClsInstDecl x, c XXClsInstDecl x)
- Retrie.GHC: type ForallXCmd (c :: Type -> Constraint) x = (c XCmdArrApp x, c XCmdArrForm x, c XCmdApp x, c XCmdLam x, c XCmdPar x, c XCmdCase x, c XCmdIf x, c XCmdLet x, c XCmdDo x, c XCmdWrap x, c XXCmd x)
- Retrie.GHC: type ForallXCmdTop (c :: Type -> Constraint) x = (c XCmdTop x, c XXCmdTop x)
- Retrie.GHC: type ForallXConDecl (c :: Type -> Constraint) x = (c XConDeclGADT x, c XConDeclH98 x, c XXConDecl x)
- Retrie.GHC: type ForallXConDeclField (c :: Type -> Constraint) x = (c XConDeclField x, c XXConDeclField x)
- Retrie.GHC: type ForallXDefaultDecl (c :: Type -> Constraint) x = (c XCDefaultDecl x, c XXDefaultDecl x)
- Retrie.GHC: type ForallXDerivDecl (c :: Type -> Constraint) x = (c XCDerivDecl x, c XXDerivDecl x)
- Retrie.GHC: type ForallXExpr (c :: Type -> Constraint) x = (c XVar x, c XUnboundVar x, c XConLikeOut x, c XRecFld x, c XOverLabel x, c XIPVar x, c XOverLitE x, c XLitE x, c XLam x, c XLamCase x, c XApp x, c XAppTypeE x, c XOpApp x, c XNegApp x, c XPar x, c XSectionL x, c XSectionR x, c XExplicitTuple x, c XExplicitSum x, c XCase x, c XIf x, c XMultiIf x, c XLet x, c XDo x, c XExplicitList x, c XRecordCon x, c XRecordUpd x, c XExprWithTySig x, c XArithSeq x, c XSCC x, c XCoreAnn x, c XBracket x, c XRnBracketOut x, c XTcBracketOut x, c XSpliceE x, c XProc x, c XStatic x, c XTick x, c XBinTick x, c XTickPragma x, c XWrap x, c XXExpr x)
- Retrie.GHC: type ForallXFamEqn (c :: Type -> Constraint) x r = (c XCFamEqn x r, c XXFamEqn x r)
- Retrie.GHC: type ForallXFamilyDecl (c :: Type -> Constraint) x = (c XCFamilyDecl x, c XXFamilyDecl x)
- Retrie.GHC: type ForallXFamilyResultSig (c :: Type -> Constraint) x = (c XNoSig x, c XCKindSig x, c XTyVarSig x, c XXFamilyResultSig x)
- Retrie.GHC: type ForallXFieldOcc (c :: Type -> Constraint) x = (c XCFieldOcc x, c XXFieldOcc x)
- Retrie.GHC: type ForallXFixitySig (c :: Type -> Constraint) x = (c XFixitySig x, c XXFixitySig x)
- Retrie.GHC: type ForallXForeignDecl (c :: Type -> Constraint) x = (c XForeignImport x, c XForeignExport x, c XXForeignDecl x)
- Retrie.GHC: type ForallXGRHS (c :: Type -> Constraint) x b = (c XCGRHS x b, c XXGRHS x b)
- Retrie.GHC: type ForallXGRHSs (c :: Type -> Constraint) x b = (c XCGRHSs x b, c XXGRHSs x b)
- Retrie.GHC: type ForallXHsBindsLR (c :: Type -> Constraint) x x' = (c XFunBind x x', c XPatBind x x', c XVarBind x x', c XAbsBinds x x', c XPatSynBind x x', c XXHsBindsLR x x')
- Retrie.GHC: type ForallXHsDataDefn (c :: Type -> Constraint) x = (c XCHsDataDefn x, c XXHsDataDefn x)
- Retrie.GHC: type ForallXHsDecl (c :: Type -> Constraint) x = (c XTyClD x, c XInstD x, c XDerivD x, c XValD x, c XSigD x, c XKindSigD x, c XDefD x, c XForD x, c XWarningD x, c XAnnD x, c XRuleD x, c XSpliceD x, c XDocD x, c XRoleAnnotD x, c XXHsDecl x)
- Retrie.GHC: type ForallXHsDerivingClause (c :: Type -> Constraint) x = (c XCHsDerivingClause x, c XXHsDerivingClause x)
- Retrie.GHC: type ForallXHsGroup (c :: Type -> Constraint) x = (c XCHsGroup x, c XXHsGroup x)
- Retrie.GHC: type ForallXHsIPBinds (c :: Type -> Constraint) x = (c XIPBinds x, c XXHsIPBinds x)
- Retrie.GHC: type ForallXHsImplicitBndrs (c :: Type -> Constraint) x b = (c XHsIB x b, c XXHsImplicitBndrs x b)
- Retrie.GHC: type ForallXHsLit (c :: Type -> Constraint) x = (c XHsChar x, c XHsCharPrim x, c XHsDoublePrim x, c XHsFloatPrim x, c XHsInt x, c XHsInt64Prim x, c XHsIntPrim x, c XHsInteger x, c XHsRat x, c XHsString x, c XHsStringPrim x, c XHsWord64Prim x, c XHsWordPrim x, c XXLit x)
- Retrie.GHC: type ForallXHsLocalBindsLR (c :: Type -> Constraint) x x' = (c XHsValBinds x x', c XHsIPBinds x x', c XEmptyLocalBinds x x', c XXHsLocalBindsLR x x')
- Retrie.GHC: type ForallXHsWildCardBndrs (c :: Type -> Constraint) x b = (c XHsWC x b, c XXHsWildCardBndrs x b)
- Retrie.GHC: type ForallXIE (c :: Type -> Constraint) x = (c XIEVar x, c XIEThingAbs x, c XIEThingAll x, c XIEThingWith x, c XIEModuleContents x, c XIEGroup x, c XIEDoc x, c XIEDocNamed x, c XXIE x)
- Retrie.GHC: type ForallXIPBind (c :: Type -> Constraint) x = (c XCIPBind x, c XXIPBind x)
- Retrie.GHC: type ForallXImportDecl (c :: Type -> Constraint) x = (c XCImportDecl x, c XXImportDecl x)
- Retrie.GHC: type ForallXInstDecl (c :: Type -> Constraint) x = (c XClsInstD x, c XDataFamInstD x, c XTyFamInstD x, c XXInstDecl x)
- Retrie.GHC: type ForallXLHsQTyVars (c :: Type -> Constraint) x = (c XHsQTvs x, c XXLHsQTyVars x)
- Retrie.GHC: type ForallXMatch (c :: Type -> Constraint) x b = (c XCMatch x b, c XXMatch x b)
- Retrie.GHC: type ForallXMatchGroup (c :: Type -> Constraint) x b = (c XMG x b, c XXMatchGroup x b)
- Retrie.GHC: type ForallXOverLit (c :: Type -> Constraint) x = (c XOverLit x, c XXOverLit x)
- Retrie.GHC: type ForallXParStmtBlock (c :: Type -> Constraint) x x' = (c XParStmtBlock x x', c XXParStmtBlock x x')
- Retrie.GHC: type ForallXPat (c :: Type -> Constraint) x = (c XWildPat x, c XVarPat x, c XLazyPat x, c XAsPat x, c XParPat x, c XBangPat x, c XListPat x, c XTuplePat x, c XSumPat x, c XViewPat x, c XSplicePat x, c XLitPat x, c XNPat x, c XNPlusKPat x, c XSigPat x, c XCoPat x, c XXPat x)
- Retrie.GHC: type ForallXPatSynBind (c :: Type -> Constraint) x x' = (c XPSB x x', c XXPatSynBind x x')
- Retrie.GHC: type ForallXRoleAnnotDecl (c :: Type -> Constraint) x = (c XCRoleAnnotDecl x, c XXRoleAnnotDecl x)
- Retrie.GHC: type ForallXRuleBndr (c :: Type -> Constraint) x = (c XCRuleBndr x, c XRuleBndrSig x, c XXRuleBndr x)
- Retrie.GHC: type ForallXRuleDecl (c :: Type -> Constraint) x = (c XHsRule x, c XXRuleDecl x)
- Retrie.GHC: type ForallXRuleDecls (c :: Type -> Constraint) x = (c XCRuleDecls x, c XXRuleDecls x)
- Retrie.GHC: type ForallXSig (c :: Type -> Constraint) x = (c XTypeSig x, c XPatSynSig x, c XClassOpSig x, c XIdSig x, c XFixSig x, c XInlineSig x, c XSpecSig x, c XSpecInstSig x, c XMinimalSig x, c XSCCFunSig x, c XCompleteMatchSig x, c XXSig x)
- Retrie.GHC: type ForallXSplice (c :: Type -> Constraint) x = (c XTypedSplice x, c XUntypedSplice x, c XQuasiQuote x, c XSpliced x, c XXSplice x)
- Retrie.GHC: type ForallXSpliceDecl (c :: Type -> Constraint) x = (c XSpliceDecl x, c XXSpliceDecl x)
- Retrie.GHC: type ForallXStmtLR (c :: Type -> Constraint) x x' b = (c XLastStmt x x' b, c XBindStmt x x' b, c XApplicativeStmt x x' b, c XBodyStmt x x' b, c XLetStmt x x' b, c XParStmt x x' b, c XTransStmt x x' b, c XRecStmt x x' b, c XXStmtLR x x' b)
- Retrie.GHC: type ForallXTupArg (c :: Type -> Constraint) x = (c XPresent x, c XMissing x, c XXTupArg x)
- Retrie.GHC: type ForallXTyClDecl (c :: Type -> Constraint) x = (c XFamDecl x, c XSynDecl x, c XDataDecl x, c XClassDecl x, c XXTyClDecl x)
- Retrie.GHC: type ForallXTyClGroup (c :: Type -> Constraint) x = (c XCTyClGroup x, c XXTyClGroup x)
- Retrie.GHC: type ForallXTyVarBndr (c :: Type -> Constraint) x = (c XUserTyVar x, c XKindedTyVar x, c XXTyVarBndr x)
- Retrie.GHC: type ForallXType (c :: Type -> Constraint) x = (c XForAllTy x, c XQualTy x, c XTyVar x, c XAppTy x, c XAppKindTy x, c XFunTy x, c XListTy x, c XTupleTy x, c XSumTy x, c XOpTy x, c XParTy x, c XIParamTy x, c XStarTy x, c XKindSig x, c XSpliceTy x, c XDocTy x, c XBangTy x, c XRecTy x, c XExplicitListTy x, c XExplicitTupleTy x, c XTyLit x, c XWildCardTy x, c XXType x)
- Retrie.GHC: type ForallXValBindsLR (c :: Type -> Constraint) x x' = (c XValBinds x x', c XXValBindsLR x x')
- Retrie.GHC: type ForallXWarnDecl (c :: Type -> Constraint) x = (c XWarning x, c XXWarnDecl x)
- Retrie.GHC: type ForallXWarnDecls (c :: Type -> Constraint) x = (c XWarnings x, c XXWarnDecls x)
- Retrie.GHC: type GhcPs = GhcPass 'Parsed
- Retrie.GHC: type GhcRn = GhcPass 'Renamed
- Retrie.GHC: type GhcTc = GhcPass 'Typechecked
- Retrie.GHC: type GhcTcId = GhcTc
- Retrie.GHC: type GhciLStmt id = LStmt id LHsExpr id
- Retrie.GHC: type GhciStmt id = Stmt id LHsExpr id
- Retrie.GHC: type GuardLStmt id = LStmt id LHsExpr id
- Retrie.GHC: type GuardStmt id = Stmt id LHsExpr id
- Retrie.GHC: type HsBind id = HsBindLR id id
- Retrie.GHC: type HsConDeclDetails pass = HsConDetails LBangType pass Located [LConDeclField pass]
- Retrie.GHC: type HsConPatDetails p = HsConDetails LPat p HsRecFields p LPat p
- Retrie.GHC: type HsContext pass = [LHsType pass]
- Retrie.GHC: type HsDeriving pass = Located [LHsDerivingClause pass]
- Retrie.GHC: type HsKind pass = HsType pass
- Retrie.GHC: type HsLocalBinds id = HsLocalBindsLR id id
- Retrie.GHC: type HsModule = HsModule GhcPs
- Retrie.GHC: type HsPatSynDetails arg = HsConDetails arg [RecordPatSynField arg]
- Retrie.GHC: type HsRecField p arg = HsRecField' FieldOcc p arg
- Retrie.GHC: type HsRecUpdField p = HsRecField' AmbiguousFieldOcc p LHsExpr p
- Retrie.GHC: type HsRecordBinds p = HsRecFields p LHsExpr p
- Retrie.GHC: type HsTyPats pass = [LHsTypeArg pass]
- Retrie.GHC: type HsValBinds id = HsValBindsLR id id
- Retrie.GHC: type InPat p = LPat p
- Retrie.GHC: type LAnnDecl pass = Located AnnDecl pass
- Retrie.GHC: type LBangType pass = Located BangType pass
- Retrie.GHC: type LClsInstDecl pass = Located ClsInstDecl pass
- Retrie.GHC: type LConDecl pass = Located ConDecl pass
- Retrie.GHC: type LConDeclField pass = Located ConDeclField pass
- Retrie.GHC: type LDataFamInstDecl pass = Located DataFamInstDecl pass
- Retrie.GHC: type LDefaultDecl pass = Located DefaultDecl pass
- Retrie.GHC: type LDerivDecl pass = Located DerivDecl pass
- Retrie.GHC: type LDerivStrategy pass = Located DerivStrategy pass
- Retrie.GHC: type LDocDecl = Located DocDecl
- Retrie.GHC: type LFamInstEqn pass rhs = Located FamInstEqn pass rhs
- Retrie.GHC: type LFamilyDecl pass = Located FamilyDecl pass
- Retrie.GHC: type LFamilyResultSig pass = Located FamilyResultSig pass
- Retrie.GHC: type LFieldOcc pass = Located FieldOcc pass
- Retrie.GHC: type LFixitySig pass = Located FixitySig pass
- Retrie.GHC: type LForeignDecl pass = Located ForeignDecl pass
- Retrie.GHC: type LGRHS id body = Located GRHS id body
- Retrie.GHC: type LHsBind id = LHsBindLR id id
- Retrie.GHC: type LHsBindLR idL idR = Located HsBindLR idL idR
- Retrie.GHC: type LHsBinds id = LHsBindsLR id id
- Retrie.GHC: type LHsBindsLR idL idR = Bag LHsBindLR idL idR
- Retrie.GHC: type LHsCmd id = Located HsCmd id
- Retrie.GHC: type LHsCmdTop p = Located HsCmdTop p
- Retrie.GHC: type LHsContext pass = Located HsContext pass
- Retrie.GHC: type LHsDecl p = Located HsDecl p
- Retrie.GHC: type LHsDerivingClause pass = Located HsDerivingClause pass
- Retrie.GHC: type LHsDocString = Located HsDocString
- Retrie.GHC: type LHsExpr p = Located HsExpr p
- Retrie.GHC: type LHsFunDep pass = Located FunDep Located IdP pass
- Retrie.GHC: type LHsKind pass = Located HsKind pass
- Retrie.GHC: type LHsLocalBinds id = Located HsLocalBinds id
- Retrie.GHC: type LHsLocalBindsLR idL idR = Located HsLocalBindsLR idL idR
- Retrie.GHC: type LHsRecField p arg = Located HsRecField p arg
- Retrie.GHC: type LHsRecField' p arg = Located HsRecField' p arg
- Retrie.GHC: type LHsRecUpdField p = Located HsRecUpdField p
- Retrie.GHC: type LHsSigType pass = HsImplicitBndrs pass LHsType pass
- Retrie.GHC: type LHsSigWcType pass = HsWildCardBndrs pass LHsSigType pass
- Retrie.GHC: type LHsTupArg id = Located HsTupArg id
- Retrie.GHC: type LHsTyVarBndr pass = Located HsTyVarBndr pass
- Retrie.GHC: type LHsType pass = Located HsType pass
- Retrie.GHC: type LHsTypeArg p = HsArg LHsType p LHsKind p
- Retrie.GHC: type LHsWcType pass = HsWildCardBndrs pass LHsType pass
- Retrie.GHC: type LIE pass = Located IE pass
- Retrie.GHC: type LIEWrappedName name = Located IEWrappedName name
- Retrie.GHC: type LIPBind id = Located IPBind id
- Retrie.GHC: type LIdP p = Located IdP p
- Retrie.GHC: type LImportDecl pass = Located ImportDecl pass
- Retrie.GHC: type LInjectivityAnn pass = Located InjectivityAnn pass
- Retrie.GHC: type LInstDecl pass = Located InstDecl pass
- Retrie.GHC: type LMatch id body = Located Match id body
- Retrie.GHC: type LPat p = XRec p Pat
- Retrie.GHC: type LRoleAnnotDecl pass = Located RoleAnnotDecl pass
- Retrie.GHC: type LRuleBndr pass = Located RuleBndr pass
- Retrie.GHC: type LRuleDecl pass = Located RuleDecl pass
- Retrie.GHC: type LRuleDecls pass = Located RuleDecls pass
- Retrie.GHC: type LSig pass = Located Sig pass
- Retrie.GHC: type LSpliceDecl pass = Located SpliceDecl pass
- Retrie.GHC: type LStandaloneKindSig pass = Located StandaloneKindSig pass
- Retrie.GHC: type LStmt id body = Located StmtLR id id body
- Retrie.GHC: type LStmtLR idL idR body = Located StmtLR idL idR body
- Retrie.GHC: type LTcSpecPrag = Located TcSpecPrag
- Retrie.GHC: type LTyClDecl pass = Located TyClDecl pass
- Retrie.GHC: type LTyFamDefltDecl pass = Located TyFamDefltDecl pass
- Retrie.GHC: type LTyFamInstDecl pass = Located TyFamInstDecl pass
- Retrie.GHC: type LTyFamInstEqn pass = Located TyFamInstEqn pass
- Retrie.GHC: type LWarnDecl pass = Located WarnDecl pass
- Retrie.GHC: type LWarnDecls pass = Located WarnDecls pass
- Retrie.GHC: type OutPat p = LPat p
- Retrie.GHC: type OutputableBndrId (pass :: Pass) = (OutputableBndr NameOrRdrName IdP GhcPass pass, OutputableBndr IdP GhcPass pass, OutputableBndr NameOrRdrName IdP NoGhcTc GhcPass pass, OutputableBndr IdP NoGhcTc GhcPass pass, NoGhcTc GhcPass pass ~ NoGhcTc NoGhcTc GhcPass pass, OutputableX GhcPass pass, OutputableX NoGhcTc GhcPass pass)
- Retrie.GHC: type OutputableX p = (Outputable XIPBinds p, Outputable XViaStrategy p, Outputable XViaStrategy GhcRn)
- Retrie.GHC: type PostTcExpr = HsExpr GhcTc
- Retrie.GHC: type PostTcTable = [(Name, PostTcExpr)]
- Retrie.GHC: type SplicePointName = Name
- Retrie.GHC: type Stmt id body = StmtLR id id body
- Retrie.GHC: type TyFamDefltDecl = TyFamInstDecl
- Retrie.GHC: type TyFamInstEqn pass = FamInstEqn pass LHsType pass
- Retrie.GHC: type family NameOrRdrName id
- Retrie.GHC: typeToLHsType :: Type -> LHsType GhcPs
- Retrie.GHC: unambiguousFieldOcc :: AmbiguousFieldOcc GhcTc -> FieldOcc GhcTc
- Retrie.GHC: unboundVarOcc :: UnboundVar -> OccName
- Retrie.GHC: unguardedGRHSs :: forall body (p :: Pass). Located (body (GhcPass p)) -> GRHSs (GhcPass p) (Located (body (GhcPass p)))
- Retrie.GHC: unguardedRHS :: forall body (p :: Pass). SrcSpan -> Located (body (GhcPass p)) -> [LGRHS (GhcPass p) (Located (body (GhcPass p)))]
- Retrie.GHC: unitRecStmtTc :: RecStmtTc
- Retrie.GHC: unpackHDS :: HsDocString -> String
- Retrie.GHC: unqualQuasiQuote :: RdrName
- Retrie.PatternMap.Class: type family Key m :: Type;
- Retrie.PatternMap.Instances: instance Retrie.PatternMap.Instances.RecordFieldToRdrName (GHC.Hs.Types.AmbiguousFieldOcc GHC.Hs.Extension.GhcPs)
- Retrie.PatternMap.Instances: instance Retrie.PatternMap.Instances.RecordFieldToRdrName (GHC.Hs.Types.FieldOcc p)
- Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Hs.Expr.LHsExpr GHC.Hs.Extension.GhcPs)
- Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Hs.Expr.LStmt GHC.Hs.Extension.GhcPs (GHC.Hs.Expr.LHsExpr GHC.Hs.Extension.GhcPs))
- Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Hs.Types.LHsType GHC.Hs.Extension.GhcPs)
- Retrie.Universe: instance Retrie.Universe.Matchable (SrcLoc.Located (GHC.Hs.Pat.Pat GHC.Hs.Extension.GhcPs))
+ Retrie: type LibDir = FilePath
+ Retrie.ExactPrint: WithWhere :: WithWhere
+ Retrie.ExactPrint: WithoutWhere :: WithWhere
+ Retrie.ExactPrint: addComma :: SrcSpanAnnA -> SrcSpanAnnA
+ Retrie.ExactPrint: addEpAnnLoc :: AddEpAnn -> EpaLocation
+ Retrie.ExactPrint: adjustDeltaForOffset :: LayoutStartCol -> DeltaPos -> DeltaPos
+ Retrie.ExactPrint: anchorEof :: ParsedSource -> ParsedSource
+ Retrie.ExactPrint: anchorToEpaLocation :: Anchor -> EpaLocation
+ Retrie.ExactPrint: badRealSrcSpan :: RealSrcSpan
+ Retrie.ExactPrint: balanceCommentsList :: forall (m :: Type -> Type). Monad m => [LHsDecl GhcPs] -> TransformT m [LHsDecl GhcPs]
+ Retrie.ExactPrint: balanceCommentsList' :: forall (m :: Type -> Type) a. Monad m => [LocatedA a] -> TransformT m [LocatedA a]
+ Retrie.ExactPrint: captureLineSpacing :: Monoid t => [LocatedAn t e] -> [LocatedAn t e]
+ Retrie.ExactPrint: captureMatchLineSpacing :: LHsDecl GhcPs -> LHsDecl GhcPs
+ Retrie.ExactPrint: captureTypeSigSpacing :: LHsDecl GhcPs -> LHsDecl GhcPs
+ Retrie.ExactPrint: class Typeable a => ExactPrint a
+ Retrie.ExactPrint: cmpComments :: Comment -> Comment -> Ordering
+ Retrie.ExactPrint: comment2LEpaComment :: Comment -> LEpaComment
+ Retrie.ExactPrint: d0 :: EpaLocation
+ Retrie.ExactPrint: d1 :: EpaLocation
+ Retrie.ExactPrint: data WithWhere
+ Retrie.ExactPrint: debug :: c -> String -> c
+ Retrie.ExactPrint: debugEnabledFlag :: Bool
+ Retrie.ExactPrint: debugM :: Monad m => String -> m ()
+ Retrie.ExactPrint: debugP :: String -> c -> c
+ Retrie.ExactPrint: debugPEnabledFlag :: Bool
+ Retrie.ExactPrint: dn :: Int -> EpaLocation
+ Retrie.ExactPrint: dpFromString :: String -> DeltaPos
+ Retrie.ExactPrint: exact :: forall (m :: Type -> Type) w. (ExactPrint a, Monad m, Monoid w) => a -> EP w m a
+ Retrie.ExactPrint: getAnnotationEntry :: ExactPrint a => a -> Entry
+ Retrie.ExactPrint: ghcCommentText :: LEpaComment -> String
+ Retrie.ExactPrint: hackAnchorToSrcSpan :: Anchor -> SrcSpan
+ Retrie.ExactPrint: hackSrcSpanToAnchor :: SrcSpan -> Anchor
+ Retrie.ExactPrint: insertAt :: HasDecls ast => (LHsDecl GhcPs -> [LHsDecl GhcPs] -> [LHsDecl GhcPs]) -> ast -> LHsDecl GhcPs -> Transform ast
+ Retrie.ExactPrint: insertCppComments :: ParsedSource -> [LEpaComment] -> ParsedSource
+ Retrie.ExactPrint: isGadt :: forall (p :: Pass). [LConDecl (GhcPass p)] -> Bool
+ Retrie.ExactPrint: isGoodDelta :: DeltaPos -> Bool
+ Retrie.ExactPrint: isKWComment :: Comment -> Bool
+ Retrie.ExactPrint: isPointSrcSpan :: RealSrcSpan -> Bool
+ Retrie.ExactPrint: locatedAnAnchor :: LocatedAn a t -> RealSrcSpan
+ Retrie.ExactPrint: m0 :: AnchorOperation
+ Retrie.ExactPrint: m1 :: AnchorOperation
+ Retrie.ExactPrint: makeDeltaAst :: ExactPrint ast => ast -> ast
+ Retrie.ExactPrint: makeDeltaAst' :: Data a => a -> a
+ Retrie.ExactPrint: mkComment :: String -> Anchor -> RealSrcSpan -> Comment
+ Retrie.ExactPrint: mkEpaComments :: [Comment] -> [Comment] -> EpAnnComments
+ Retrie.ExactPrint: mkKWComment :: AnnKeywordId -> EpaLocation -> Comment
+ Retrie.ExactPrint: mkLEpaComment :: String -> Anchor -> RealSrcSpan -> LEpaComment
+ Retrie.ExactPrint: mn :: Int -> AnchorOperation
+ Retrie.ExactPrint: moveAnchor :: Monoid b => SrcAnn a -> SrcAnn b
+ Retrie.ExactPrint: name2String :: Name -> String
+ Retrie.ExactPrint: noAnnSrcSpanDP :: Monoid ann => SrcSpan -> DeltaPos -> SrcSpanAnn' (EpAnn ann)
+ Retrie.ExactPrint: noAnnSrcSpanDP0 :: Monoid ann => SrcSpan -> SrcSpanAnn' (EpAnn ann)
+ Retrie.ExactPrint: noAnnSrcSpanDP1 :: Monoid ann => SrcSpan -> SrcSpanAnn' (EpAnn ann)
+ Retrie.ExactPrint: noAnnSrcSpanDPn :: Monoid ann => SrcSpan -> Int -> SrcSpanAnn' (EpAnn ann)
+ Retrie.ExactPrint: noKWComments :: [Comment] -> [Comment]
+ Retrie.ExactPrint: normaliseCommentText :: String -> String
+ Retrie.ExactPrint: orderByKey :: [(RealSrcSpan, a)] -> [RealSrcSpan] -> [(RealSrcSpan, a)]
+ Retrie.ExactPrint: pos2delta :: Pos -> Pos -> DeltaPos
+ Retrie.ExactPrint: range2rs :: (Pos, Pos) -> RealSrcSpan
+ Retrie.ExactPrint: rdrName2String :: RdrName -> String
+ Retrie.ExactPrint: rs :: SrcSpan -> RealSrcSpan
+ Retrie.ExactPrint: rs2range :: RealSrcSpan -> (Pos, Pos)
+ Retrie.ExactPrint: setAnchorAn :: Monoid an => LocatedAn an a -> Anchor -> EpAnnComments -> LocatedAn an a
+ Retrie.ExactPrint: setAnchorEpa :: Monoid an => EpAnn an -> Anchor -> EpAnnComments -> EpAnn an
+ Retrie.ExactPrint: setAnchorEpaL :: EpAnn AnnList -> Anchor -> EpAnnComments -> EpAnn AnnList
+ Retrie.ExactPrint: setAnchorHsModule :: HsModule -> Anchor -> EpAnnComments -> HsModule
+ Retrie.ExactPrint: setAnnotationAnchor :: ExactPrint a => a -> Anchor -> EpAnnComments -> a
+ Retrie.ExactPrint: setTrailingAnnLoc :: TrailingAnn -> EpaLocation -> TrailingAnn
+ Retrie.ExactPrint: showAst :: Data a => a -> String
+ Retrie.ExactPrint: sortAnchorLocated :: [GenLocated Anchor a] -> [GenLocated Anchor a]
+ Retrie.ExactPrint: sortComments :: [Comment] -> [Comment]
+ Retrie.ExactPrint: sortEpaComments :: [LEpaComment] -> [LEpaComment]
+ Retrie.ExactPrint: spanLength :: RealSrcSpan -> Int
+ Retrie.ExactPrint: ss2delta :: Pos -> RealSrcSpan -> DeltaPos
+ Retrie.ExactPrint: ss2deltaEnd :: RealSrcSpan -> RealSrcSpan -> DeltaPos
+ Retrie.ExactPrint: ss2deltaStart :: RealSrcSpan -> RealSrcSpan -> DeltaPos
+ Retrie.ExactPrint: ss2pos :: RealSrcSpan -> Pos
+ Retrie.ExactPrint: ss2posEnd :: RealSrcSpan -> Pos
+ Retrie.ExactPrint: ss2range :: SrcSpan -> (Pos, Pos)
+ Retrie.ExactPrint: tokComment :: LEpaComment -> Comment
+ Retrie.ExactPrint: trailingAnnLoc :: TrailingAnn -> EpaLocation
+ Retrie.ExactPrint: trailingAnnToAddEpAnn :: TrailingAnn -> AddEpAnn
+ Retrie.ExactPrint: transferAnchor :: LocatedA a -> LocatedA b -> LocatedA b
+ Retrie.ExactPrint: transferEntryDP' :: forall (m :: Type -> Type). Monad m => LHsDecl GhcPs -> LHsDecl GhcPs -> TransformT m (LHsDecl GhcPs)
+ Retrie.ExactPrint: type LibDir = FilePath
+ Retrie.ExactPrint: undelta :: Pos -> DeltaPos -> LayoutStartCol -> Pos
+ Retrie.ExactPrint: undeltaSpan :: RealSrcSpan -> AnnKeywordId -> DeltaPos -> AddEpAnn
+ Retrie.ExactPrint: warn :: c -> String -> c
+ Retrie.ExactPrint.Annotated: instance Data.Data.Data ast => Data.Data.Data (Retrie.ExactPrint.Annotated.Annotated ast)
+ Retrie.ExactPrint.Annotated: printA' :: (Data ast, ExactPrint ast) => Annotated ast -> String
+ Retrie.ExactPrint.Annotated: setEntryDPA :: Monoid an => Annotated (LocatedAn an ast) -> DeltaPos -> Annotated (LocatedAn an ast)
+ Retrie.ExactPrint.Annotated: showAstA :: (Data ast, ExactPrint ast) => Annotated ast -> String
+ Retrie.Expr: mkLocA :: (Data e, Monad m, Monoid an) => DeltaPos -> e -> TransformT m (LocatedAn an e)
+ Retrie.GHC: ActiveAfter :: SourceText -> PhaseNum -> Activation
+ Retrie.GHC: ActiveBefore :: SourceText -> PhaseNum -> Activation
+ Retrie.GHC: AlwaysActive :: Activation
+ Retrie.GHC: AlwaysTailCalled :: JoinArity -> TailCallInfo
+ Retrie.GHC: Boxed :: Boxity
+ Retrie.GHC: BoxedTuple :: TupleSort
+ Retrie.GHC: CLeft :: LeftOrRight
+ Retrie.GHC: CRight :: LeftOrRight
+ Retrie.GHC: ConLike :: RuleMatchInfo
+ Retrie.GHC: ConstraintTuple :: TupleSort
+ Retrie.GHC: Failed :: SuccessFlag
+ Retrie.GHC: FinalActive :: Activation
+ Retrie.GHC: FinalPhase :: CompilerPhase
+ Retrie.GHC: FromSource :: Origin
+ Retrie.GHC: FunLike :: RuleMatchInfo
+ Retrie.GHC: Generated :: Origin
+ Retrie.GHC: GenericDM :: ty -> DefMethSpec ty
+ Retrie.GHC: IAmALoopBreaker :: !RulesOnly -> !TailCallInfo -> OccInfo
+ Retrie.GHC: IAmDead :: OccInfo
+ Retrie.GHC: Incoherent :: SourceText -> OverlapMode
+ Retrie.GHC: InitialPhase :: CompilerPhase
+ Retrie.GHC: Inlinable :: InlineSpec
+ Retrie.GHC: Inline :: InlineSpec
+ Retrie.GHC: InlinePragma :: SourceText -> InlineSpec -> Maybe Arity -> Activation -> RuleMatchInfo -> InlinePragma
+ Retrie.GHC: IsData :: FunctionOrData
+ Retrie.GHC: IsFunction :: FunctionOrData
+ Retrie.GHC: IsInsideLam :: InsideLam
+ Retrie.GHC: IsInteresting :: InterestingCxt
+ Retrie.GHC: IsPromoted :: PromotionFlag
+ Retrie.GHC: IsSwapped :: SwapFlag
+ Retrie.GHC: KindLevel :: TypeOrKind
+ Retrie.GHC: LangAsm :: ForeignSrcLang
+ Retrie.GHC: LangC :: ForeignSrcLang
+ Retrie.GHC: LangCxx :: ForeignSrcLang
+ Retrie.GHC: LangObjc :: ForeignSrcLang
+ Retrie.GHC: LangObjcxx :: ForeignSrcLang
+ Retrie.GHC: ManyOccs :: !TailCallInfo -> OccInfo
+ Retrie.GHC: NeverActive :: Activation
+ Retrie.GHC: NoInline :: InlineSpec
+ Retrie.GHC: NoOneShotInfo :: OneShotInfo
+ Retrie.GHC: NoOverlap :: SourceText -> OverlapMode
+ Retrie.GHC: NoTailCallInfo :: TailCallInfo
+ Retrie.GHC: NoUserInlinePrag :: InlineSpec
+ Retrie.GHC: NonRecursive :: RecFlag
+ Retrie.GHC: NotInsideLam :: InsideLam
+ Retrie.GHC: NotInteresting :: InterestingCxt
+ Retrie.GHC: NotPromoted :: PromotionFlag
+ Retrie.GHC: NotSwapped :: SwapFlag
+ Retrie.GHC: NotTopLevel :: TopLevelFlag
+ Retrie.GHC: OneOcc :: !InsideLam -> {-# UNPACK #-} !BranchCount -> !InterestingCxt -> !TailCallInfo -> OccInfo
+ Retrie.GHC: OneShotLam :: OneShotInfo
+ Retrie.GHC: OverlapFlag :: OverlapMode -> Bool -> OverlapFlag
+ Retrie.GHC: Overlappable :: SourceText -> OverlapMode
+ Retrie.GHC: Overlapping :: SourceText -> OverlapMode
+ Retrie.GHC: Overlaps :: SourceText -> OverlapMode
+ Retrie.GHC: Phase :: PhaseNum -> CompilerPhase
+ Retrie.GHC: PprPrec :: Int -> PprPrec
+ Retrie.GHC: RawObject :: ForeignSrcLang
+ Retrie.GHC: Recursive :: RecFlag
+ Retrie.GHC: Succeeded :: SuccessFlag
+ Retrie.GHC: TopLevel :: TopLevelFlag
+ Retrie.GHC: TypeLevel :: TypeOrKind
+ Retrie.GHC: Unboxed :: Boxity
+ Retrie.GHC: UnboxedTuple :: TupleSort
+ Retrie.GHC: VanillaDM :: DefMethSpec ty
+ Retrie.GHC: [inl_act] :: InlinePragma -> Activation
+ Retrie.GHC: [inl_inline] :: InlinePragma -> InlineSpec
+ Retrie.GHC: [inl_rule] :: InlinePragma -> RuleMatchInfo
+ Retrie.GHC: [inl_sat] :: InlinePragma -> Maybe Arity
+ Retrie.GHC: [inl_src] :: InlinePragma -> SourceText
+ Retrie.GHC: [isSafeOverlap] :: OverlapFlag -> Bool
+ Retrie.GHC: [occ_in_lam] :: OccInfo -> !InsideLam
+ Retrie.GHC: [occ_int_cxt] :: OccInfo -> !InterestingCxt
+ Retrie.GHC: [occ_n_br] :: OccInfo -> {-# UNPACK #-} !BranchCount
+ Retrie.GHC: [occ_rules_only] :: OccInfo -> !RulesOnly
+ Retrie.GHC: [occ_tail] :: OccInfo -> !TailCallInfo
+ Retrie.GHC: [overlapMode] :: OverlapFlag -> OverlapMode
+ Retrie.GHC: activateAfterInitial :: Activation
+ Retrie.GHC: activateDuringFinal :: Activation
+ Retrie.GHC: activeInFinalPhase :: Activation -> Bool
+ Retrie.GHC: alignmentOf :: Int -> Alignment
+ Retrie.GHC: alwaysInlinePragma :: InlinePragma
+ Retrie.GHC: appPrec :: PprPrec
+ Retrie.GHC: bestOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo
+ Retrie.GHC: boolToRecFlag :: Bool -> RecFlag
+ Retrie.GHC: boxityTupleSort :: Boxity -> TupleSort
+ Retrie.GHC: competesWith :: Activation -> Activation -> Bool
+ Retrie.GHC: data Activation
+ Retrie.GHC: data Alignment
+ Retrie.GHC: data Boxity
+ Retrie.GHC: data CompilerPhase
+ Retrie.GHC: data DefMethSpec ty
+ Retrie.GHC: data ForeignSrcLang
+ Retrie.GHC: data FunctionOrData
+ Retrie.GHC: data InlinePragma
+ Retrie.GHC: data InlineSpec
+ Retrie.GHC: data InsideLam
+ Retrie.GHC: data IntWithInf
+ Retrie.GHC: data InterestingCxt
+ Retrie.GHC: data LeftOrRight
+ Retrie.GHC: data OccInfo
+ Retrie.GHC: data OneShotInfo
+ Retrie.GHC: data Origin
+ Retrie.GHC: data OverlapFlag
+ Retrie.GHC: data OverlapMode
+ Retrie.GHC: data PromotionFlag
+ Retrie.GHC: data RecFlag
+ Retrie.GHC: data RuleMatchInfo
+ Retrie.GHC: data SuccessFlag
+ Retrie.GHC: data SwapFlag
+ Retrie.GHC: data TailCallInfo
+ Retrie.GHC: data TopLevelFlag
+ Retrie.GHC: data TupleSort
+ Retrie.GHC: data TypeOrKind
+ Retrie.GHC: defaultInlinePragma :: InlinePragma
+ Retrie.GHC: dfunInlinePragma :: InlinePragma
+ Retrie.GHC: fIRST_TAG :: ConTag
+ Retrie.GHC: failed :: SuccessFlag -> Bool
+ Retrie.GHC: flipSwap :: SwapFlag -> SwapFlag
+ Retrie.GHC: fromEP :: EP a -> a
+ Retrie.GHC: funPrec :: PprPrec
+ Retrie.GHC: hasIncoherentFlag :: OverlapMode -> Bool
+ Retrie.GHC: hasNoOneShotInfo :: OneShotInfo -> Bool
+ Retrie.GHC: hasOverlappableFlag :: OverlapMode -> Bool
+ Retrie.GHC: hasOverlappingFlag :: OverlapMode -> Bool
+ Retrie.GHC: infinity :: IntWithInf
+ Retrie.GHC: inlinePragmaActivation :: InlinePragma -> Activation
+ Retrie.GHC: inlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo
+ Retrie.GHC: inlinePragmaSat :: InlinePragma -> Maybe Arity
+ Retrie.GHC: inlinePragmaSpec :: InlinePragma -> InlineSpec
+ Retrie.GHC: intGtLimit :: Int -> IntWithInf -> Bool
+ Retrie.GHC: isActive :: CompilerPhase -> Activation -> Bool
+ Retrie.GHC: isAlwaysActive :: Activation -> Bool
+ Retrie.GHC: isAlwaysTailCalled :: OccInfo -> Bool
+ Retrie.GHC: isAnyInlinePragma :: InlinePragma -> Bool
+ Retrie.GHC: isBoxed :: Boxity -> Bool
+ Retrie.GHC: isConLike :: RuleMatchInfo -> Bool
+ Retrie.GHC: isDeadOcc :: OccInfo -> Bool
+ Retrie.GHC: isDefaultInlinePragma :: InlinePragma -> Bool
+ Retrie.GHC: isFunLike :: RuleMatchInfo -> Bool
+ Retrie.GHC: isGenerated :: Origin -> Bool
+ Retrie.GHC: isInlinablePragma :: InlinePragma -> Bool
+ Retrie.GHC: isInlinePragma :: InlinePragma -> Bool
+ Retrie.GHC: isKindLevel :: TypeOrKind -> Bool
+ Retrie.GHC: isManyOccs :: OccInfo -> Bool
+ Retrie.GHC: isNeverActive :: Activation -> Bool
+ Retrie.GHC: isNoOccInfo :: OccInfo -> Bool
+ Retrie.GHC: isNonRec :: RecFlag -> Bool
+ Retrie.GHC: isNotTopLevel :: TopLevelFlag -> Bool
+ Retrie.GHC: isOneOcc :: OccInfo -> Bool
+ Retrie.GHC: isOneShotInfo :: OneShotInfo -> Bool
+ Retrie.GHC: isPromoted :: PromotionFlag -> Bool
+ Retrie.GHC: isRec :: RecFlag -> Bool
+ Retrie.GHC: isStrongLoopBreaker :: OccInfo -> Bool
+ Retrie.GHC: isSwapped :: SwapFlag -> Bool
+ Retrie.GHC: isTopLevel :: TopLevelFlag -> Bool
+ Retrie.GHC: isTypeLevel :: TypeOrKind -> Bool
+ Retrie.GHC: isWeakLoopBreaker :: OccInfo -> Bool
+ Retrie.GHC: maybeParen :: PprPrec -> PprPrec -> SDoc -> SDoc
+ Retrie.GHC: mkAlignment :: Int -> Alignment
+ Retrie.GHC: mkIntWithInf :: Int -> IntWithInf
+ Retrie.GHC: neverInlinePragma :: InlinePragma
+ Retrie.GHC: newtype PprPrec
+ Retrie.GHC: noOccInfo :: OccInfo
+ Retrie.GHC: noOneShotInfo :: OneShotInfo
+ Retrie.GHC: noUserInlineSpec :: InlineSpec -> Bool
+ Retrie.GHC: oneBranch :: BranchCount
+ Retrie.GHC: opPrec :: PprPrec
+ Retrie.GHC: pickLR :: LeftOrRight -> (a, a) -> a
+ Retrie.GHC: pprAlternative :: (a -> SDoc) -> a -> ConTag -> Arity -> SDoc
+ Retrie.GHC: pprInline :: InlinePragma -> SDoc
+ Retrie.GHC: pprInlineDebug :: InlinePragma -> SDoc
+ Retrie.GHC: pprRuleName :: RuleName -> SDoc
+ Retrie.GHC: seqOccInfo :: OccInfo -> ()
+ Retrie.GHC: setInlinePragmaActivation :: InlinePragma -> Activation -> InlinePragma
+ Retrie.GHC: setInlinePragmaRuleMatchInfo :: InlinePragma -> RuleMatchInfo -> InlinePragma
+ Retrie.GHC: setOverlapModeMaybe :: OverlapFlag -> Maybe OverlapMode -> OverlapFlag
+ Retrie.GHC: sigPrec :: PprPrec
+ Retrie.GHC: starPrec :: PprPrec
+ Retrie.GHC: strongLoopBreaker :: OccInfo
+ Retrie.GHC: succeeded :: SuccessFlag -> Bool
+ Retrie.GHC: successIf :: Bool -> SuccessFlag
+ Retrie.GHC: sumParens :: SDoc -> SDoc
+ Retrie.GHC: tailCallInfo :: OccInfo -> TailCallInfo
+ Retrie.GHC: toEP :: EP a -> a
+ Retrie.GHC: topPrec :: PprPrec
+ Retrie.GHC: treatZeroAsInf :: Int -> IntWithInf
+ Retrie.GHC: tupleParens :: TupleSort -> SDoc -> SDoc
+ Retrie.GHC: tupleSortBoxity :: TupleSort -> Boxity
+ Retrie.GHC: type Arity = Int
+ Retrie.GHC: type BranchCount = Int
+ Retrie.GHC: type ConTag = Int
+ Retrie.GHC: type ConTagZ = Int
+ Retrie.GHC: type FullArgCount = Int
+ Retrie.GHC: type JoinArity = Int
+ Retrie.GHC: type PhaseNum = Int
+ Retrie.GHC: type RepArity = Int
+ Retrie.GHC: type RuleName = FastString
+ Retrie.GHC: unSwap :: SwapFlag -> (a -> a -> b) -> a -> a -> b
+ Retrie.GHC: weakLoopBreaker :: OccInfo
+ Retrie.GHC: worstOneShot :: OneShotInfo -> OneShotInfo -> OneShotInfo
+ Retrie.GHC: zapFragileOcc :: OccInfo -> OccInfo
+ Retrie.GHC: zapOccTailCallInfo :: OccInfo -> OccInfo
+ Retrie.PatternMap.Class: type Key m :: Type;
+ Retrie.PatternMap.Instances: fieldsToRdrNamesUpd :: Either [LHsRecUpdField GhcPs] [LHsRecUpdProj GhcPs] -> [LHsRecField' GhcPs RdrName (LHsExpr GhcPs)]
+ Retrie.PatternMap.Instances: instance Retrie.PatternMap.Instances.RecordFieldToRdrName (Language.Haskell.Syntax.Expr.FieldLabelStrings GHC.Hs.Extension.GhcPs)
+ Retrie.PatternMap.Instances: instance Retrie.PatternMap.Instances.RecordFieldToRdrName (Language.Haskell.Syntax.Type.AmbiguousFieldOcc GHC.Hs.Extension.GhcPs)
+ Retrie.PatternMap.Instances: instance Retrie.PatternMap.Instances.RecordFieldToRdrName (Language.Haskell.Syntax.Type.FieldOcc p)
+ Retrie.PatternMap.Instances: splitVisBinders :: HsForAllTelescope GhcPs -> (Bool, [(RdrName, Maybe (LHsKind GhcPs))])
+ Retrie.Quantifiers: instance GHC.Show.Show Retrie.Quantifiers.Quantifiers
+ Retrie.Replace: instance GHC.Show.Show Retrie.Replace.Replacement
+ Retrie.SYB: mkConstrTag :: DataType -> String -> Int -> [String] -> Fixity -> Constr
+ Retrie.SYB: trLiftedRep :: TypeRep ('BoxedRep 'Lifted)
+ Retrie.Types: instance (Data.Data.Data (Retrie.ExactPrint.Annotated.Annotated ast), GHC.Show.Show ast, GHC.Show.Show v) => GHC.Show.Show (Retrie.Types.Query ast v)
+ Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Parser.Annotation.LocatedA (Language.Haskell.Syntax.Expr.HsExpr GHC.Hs.Extension.GhcPs))
+ Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Parser.Annotation.LocatedA (Language.Haskell.Syntax.Expr.Stmt GHC.Hs.Extension.GhcPs (GHC.Parser.Annotation.LocatedA (Language.Haskell.Syntax.Expr.HsExpr GHC.Hs.Extension.GhcPs))))
+ Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Parser.Annotation.LocatedA (Language.Haskell.Syntax.Pat.Pat GHC.Hs.Extension.GhcPs))
+ Retrie.Universe: instance Retrie.Universe.Matchable (GHC.Parser.Annotation.LocatedA (Language.Haskell.Syntax.Type.HsType GHC.Hs.Extension.GhcPs))
- Retrie: parseDecl :: String -> IO AnnotatedHsDecl
+ Retrie: parseDecl :: LibDir -> String -> IO AnnotatedHsDecl
- Retrie: parseExpr :: String -> IO AnnotatedHsExpr
+ Retrie: parseExpr :: LibDir -> String -> IO AnnotatedHsExpr
- Retrie: parseImports :: [String] -> IO AnnotatedImports
+ Retrie: parseImports :: LibDir -> [String] -> IO AnnotatedImports
- Retrie: parsePattern :: String -> IO AnnotatedPat
+ Retrie: parsePattern :: LibDir -> String -> IO AnnotatedPat
- Retrie: parseQueries :: Options -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]
+ Retrie: parseQueries :: LibDir -> Options -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]
- Retrie: parseRewrites :: Options -> [RewriteSpec] -> IO [Rewrite Universe]
+ Retrie: parseRewrites :: LibDir -> Options -> [RewriteSpec] -> IO [Rewrite Universe]
- Retrie: parseStmt :: String -> IO AnnotatedStmt
+ Retrie: parseStmt :: LibDir -> String -> IO AnnotatedStmt
- Retrie: parseType :: String -> IO AnnotatedHsType
+ Retrie: parseType :: LibDir -> String -> IO AnnotatedHsType
- Retrie: printA :: Annotate ast => Annotated (Located ast) -> String
+ Retrie: printA :: (Data ast, ExactPrint ast) => Annotated ast -> String
- Retrie: runScript :: (Options -> IO (Retrie ())) -> IO ()
+ Retrie: runScript :: LibDir -> (Options -> IO (Retrie ())) -> IO ()
- Retrie: runScriptWithModifiedOptions :: (Options -> IO (Options, Retrie ())) -> IO ()
+ Retrie: runScriptWithModifiedOptions :: LibDir -> (Options -> IO (Options, Retrie ())) -> IO ()
- Retrie: type AnnotatedPat = Annotated (Located (Pat GhcPs))
+ Retrie: type AnnotatedPat = Annotated (LPat GhcPs)
- Retrie.Debug: doRoundtrips :: FixityEnv -> FilePath -> [RoundTrip] -> IO ()
+ Retrie.Debug: doRoundtrips :: LibDir -> FixityEnv -> FilePath -> [RoundTrip] -> IO ()
- Retrie.ExactPrint: TransformT :: RWST () [String] (Anns, Int) m a -> TransformT (m :: Type -> Type) a
+ Retrie.ExactPrint: TransformT :: RWST () [String] Int m a -> TransformT (m :: Type -> Type) a
- Retrie.ExactPrint: [unTransformT] :: TransformT (m :: Type -> Type) a -> RWST () [String] (Anns, Int) m a
+ Retrie.ExactPrint: [unTransformT] :: TransformT (m :: Type -> Type) a -> RWST () [String] Int m a
- Retrie.ExactPrint: addAllAnnsT :: (HasCallStack, Data a, Data b, Monad m) => Located a -> Located b -> TransformT m ()
+ Retrie.ExactPrint: addAllAnnsT :: (HasCallStack, Monoid an, Data a, Data b, MonadIO m, Typeable an) => LocatedAn an a -> LocatedAn an b -> TransformT m (LocatedAn an b)
- Retrie.ExactPrint: balanceComments :: forall a b (m :: Type -> Type). (Data a, Data b, Monad m) => Located a -> Located b -> TransformT m ()
+ Retrie.ExactPrint: balanceComments :: forall (m :: Type -> Type). Monad m => LHsDecl GhcPs -> LHsDecl GhcPs -> TransformT m (LHsDecl GhcPs, LHsDecl GhcPs)
- Retrie.ExactPrint: captureOrder :: Data a => Located a -> [Located b] -> Anns -> Anns
+ Retrie.ExactPrint: captureOrder :: [LocatedA b] -> AnnSortKey
- Retrie.ExactPrint: debugDump :: Annotate a => Annotated (Located a) -> IO ()
+ Retrie.ExactPrint: debugDump :: (Data a, ExactPrint a) => Annotated a -> IO ()
- Retrie.ExactPrint: debugParse :: FixityEnv -> String -> IO ()
+ Retrie.ExactPrint: debugParse :: LibDir -> FixityEnv -> String -> IO ()
- Retrie.ExactPrint: decl2Bind :: LHsDecl name -> [LHsBind name]
+ Retrie.ExactPrint: decl2Bind :: LHsDecl GhcPs -> [LHsBind GhcPs]
- Retrie.ExactPrint: decl2Sig :: LHsDecl name -> [LSig name]
+ Retrie.ExactPrint: decl2Sig :: LHsDecl GhcPs -> [LSig GhcPs]
- Retrie.ExactPrint: exactPrint :: Annotate ast => Located ast -> Anns -> String
+ Retrie.ExactPrint: exactPrint :: ExactPrint ast => ast -> String
- Retrie.ExactPrint: fix :: (Data ast, Monad m) => FixityEnv -> ast -> TransformT m ast
+ Retrie.ExactPrint: fix :: (Data ast, MonadIO m) => FixityEnv -> ast -> TransformT m ast
- Retrie.ExactPrint: getEntryDP :: Constraints a => Anns -> a -> DeltaPos
+ Retrie.ExactPrint: getEntryDP :: LocatedAn t a -> DeltaPos
- Retrie.ExactPrint: hasComments :: (Data a, Monad m) => Located a -> TransformT m Bool
+ Retrie.ExactPrint: hasComments :: LocatedAn an a -> Bool
- Retrie.ExactPrint: insertAfter :: HasDecls (Located ast) => Located old -> Located ast -> LHsDecl GhcPs -> Transform (Located ast)
+ Retrie.ExactPrint: insertAfter :: HasDecls (LocatedA ast) => LocatedA old -> LocatedA ast -> LHsDecl GhcPs -> Transform (LocatedA ast)
- Retrie.ExactPrint: insertAtEnd :: HasDecls (Located ast) => Located ast -> LHsDecl GhcPs -> Transform (Located ast)
+ Retrie.ExactPrint: insertAtEnd :: HasDecls ast => ast -> LHsDecl GhcPs -> Transform ast
- Retrie.ExactPrint: insertAtStart :: HasDecls (Located ast) => Located ast -> LHsDecl GhcPs -> Transform (Located ast)
+ Retrie.ExactPrint: insertAtStart :: HasDecls ast => ast -> LHsDecl GhcPs -> Transform ast
- Retrie.ExactPrint: insertBefore :: HasDecls (Located ast) => Located old -> Located ast -> LHsDecl GhcPs -> Transform (Located ast)
+ Retrie.ExactPrint: insertBefore :: HasDecls (LocatedA ast) => LocatedA old -> LocatedA ast -> LHsDecl GhcPs -> Transform (LocatedA ast)
- Retrie.ExactPrint: isComma :: KeywordId -> Bool
+ Retrie.ExactPrint: isComma :: TrailingAnn -> Bool
- Retrie.ExactPrint: modifyValD :: HasTransform m => SrcSpan -> Decl -> (Match -> [Decl] -> m ([Decl], Maybe t)) -> m (Decl, Maybe t)
+ Retrie.ExactPrint: modifyValD :: HasTransform m => SrcSpan -> Decl -> (PMatch -> [Decl] -> m ([Decl], Maybe t)) -> m (Decl, Maybe t)
- Retrie.ExactPrint: parseContent :: FixityEnv -> FilePath -> String -> IO AnnotatedModule
+ Retrie.ExactPrint: parseContent :: LibDir -> FixityEnv -> FilePath -> String -> IO AnnotatedModule
- Retrie.ExactPrint: parseContentNoFixity :: FilePath -> String -> IO AnnotatedModule
+ Retrie.ExactPrint: parseContentNoFixity :: LibDir -> FilePath -> String -> IO AnnotatedModule
- Retrie.ExactPrint: parseDecl :: String -> IO AnnotatedHsDecl
+ Retrie.ExactPrint: parseDecl :: LibDir -> String -> IO AnnotatedHsDecl
- Retrie.ExactPrint: parseExpr :: String -> IO AnnotatedHsExpr
+ Retrie.ExactPrint: parseExpr :: LibDir -> String -> IO AnnotatedHsExpr
- Retrie.ExactPrint: parseImports :: [String] -> IO AnnotatedImports
+ Retrie.ExactPrint: parseImports :: LibDir -> [String] -> IO AnnotatedImports
- Retrie.ExactPrint: parseModule :: FilePath -> IO (ParseResult ParsedSource)
+ Retrie.ExactPrint: parseModule :: LibDir -> FilePath -> IO (ParseResult ParsedSource)
- Retrie.ExactPrint: parsePattern :: String -> IO AnnotatedPat
+ Retrie.ExactPrint: parsePattern :: LibDir -> String -> IO AnnotatedPat
- Retrie.ExactPrint: parseStmt :: String -> IO AnnotatedStmt
+ Retrie.ExactPrint: parseStmt :: LibDir -> String -> IO AnnotatedStmt
- Retrie.ExactPrint: parseType :: String -> IO AnnotatedHsType
+ Retrie.ExactPrint: parseType :: LibDir -> String -> IO AnnotatedHsType
- Retrie.ExactPrint: replaceDeclsValbinds :: forall (m :: Type -> Type). Monad m => HsLocalBinds GhcPs -> [LHsDecl GhcPs] -> TransformT m (HsLocalBinds GhcPs)
+ Retrie.ExactPrint: replaceDeclsValbinds :: forall (m :: Type -> Type). Monad m => WithWhere -> HsLocalBinds GhcPs -> [LHsDecl GhcPs] -> TransformT m (HsLocalBinds GhcPs)
- Retrie.ExactPrint: runTransform :: Anns -> Transform a -> (a, (Anns, Int), [String])
+ Retrie.ExactPrint: runTransform :: Transform a -> (a, Int, [String])
- Retrie.ExactPrint: runTransformFrom :: Int -> Anns -> Transform a -> (a, (Anns, Int), [String])
+ Retrie.ExactPrint: runTransformFrom :: Int -> Transform a -> (a, Int, [String])
- Retrie.ExactPrint: runTransformFromT :: Int -> Anns -> TransformT m a -> m (a, (Anns, Int), [String])
+ Retrie.ExactPrint: runTransformFromT :: Int -> TransformT m a -> m (a, Int, [String])
- Retrie.ExactPrint: runTransformT :: Anns -> TransformT m a -> m (a, (Anns, Int), [String])
+ Retrie.ExactPrint: runTransformT :: TransformT m a -> m (a, Int, [String])
- Retrie.ExactPrint: swapEntryDPT :: (Data a, Data b, Monad m) => Located a -> Located b -> TransformT m ()
+ Retrie.ExactPrint: swapEntryDPT :: (Data a, Data b, Monad m, Monoid a1, Monoid a2, Typeable a1, Typeable a2) => LocatedAn a1 a -> LocatedAn a2 b -> TransformT m (LocatedAn a1 a, LocatedAn a2 b)
- Retrie.ExactPrint: transferAnnsT :: (Data a, Data b, Monad m) => (KeywordId -> Bool) -> Located a -> Located b -> TransformT m ()
+ Retrie.ExactPrint: transferAnnsT :: (Data a, Data b, Monad m) => (TrailingAnn -> Bool) -> LocatedA a -> LocatedA b -> TransformT m (LocatedA b)
- Retrie.ExactPrint: transferEntryAnnsT :: (HasCallStack, Data a, Data b, Monad m) => (KeywordId -> Bool) -> Located a -> Located b -> TransformT m ()
+ Retrie.ExactPrint: transferEntryAnnsT :: (HasCallStack, Data a, Data b, Monad m) => (TrailingAnn -> Bool) -> LocatedA a -> LocatedA b -> TransformT m (LocatedA b)
- Retrie.ExactPrint.Annotated: printA :: Annotate ast => Annotated (Located ast) -> String
+ Retrie.ExactPrint.Annotated: printA :: (Data ast, ExactPrint ast) => Annotated ast -> String
- Retrie.ExactPrint.Annotated: type AnnotatedPat = Annotated (Located (Pat GhcPs))
+ Retrie.ExactPrint.Annotated: type AnnotatedPat = Annotated (LPat GhcPs)
- Retrie.ExactPrint.Annotated: unsafeMkA :: ast -> Anns -> Int -> Annotated ast
+ Retrie.ExactPrint.Annotated: unsafeMkA :: ast -> Int -> Annotated ast
- Retrie.Expr: bitraverseHsConDetails :: Applicative m => (arg -> m arg') -> (rec -> m rec') -> HsConDetails arg rec -> m (HsConDetails arg' rec')
+ Retrie.Expr: bitraverseHsConDetails :: Applicative m => ([tyarg] -> m [tyarg']) -> (arg -> m arg') -> (rec -> m rec') -> HsConDetails tyarg arg rec -> m (HsConDetails tyarg' arg' rec')
- Retrie.Expr: grhsToExpr :: LGRHS p (LHsExpr p) -> LHsExpr p
+ Retrie.Expr: grhsToExpr :: LGRHS GhcPs (LHsExpr GhcPs) -> LHsExpr GhcPs
- Retrie.Expr: mkApps :: Monad m => LHsExpr GhcPs -> [LHsExpr GhcPs] -> TransformT m (LHsExpr GhcPs)
+ Retrie.Expr: mkApps :: MonadIO m => LHsExpr GhcPs -> [LHsExpr GhcPs] -> TransformT m (LHsExpr GhcPs)
- Retrie.Expr: mkConPatIn :: Monad m => Located RdrName -> HsConPatDetails GhcPs -> TransformT m (Located (Pat GhcPs))
+ Retrie.Expr: mkConPatIn :: Monad m => LocatedN RdrName -> HsConPatDetails GhcPs -> TransformT m (LPat GhcPs)
- Retrie.Expr: mkLocatedHsVar :: Monad m => Located RdrName -> TransformT m (LHsExpr GhcPs)
+ Retrie.Expr: mkLocatedHsVar :: Monad m => LocatedN RdrName -> TransformT m (LHsExpr GhcPs)
- Retrie.Expr: mkTyVar :: Monad m => Located RdrName -> TransformT m (LHsType GhcPs)
+ Retrie.Expr: mkTyVar :: Monad m => LocatedN RdrName -> TransformT m (LHsType GhcPs)
- Retrie.Expr: mkVarPat :: Monad m => Located RdrName -> TransformT m (LPat GhcPs)
+ Retrie.Expr: mkVarPat :: Monad m => LocatedN RdrName -> TransformT m (LPat GhcPs)
- Retrie.Expr: parenifyP :: Monad m => Context -> Located (Pat GhcPs) -> TransformT m (Located (Pat GhcPs))
+ Retrie.Expr: parenifyP :: Monad m => Context -> LPat GhcPs -> TransformT m (LPat GhcPs)
- Retrie.Expr: patToExpr :: Monad m => LPat GhcPs -> PatQ m (LHsExpr GhcPs)
+ Retrie.Expr: patToExpr :: MonadIO m => LPat GhcPs -> PatQ m (LHsExpr GhcPs)
- Retrie.Expr: unparenP :: Located (Pat GhcPs) -> Located (Pat GhcPs)
+ Retrie.Expr: unparenP :: LPat GhcPs -> LPat GhcPs
- Retrie.Fixity: lookupOpRdrName :: Located RdrName -> FixityEnv -> Fixity
+ Retrie.Fixity: lookupOpRdrName :: LocatedN RdrName -> FixityEnv -> Fixity
- Retrie.GHC: cLPat :: Located (Pat (GhcPass p)) -> LPat (GhcPass p)
+ Retrie.GHC: cLPat :: LPat (GhcPass p) -> LPat (GhcPass p)
- Retrie.GHC: dLPat :: LPat (GhcPass p) -> Maybe (Located (Pat (GhcPass p)))
+ Retrie.GHC: dLPat :: LPat (GhcPass p) -> Maybe (LPat (GhcPass p))
- Retrie.GHC: dLPatUnsafe :: LPat (GhcPass p) -> Located (Pat (GhcPass p))
+ Retrie.GHC: dLPatUnsafe :: LPat (GhcPass p) -> LPat (GhcPass p)
- Retrie.GHC: fixityDecls :: HsModule -> [(Located RdrName, Fixity)]
+ Retrie.GHC: fixityDecls :: HsModule -> [(LocatedN RdrName, Fixity)]
- Retrie.GHC: tyBindersToLocatedRdrNames :: [LHsTyVarBndr GhcPs] -> [Located RdrName]
+ Retrie.GHC: tyBindersToLocatedRdrNames :: [LHsTyVarBndr s GhcPs] -> [LocatedN RdrName]
- Retrie.GHC: tyvarRdrName :: HsType p -> Maybe (Located (IdP p))
+ Retrie.GHC: tyvarRdrName :: HsType p -> Maybe (LIdP p)
- Retrie.GHC: uniqBag :: Uniquable a => [(a, b)] -> UniqFM [b]
+ Retrie.GHC: uniqBag :: Uniquable a => [(a, b)] -> UniqFM a [b]
- Retrie.GHC: varRdrName :: HsExpr p -> Maybe (Located (IdP p))
+ Retrie.GHC: varRdrName :: HsExpr p -> Maybe (LIdP p)
- Retrie.Options: parseOptions :: FixityEnv -> IO Options
+ Retrie.Options: parseOptions :: LibDir -> FixityEnv -> IO Options
- Retrie.Options: parseRewritesInternal :: Options_ a b -> [RewriteSpec] -> IO [Rewrite Universe]
+ Retrie.Options: parseRewritesInternal :: LibDir -> Options_ a b -> [RewriteSpec] -> IO [Rewrite Universe]
- Retrie.Options: resolveOptions :: ProtoOptions -> IO Options
+ Retrie.Options: resolveOptions :: LibDir -> ProtoOptions -> IO Options
- Retrie.PatternMap.Bag: UniqFM :: UniqFM [a] -> UniqFM a
+ Retrie.PatternMap.Bag: UniqFM :: UniqFM Unique [a] -> UniqFM a
- Retrie.PatternMap.Bag: [unUniqFM] :: UniqFM a -> UniqFM [a]
+ Retrie.PatternMap.Bag: [unUniqFM] :: UniqFM a -> UniqFM Unique [a]
- Retrie.PatternMap.Instances: SCM :: MaybeMap a -> MaybeMap a -> MaybeMap a -> SCMap a
+ Retrie.PatternMap.Instances: SCM :: MaybeMap a -> MaybeMap a -> FSEnv a -> SCMap a
- Retrie.PatternMap.Instances: [scmDoExpr] :: SCMap a -> MaybeMap a
+ Retrie.PatternMap.Instances: [scmDoExpr] :: SCMap a -> FSEnv a
- Retrie.PatternMap.Instances: extractBinderInfo :: LHsTyVarBndr GhcPs -> (RdrName, Maybe (LHsKind GhcPs))
+ Retrie.PatternMap.Instances: extractBinderInfo :: LHsTyVarBndr flag GhcPs -> (RdrName, Maybe (LHsKind GhcPs))
- Retrie.PatternMap.Instances: fieldsToRdrNames :: RecordFieldToRdrName f => [LHsRecField' f arg] -> [LHsRecField' RdrName arg]
+ Retrie.PatternMap.Instances: fieldsToRdrNames :: RecordFieldToRdrName f => [LHsRecField' GhcPs f arg] -> [LHsRecField' GhcPs RdrName arg]
- Retrie.Query: parseQuerySpecs :: FixityEnv -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]
+ Retrie.Query: parseQuerySpecs :: LibDir -> FixityEnv -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]
- Retrie.Rewrites: parseAdhocs :: FixityEnv -> [String] -> IO [Rewrite Universe]
+ Retrie.Rewrites: parseAdhocs :: LibDir -> FixityEnv -> [String] -> IO [Rewrite Universe]
- Retrie.Rewrites: parseRewriteSpecs :: (FilePath -> IO (CPP AnnotatedModule)) -> FixityEnv -> [RewriteSpec] -> IO [Rewrite Universe]
+ Retrie.Rewrites: parseRewriteSpecs :: LibDir -> (FilePath -> IO (CPP AnnotatedModule)) -> FixityEnv -> [RewriteSpec] -> IO [Rewrite Universe]
- Retrie.Rewrites.Function: dfnsToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM [Rewrite (LHsExpr GhcPs)])
+ Retrie.Rewrites.Function: dfnsToRewrites :: LibDir -> [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM FastString [Rewrite (LHsExpr GhcPs)])
- Retrie.Rewrites.Function: getImports :: Direction -> Maybe (Located ModuleName) -> TransformT IO AnnotatedImports
+ Retrie.Rewrites.Function: getImports :: LibDir -> Direction -> Maybe (LocatedA ModuleName) -> TransformT IO AnnotatedImports
- Retrie.Rewrites.Patterns: patternSynonymsToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM [Rewrite Universe])
+ Retrie.Rewrites.Patterns: patternSynonymsToRewrites :: LibDir -> [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM FastString [Rewrite Universe])
- Retrie.Rewrites.Rules: rulesToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM [Rewrite (LHsExpr GhcPs)])
+ Retrie.Rewrites.Rules: rulesToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM RuleName [Rewrite (LHsExpr GhcPs)])
- Retrie.Rewrites.Types: mkTypeRewrite :: Direction -> (Located RdrName, [LHsTyVarBndr GhcPs], LHsType GhcPs) -> TransformT IO (Rewrite (LHsType GhcPs))
+ Retrie.Rewrites.Types: mkTypeRewrite :: Direction -> (LocatedN RdrName, [LHsTyVarBndr () GhcPs], LHsType GhcPs) -> TransformT IO (Rewrite (LHsType GhcPs))
- Retrie.Rewrites.Types: typeSynonymsToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM [Rewrite (LHsType GhcPs)])
+ Retrie.Rewrites.Types: typeSynonymsToRewrites :: [(FastString, Direction)] -> AnnotatedModule -> IO (UniqFM FastString [Rewrite (LHsType GhcPs)])
- Retrie.Run: execute :: Options -> Retrie () -> IO ()
+ Retrie.Run: execute :: LibDir -> Options -> Retrie () -> IO ()
- Retrie.Run: run :: Monoid b => (FilePath -> WriteFn a b) -> (IO b -> IO c) -> Options -> Retrie a -> IO [c]
+ Retrie.Run: run :: Monoid b => LibDir -> (FilePath -> WriteFn a b) -> (IO b -> IO c) -> Options -> Retrie a -> IO [c]
- Retrie.Run: runScript :: (Options -> IO (Retrie ())) -> IO ()
+ Retrie.Run: runScript :: LibDir -> (Options -> IO (Retrie ())) -> IO ()
- Retrie.Run: runScriptWithModifiedOptions :: (Options -> IO (Options, Retrie ())) -> IO ()
+ Retrie.Run: runScriptWithModifiedOptions :: LibDir -> (Options -> IO (Options, Retrie ())) -> IO ()
- Retrie.Run: type WriteFn a b = [Replacement] -> String -> a -> IO b
+ Retrie.Run: type WriteFn a b = [Replacement] -> String -> CPP AnnotatedModule -> a -> IO b
- Retrie.SYB: GM :: (forall a. Data a => a -> m a) -> GenericM' (m :: Type -> Type)
+ Retrie.SYB: GM :: (forall a. Data a => a -> m a) -> GenericM' (m :: TYPE LiftedRep -> Type)
- Retrie.SYB: Generic' :: Generic c -> Generic' (c :: Type -> Type)
+ Retrie.SYB: Generic' :: Generic c -> Generic' (c :: TYPE LiftedRep -> Type)
- Retrie.SYB: [HRefl] :: forall k1 (a :: k1). a :~~: a
+ Retrie.SYB: [HRefl] :: forall {k1} (a :: k1). a :~~: a
- Retrie.SYB: [Refl] :: forall k (a :: k). a :~: a
+ Retrie.SYB: [Refl] :: forall {k} (a :: k). a :~: a
- Retrie.SYB: [unGM] :: GenericM' (m :: Type -> Type) -> forall a. Data a => a -> m a
+ Retrie.SYB: [unGM] :: GenericM' (m :: TYPE LiftedRep -> Type) -> forall a. Data a => a -> m a
- Retrie.SYB: [unGeneric'] :: Generic' (c :: Type -> Type) -> Generic c
+ Retrie.SYB: [unGeneric'] :: Generic' (c :: TYPE LiftedRep -> Type) -> Generic c
- Retrie.SYB: data (a :: k1) :~~: (b :: k2)
+ Retrie.SYB: data (a :: k) :~: (b :: k)
- Retrie.SYB: data Generic' (c :: Type -> Type)
+ Retrie.SYB: data Generic' (c :: TYPE LiftedRep -> Type)
- Retrie.SYB: eqT :: forall k (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b)
+ Retrie.SYB: eqT :: forall {k} (a :: k) (b :: k). (Typeable a, Typeable b) => Maybe (a :~: b)
- Retrie.SYB: gcast :: forall k (a :: k) (b :: k) c. (Typeable a, Typeable b) => c a -> Maybe (c b)
+ Retrie.SYB: gcast :: forall {k} (a :: k) (b :: k) c. (Typeable a, Typeable b) => c a -> Maybe (c b)
- Retrie.SYB: gcast1 :: forall k1 k2 c (t :: k2 -> k1) (t' :: k2 -> k1) (a :: k2). (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a))
+ Retrie.SYB: gcast1 :: forall {k1} {k2} c (t :: k2 -> k1) (t' :: k2 -> k1) (a :: k2). (Typeable t, Typeable t') => c (t a) -> Maybe (c (t' a))
- Retrie.SYB: gcast2 :: forall k1 k2 k3 c (t :: k2 -> k3 -> k1) (t' :: k2 -> k3 -> k1) (a :: k2) (b :: k3). (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b))
+ Retrie.SYB: gcast2 :: forall {k1} {k2} {k3} c (t :: k2 -> k3 -> k1) (t' :: k2 -> k3 -> k1) (a :: k2) (b :: k3). (Typeable t, Typeable t') => c (t a b) -> Maybe (c (t' a b))
- Retrie.SYB: infix 4 :~~:
+ Retrie.SYB: infix 4 :~:
- Retrie.SYB: newtype GenericM' (m :: Type -> Type)
+ Retrie.SYB: newtype GenericM' (m :: TYPE LiftedRep -> Type)
- Retrie.SYB: type Generic (c :: Type -> Type) = forall a. Data a => a -> c a
+ Retrie.SYB: type Generic (c :: TYPE LiftedRep -> Type) = forall a. Data a => a -> c a
- Retrie.SYB: type GenericR (m :: Type -> Type) = forall a. Data a => m a
+ Retrie.SYB: type GenericR (m :: TYPE LiftedRep -> Type) = forall a. Data a => m a
- Retrie.SYB: typeRep :: forall k proxy (a :: k). Typeable a => proxy a -> TypeRep
+ Retrie.SYB: typeRep :: forall {k} proxy (a :: k). Typeable a => proxy a -> TypeRep

Files

CHANGELOG.md view
@@ -1,4 +1,9 @@ +1.2.0.0 (December 12, 2021)++* Early support for GHC 9.2.1 (thanks to Alan Zimmerman) +* Dropped support for GHC <9.2 (might readd it later)+ 1.1.0.0 (November 13, 2021) * Remove dependency on xargs (#31) * Allow rewrite elaboration
Retrie.hs view
@@ -68,6 +68,7 @@     -- >   expr <- parseExpr "f <$> x <*> y"     -- >   e <- transformA expr (fix (fixityEnv opts))     --+  , LibDir   , parseDecl   , parseExpr   , parsePattern@@ -140,13 +141,13 @@ import Retrie.Util  -- | Create 'Rewrite's from string specifications of rewrites.-parseRewrites :: Options -> [RewriteSpec] -> IO [Rewrite Universe]+parseRewrites :: LibDir -> Options -> [RewriteSpec] -> IO [Rewrite Universe] parseRewrites = parseRewritesInternal  -- | Create 'Query's from string specifications of expressions/types/statements. parseQueries-  :: Options -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]-parseQueries Options{..} = parseQuerySpecs fixityEnv+  :: LibDir -> Options -> [(Quantifiers, QuerySpec, v)] -> IO [Query Universe v]+parseQueries libdir Options{..} = parseQuerySpecs libdir fixityEnv  -- $advanced -- For advanced rewriting, Retrie provides the notion of a
Retrie/CPP.hs view
@@ -102,6 +102,7 @@  printCPP :: [Replacement] -> CPP AnnotatedModule -> String printCPP _ (NoCPP m) = printA m+-- printCPP _ (NoCPP m) = error $ "printCPP:m=" ++ showAstA m printCPP repls (CPP orig is ms) = Text.unpack $ Text.unlines $   case is of     [] -> splice "" 1 1 sorted origLines
Retrie/Context.hs view
@@ -61,7 +61,7 @@     -- In left child, prec is 10, so HsApp child will NOT get paren'd     -- In right child, prec is 11, so every child gets paren'd (unless atomic)     updExp (OpApp _ _ op _) = c { ctxtParentPrec = HasPrec $ lookupOp op (ctxtFixityEnv c) }-    updExp (HsLet _ lbs _) = addInScope neverParen $ collectLocalBinders $ unLoc lbs+    updExp (HsLet _ lbs _) = addInScope neverParen $ collectLocalBinders CollNoDictBinders lbs     updExp _ = neverParen      updType :: HsType GhcPs -> Context@@ -72,12 +72,12 @@     updMatch :: Match GhcPs (LHsExpr GhcPs) -> Context     updMatch       | i == 2  -- m_pats field-      = addInScope c{ctxtParentPrec = IsLhs} . collectPatsBinders . m_pats-      | otherwise = addInScope neverParen . collectPatsBinders . m_pats+      = addInScope c{ctxtParentPrec = IsLhs} . collectPatsBinders CollNoDictBinders . m_pats+      | otherwise = addInScope neverParen . collectPatsBinders CollNoDictBinders . m_pats       where      updGRHSs :: GRHSs GhcPs (LHsExpr GhcPs) -> Context-    updGRHSs = addInScope neverParen . collectLocalBinders . unLoc . grhssLocalBinds+    updGRHSs = addInScope neverParen . collectLocalBinders CollNoDictBinders . grhssLocalBinds      updGRHS :: GRHS GhcPs (LHsExpr GhcPs) -> Context #if __GLASGOW_HASKELL__ < 900@@ -88,7 +88,7 @@       | i > firstChild = addInScope neverParen bs       | otherwise = fst $ updateSubstitution neverParen bs       where-        bs = collectLStmtsBinders gs+        bs = collectLStmtsBinders CollNoDictBinders gs      updStmt :: Stmt GhcPs (LHsExpr GhcPs) -> Context     updStmt _ = neverParen@@ -99,11 +99,11 @@         -- binders are in scope over tail of list (right child)       | i > 0 = insertDependentRewrites neverParen bs ls         -- lets are recursive in do-blocks-      | L _ (LetStmt _ (L _ bnds)) <- ls =-          return $ addInScope neverParen $ collectLocalBinders bnds+      | L _ (LetStmt _ bnds) <- ls =+          return $ addInScope neverParen $ collectLocalBinders CollNoDictBinders bnds       | otherwise = return $ fst $ updateSubstitution neverParen bs       where-        bs = collectLStmtBinders ls+        bs = collectLStmtBinders CollNoDictBinders ls      updHsBind :: HsBind GhcPs -> Context     updHsBind FunBind{..} =
Retrie/Debug.hs view
@@ -29,11 +29,11 @@       <> help "Roundtrip file through ghc-exactprint only.")   ] -doRoundtrips :: FixityEnv -> FilePath -> [RoundTrip] -> IO ()-doRoundtrips fixities targetDir = mapM_ $ \ (RoundTrip doFix fp) -> do+doRoundtrips :: LibDir -> FixityEnv -> FilePath -> [RoundTrip] -> IO ()+doRoundtrips libdir fixities targetDir = mapM_ $ \ (RoundTrip doFix fp) -> do   let path = targetDir </> fp   cpp <-     if doFix-    then parseCPPFile (parseContent fixities) path-    else parseCPPFile parseContentNoFixity path+    then parseCPPFile (parseContent libdir fixities) path+    else parseCPPFile (parseContentNoFixity libdir) path   writeFile path $ printCPP [] cpp
Retrie/Elaborate.hs view
@@ -74,8 +74,8 @@   | otherwise = return p  elaborateImpl-  :: forall ast m. (Annotate ast, Matchable (Located ast), MonadIO m)-  => Context -> Located ast -> ListT (TransformT m) (Located ast)+  :: forall ast m. (Data ast, ExactPrint ast, Matchable (LocatedA ast), MonadIO m)+  => Context -> LocatedA ast -> ListT (TransformT m) (LocatedA ast) elaborateImpl ctxt e = do   elaborations <- lift $ do     matches <- runMatcher ctxt (ctxtRewriter ctxt) (getUnparened e)@@ -86,9 +86,9 @@       -- substitute for quantifiers in grafted template       r <- subst sub ctxt t'       -- copy appropriate annotations from old expression to template-      addAllAnnsT e r+      r0 <- addAllAnnsT e r       -- add parens to template if needed-      (mkM (parenify ctxt) `extM` parenifyT ctxt `extM` parenifyP ctxt) r+      (mkM (parenify ctxt) `extM` parenifyT ctxt `extM` parenifyP ctxt) r0    fromFoldable (e : elaborations) 
Retrie/ExactPrint.hs view
@@ -13,6 +13,7 @@   ( -- * Fixity re-association     fix     -- * Parsers+  , Parsers.LibDir   , parseContent   , parseContentNoFixity   , parseDecl@@ -23,68 +24,69 @@   , parseType     -- * Primitive Transformations   , addAllAnnsT-  , cloneT-  , setEntryDPT+  -- , cloneT+  -- , setEntryDPT   , swapEntryDPT   , transferAnnsT   , transferEntryAnnsT   , transferEntryDPT-  , tryTransferEntryDPT+  -- , tryTransferEntryDPT+  , transferAnchor     -- * Utils   , debugDump   , debugParse+  , debug   , hasComments   , isComma     -- * Annotated AST   , module Retrie.ExactPrint.Annotated     -- * ghc-exactprint re-exports   , module Language.Haskell.GHC.ExactPrint-  , module Language.Haskell.GHC.ExactPrint.Annotate+  -- , module Language.Haskell.GHC.ExactPrint.Annotate   , module Language.Haskell.GHC.ExactPrint.Types   , module Language.Haskell.GHC.ExactPrint.Utils+  , module Language.Haskell.GHC.ExactPrint.Transform   ) where  import Control.Exception import Control.Monad.State.Lazy hiding (fix)-import Data.Function (on)+-- import Data.Function (on) import Data.List (transpose)-import Data.Maybe-import qualified Data.Map as M+-- import Data.Maybe+-- import qualified Data.Map as M import Text.Printf  import Language.Haskell.GHC.ExactPrint hiding-  ( cloneT-  , setEntryDP-  , setEntryDPT-  , transferEntryDPT+  (+   setEntryDP   , transferEntryDP   )-import Language.Haskell.GHC.ExactPrint.Annotate (Annotate)+-- import Language.Haskell.GHC.ExactPrint.ExactPrint (ExactPrint)+import Language.Haskell.GHC.ExactPrint.Utils hiding (debug) import qualified Language.Haskell.GHC.ExactPrint.Parsers as Parsers import Language.Haskell.GHC.ExactPrint.Types-  ( AnnConName(..)-  , DeltaPos(..)-  , KeywordId(..)-  , annGetConstr-  , annNone-  , emptyAnns-  , mkAnnKey+  ( showGhc   )-import Language.Haskell.GHC.ExactPrint.Utils (annLeadingCommentEntryDelta, showGhc)+import Language.Haskell.GHC.ExactPrint.Transform  import Retrie.ExactPrint.Annotated import Retrie.Fixity import Retrie.GHC import Retrie.SYB hiding (ext1)+import Retrie.Util  import GHC.Stack+import Debug.Trace +debug :: c -> String -> c+debug c s = trace s c+ -- Fixity traversal -----------------------------------------------------------  -- | Re-associate AST using given 'FixityEnv'. (The GHC parser has no knowledge -- of operator fixity, because that requires running the renamer, so it parses -- all operators as left-associated.)-fix :: (Data ast, Monad m) => FixityEnv -> ast -> TransformT m ast+fix :: (Data ast, MonadIO m) => FixityEnv -> ast -> TransformT m ast fix env = fixAssociativity >=> fixEntryDP   where     fixAssociativity = everywhereM (mkM (fixOneExpr env) `extM` fixOnePat env)@@ -99,162 +101,232 @@ -- operator application. We also know that this will be applied bottom-up -- by 'everywhere', so we can assume the children are already fixed. fixOneExpr-  :: Monad m+  :: MonadIO m   => FixityEnv   -> LHsExpr GhcPs   -> TransformT m (LHsExpr GhcPs) fixOneExpr env (L l2 (OpApp x2 ap1@(L l1 (OpApp x1 x op1 y)) op2 z))   | associatesRight (lookupOp op1 env) (lookupOp op2 env) = do-    let ap2' = L l2 $ OpApp x2 y op2 z-    swapEntryDPT ap1 ap2'-    transferAnnsT isComma ap2' ap1-    rhs <- fixOneExpr env ap2'-    return $ L l1 $ OpApp x1 x op1 rhs+    -- lift $ liftIO $ debugPrint Loud "fixOneExpr:(l1,l2)="  [showAst (l1,l2)]+    let ap2' = L (stripComments l2) $ OpApp x2 y op2 z+    (ap1_0, ap2'_0) <- swapEntryDPT ap1 ap2'+    ap1_1 <- transferAnnsT isComma ap2'_0 ap1_0+    -- lift $ liftIO $ debugPrint Loud "fixOneExpr:recursing"  []+    rhs <- fixOneExpr env ap2'_0+    -- lift $ liftIO $ debugPrint Loud "fixOneExpr:returning"  [showAst (L l2 $ OpApp x1 x op1 rhs)]+    -- return $ L l1 $ OpApp x1 x op1 rhs+    return $ L l2 $ OpApp x1 x op1 rhs fixOneExpr _ e = return e  fixOnePat :: Monad m => FixityEnv -> LPat GhcPs -> TransformT m (LPat GhcPs)-#if __GLASGOW_HASKELL__ < 900-fixOnePat env (dLPat -> Just (L l2 (ConPatIn op2 (InfixCon (dLPat -> Just ap1@(L l1 (ConPatIn op1 (InfixCon x y)))) z))))-  | associatesRight (lookupOpRdrName op1 env) (lookupOpRdrName op2 env) = do-    let ap2' = L l2 (ConPatIn op2 (InfixCon y z))-    swapEntryDPT ap1 ap2'-    transferAnnsT isComma ap2' ap1-    rhs <- fixOnePat env (cLPat ap2')-    return $ cLPat $ L l1 (ConPatIn op1 (InfixCon x rhs))-#else fixOnePat env (dLPat -> Just (L l2 (ConPat ext2 op2 (InfixCon (dLPat -> Just ap1@(L l1 (ConPat ext1 op1 (InfixCon x y)))) z))))   | associatesRight (lookupOpRdrName op1 env) (lookupOpRdrName op2 env) = do     let ap2' = L l2 (ConPat ext2 op2 (InfixCon y z))-    swapEntryDPT ap1 ap2'-    transferAnnsT isComma ap2' ap1-    rhs <- fixOnePat env (cLPat ap2')+    (ap1_0, ap2'_0) <- swapEntryDPT ap1 ap2'+    ap1_1 <- transferAnnsT isComma ap2' ap1+    rhs <- fixOnePat env (cLPat ap2'_0)     return $ cLPat $ L l1 (ConPat ext1 op1 (InfixCon x rhs))-#endif fixOnePat _ e = return e +-- TODO: move to ghc-exactprint+stripComments :: SrcAnn an -> SrcAnn an+stripComments (SrcSpanAnn EpAnnNotUsed l) = SrcSpanAnn EpAnnNotUsed l+stripComments (SrcSpanAnn (EpAnn anc an _) l) = SrcSpanAnn (EpAnn anc an emptyComments) l+ -- Move leading whitespace from the left child of an operator application -- to the application itself. We need this so we have correct offsets when -- substituting into patterns and don't end up with extra leading spaces. -- We can assume it is run bottom-up, and that precedence is already fixed. fixOneEntry-  :: (Monad m, Data a)-  => Located a -- ^ Overall application-  -> Located a -- ^ Left child-  -> TransformT m (Located a)+  :: (MonadIO m, Data a)+  => LocatedA a -- ^ Overall application+  -> LocatedA a -- ^ Left child+  -> TransformT m (LocatedA a, LocatedA a) fixOneEntry e x = do-  anns <- getAnnsT-  let-    zeros = DP (0,0)-    (DP (xr,xc), DP (actualRow,_)) =-      case M.lookup (mkAnnKey x) anns of-        Nothing -> (zeros, zeros)-        Just ann -> (annLeadingCommentEntryDelta ann, annEntryDelta ann)-    DP (er,ec) =-      maybe zeros annLeadingCommentEntryDelta $ M.lookup (mkAnnKey e) anns-  when (actualRow == 0) $ do-    setEntryDPT e $ DP (er, xc + ec)-    setEntryDPT x $ DP (xr, 0)-  return e+  -- lift $ liftIO $ debugPrint Loud "fixOneEntry:(e,x)="  [showAst (e,x)]+  -- -- anns <- getAnnsT+  -- let+  --   zeros = SameLine 0+  --   (xdp, ard) =+  --     case M.lookup (mkAnnKey x) anns of+  --       Nothing -> (zeros, zeros)+  --       Just ann -> (annLeadingCommentEntryDelta ann, annEntryDelta ann)+  --   xr = getDeltaLine xdp+  --   xc = deltaColumn xdp+  --   actualRow = getDeltaLine ard+  --   edp =+  --     maybe zeros annLeadingCommentEntryDelta $ M.lookup (mkAnnKey e) anns+  --   er = getDeltaLine edp+  --   ec = deltaColumn edp+  -- when (actualRow == 0) $ do+  --   setEntryDPT e $ deltaPos (er, xc + ec)+  --   setEntryDPT x $ deltaPos (xr, 0) -fixOneEntryExpr :: Monad m => LHsExpr GhcPs -> TransformT m (LHsExpr GhcPs)-fixOneEntryExpr e@(L _ (OpApp _ x _ _)) = fixOneEntry e x+  -- We assume that ghc-exactprint has converted all Anchor's to use their delta variants.+  -- Get the dp for the x component+  let xdp = entryDP x+  let xr = getDeltaLine xdp+  let xc = deltaColumn xdp+  -- Get the dp for the e component+  let edp = entryDP e+  let er = getDeltaLine edp+  let ec = deltaColumn edp+  case xdp of+    SameLine n -> do+      -- lift $ liftIO $ debugPrint Loud "fixOneEntry:(xdp,edp)="  [showAst (xdp,edp)]+      -- lift $ liftIO $ debugPrint Loud "fixOneEntry:(dpx,dpe)="  [showAst ((deltaPos er (xc + ec)),(deltaPos xr 0))]+      -- lift $ liftIO $ debugPrint Loud "fixOneEntry:e'="  [showAst e]+      -- lift $ liftIO $ debugPrint Loud "fixOneEntry:e'="  [showAst (setEntryDP e (deltaPos er (xc + ec)))]+      return ( setEntryDP e (deltaPos er (xc + ec))+             , setEntryDP x (deltaPos xr 0))+    _ -> return (e,x)++  -- anns <- getAnnsT+  -- let+  --   zeros = DP (0,0)+  --   (DP (xr,xc), DP (actualRow,_)) =+  --     case M.lookup (mkAnnKey x) anns of+  --       Nothing -> (zeros, zeros)+  --       Just ann -> (annLeadingCommentEntryDelta ann, annEntryDelta ann)+  --   DP (er,ec) =+  --     maybe zeros annLeadingCommentEntryDelta $ M.lookup (mkAnnKey e) anns+  -- when (actualRow == 0) $ do+  --   setEntryDPT e $ DP (er, xc + ec)+  --   setEntryDPT x $ DP (xr, 0)+  -- return e++-- TODO: move this somewhere more appropriate+entryDP :: LocatedA a -> DeltaPos+entryDP (L (SrcSpanAnn EpAnnNotUsed _) _) = SameLine 1+entryDP (L (SrcSpanAnn (EpAnn anc _ _) _) _)+  = case anchor_op anc of+      UnchangedAnchor -> SameLine 1+      MovedAnchor dp -> dp+++fixOneEntryExpr :: MonadIO m => LHsExpr GhcPs -> TransformT m (LHsExpr GhcPs)+fixOneEntryExpr e@(L l (OpApp a x b c)) = do+  -- lift $ liftIO $ debugPrint Loud "fixOneEntryExpr:(e,x)="  [showAst (e,x)]+  (e',x') <- fixOneEntry e x+  -- lift $ liftIO $ debugPrint Loud "fixOneEntryExpr:(e',x')="  [showAst (e',x')]+  -- lift $ liftIO $ debugPrint Loud "fixOneEntryExpr:returning="  [showAst (L (getLoc e') (OpApp a x' b c))]+  return (L (getLoc e') (OpApp a x' b c)) fixOneEntryExpr e = return e -fixOneEntryPat :: Monad m => LPat GhcPs -> TransformT m (LPat GhcPs)+fixOneEntryPat :: MonadIO m => LPat GhcPs -> TransformT m (LPat GhcPs) fixOneEntryPat pat #if __GLASGOW_HASKELL__ < 900-  | Just p@(L _ (ConPatIn _ (InfixCon x _))) <- dLPat pat =+  | Just p@(L l (ConPatIn a (InfixCon x b))) <- dLPat pat = do #else-  | Just p@(L _ (ConPat _ _ (InfixCon x _))) <- dLPat pat =+  | Just p@(L l (ConPat a b (InfixCon x c))) <- dLPat pat = do #endif-    cLPat <$> fixOneEntry p (dLPatUnsafe x)+    (p', x') <- fixOneEntry p (dLPatUnsafe x)+    return (cLPat $ (L (getLoc p') (ConPat a b (InfixCon x' c))))   | otherwise = return pat  ------------------------------------------------------------------------------- ++-- Swap entryDP and prior comments between the two args swapEntryDPT-  :: (Data a, Data b, Monad m)-  => Located a -> Located b -> TransformT m ()-swapEntryDPT a b = modifyAnnsT $ \ anns ->-  let akey = mkAnnKey a-      bkey = mkAnnKey b-      aann = fromMaybe annNone $ M.lookup akey anns-      bann = fromMaybe annNone $ M.lookup bkey anns-  in M.insert akey-      aann { annEntryDelta = annEntryDelta bann-           , annPriorComments = annPriorComments bann } $-     M.insert bkey-      bann { annEntryDelta = annEntryDelta aann-           , annPriorComments = annPriorComments aann } anns+  :: (Data a, Data b, Monad m, Monoid a1, Monoid a2, Typeable a1, Typeable a2)+  => LocatedAn a1 a -> LocatedAn a2 b -> TransformT m (LocatedAn a1 a, LocatedAn a2 b)+swapEntryDPT a b = do+  b' <- transferEntryDP a b+  a' <- transferEntryDP b a+  return (a',b') +-- swapEntryDPT+--   :: (Data a, Data b, Monad m)+--   => LocatedAn a1 a -> LocatedAn a2 b -> TransformT m ()+-- swapEntryDPT a b =+--   modifyAnnsT $ \ anns ->+--   let akey = mkAnnKey a+--       bkey = mkAnnKey b+--       aann = fromMaybe annNone $ M.lookup akey anns+--       bann = fromMaybe annNone $ M.lookup bkey anns+--   in M.insert akey+--       aann { annEntryDelta = annEntryDelta bann+--            , annPriorComments = annPriorComments bann } $+--      M.insert bkey+--       bann { annEntryDelta = annEntryDelta aann+--            , annPriorComments = annPriorComments aann } anns+ -------------------------------------------------------------------------------  -- Compatibility module with ghc-exactprint -parseContentNoFixity :: FilePath -> String -> IO AnnotatedModule-parseContentNoFixity fp str = do-  r <- Parsers.parseModuleFromString fp str+parseContentNoFixity :: Parsers.LibDir -> FilePath -> String -> IO AnnotatedModule+parseContentNoFixity libdir fp str = do+  r <- Parsers.parseModuleFromString libdir fp str   case r of     Left msg -> do #if __GLASGOW_HASKELL__ < 810       fail $ show msg #else-      join $ Parsers.withDynFlags $ \dflags -> printBagOfErrors dflags msg-      fail "parse failed"+      fail $ show $ bagToList msg #endif-    Right (anns, m) -> return $ unsafeMkA m anns 0+    Right m -> return $ unsafeMkA (makeDeltaAst m) 0 -parseContent :: FixityEnv -> FilePath -> String -> IO AnnotatedModule-parseContent fixities fp =-  parseContentNoFixity fp >=> (`transformA` fix fixities)+parseContent :: Parsers.LibDir -> FixityEnv -> FilePath -> String -> IO AnnotatedModule+parseContent libdir fixities fp =+  parseContentNoFixity libdir fp >=> (`transformA` fix fixities)  -- | Parse import statements. Each string must be a full import statement, -- including the keyword 'import'. Supports full import syntax.-parseImports :: [String] -> IO AnnotatedImports-parseImports []      = return mempty-parseImports imports = do+parseImports :: Parsers.LibDir -> [String] -> IO AnnotatedImports+parseImports _      []      = return mempty+parseImports libdir imports = do   -- imports start on second line, so delta offsets are correct-  am <- parseContentNoFixity "parseImports" $ "\n" ++ unlines imports+  am <- parseContentNoFixity libdir "parseImports" $ "\n" ++ unlines imports   ais <- transformA am $ pure . hsmodImports . unLoc   return $ trimA ais  -- | Parse a top-level 'HsDecl'.-parseDecl :: String -> IO AnnotatedHsDecl-parseDecl = parseHelper "parseDecl" Parsers.parseDecl+parseDecl :: Parsers.LibDir -> String -> IO AnnotatedHsDecl+parseDecl libdir str = parseHelper libdir "parseDecl" Parsers.parseDecl str  -- | Parse a 'HsExpr'.-parseExpr :: String -> IO AnnotatedHsExpr-parseExpr = parseHelper "parseExpr" Parsers.parseExpr+parseExpr :: Parsers.LibDir -> String -> IO AnnotatedHsExpr+parseExpr libdir str = parseHelper libdir "parseExpr" Parsers.parseExpr str  -- | Parse a 'Pat'.-parsePattern :: String -> IO AnnotatedPat-parsePattern = parseHelper "parsePattern" p-  where-    p flags fp str = fmap dLPatUnsafe <$> Parsers.parsePattern flags fp str+parsePattern :: Parsers.LibDir -> String -> IO AnnotatedPat+-- parsePattern libdir str = parseHelper libdir "parsePattern" p str+--   where+--     p flags fp str' = fmap dLPatUnsafe <$> Parsers.parsePattern flags fp str'+parsePattern libdir str = parseHelper libdir "parsePattern" Parsers.parsePattern str  -- | Parse a 'Stmt'.-parseStmt :: String -> IO AnnotatedStmt-parseStmt = parseHelper "parseStmt" Parsers.parseStmt+parseStmt :: Parsers.LibDir -> String -> IO AnnotatedStmt+parseStmt libdir str = do+  -- debugPrint Loud "parseStmt:for" [str]+  res <- parseHelper libdir "parseStmt" Parsers.parseStmt str+  return (setEntryDPA res (DifferentLine 1 0))+  -- return res + -- | Parse a 'HsType'.-parseType :: String -> IO AnnotatedHsType-parseType = parseHelper "parseType" Parsers.parseType+parseType :: Parsers.LibDir -> String -> IO AnnotatedHsType+parseType libdir str = parseHelper libdir "parseType" Parsers.parseType str -parseHelper :: FilePath -> Parsers.Parser a -> String -> IO (Annotated a)-parseHelper fp parser str = join $ Parsers.withDynFlags $ \dflags ->+parseHelper :: (ExactPrint a)+  => Parsers.LibDir -> FilePath -> Parsers.Parser a -> String -> IO (Annotated a)+parseHelper libdir fp parser str = join $ Parsers.withDynFlags libdir $ \dflags ->   case parser dflags fp str of #if __GLASGOW_HASKELL__ < 810     Left (_, msg) -> throwIO $ ErrorCall msg #else-    Left errBag -> do-      printBagOfErrors dflags errBag-      throwIO $ ErrorCall "parse failed"+    Left errBag -> throwIO $ ErrorCall (show $ bagToList errBag) #endif-    Right (anns, x) -> return $ unsafeMkA x anns 0+    Right x -> return $ unsafeMkA (makeDeltaAst x) 0 +-- type Parser a = GHC.DynFlags -> FilePath -> String -> ParseResult a++ ------------------------------------------------------------------------------- -debugDump :: Annotate a => Annotated (Located a) -> IO ()+debugDump :: (Data a, ExactPrint a) => Annotated a -> IO () debugDump ax = do   let     str = printA ax@@ -263,141 +335,181 @@       case transpose [printf "%2d" i | i <- [1 .. maxCol]] of         [ts, os] -> (ts, os)         _ -> ("", "")-  putStrLn $ unlines-    [ show k ++ "\n  " ++ show v | (k,v) <- M.toList (annsA ax) ]+  -- putStrLn $ unlines+  --   [ show k ++ "\n  " ++ show v | (k,v) <- M.toList (annsA ax) ]   putStrLn tens   putStrLn ones   putStrLn str+  putStrLn "------------------------------------"+  putStrLn $ showAstA ax+  putStrLn "------------------------------------" -cloneT :: (Data a, Typeable a, Monad m) => a -> TransformT m a-cloneT e = getAnnsT >>= flip graftT e+-- cloneT :: (Data a, Typeable a, Monad m) => a -> TransformT m a+-- cloneT e = getAnnsT >>= flip graftT e  -- The following definitions are all the same as the ones from ghc-exactprint, -- but the types are liberalized from 'Transform a' to 'TransformT m a'. transferEntryAnnsT   :: (HasCallStack, Data a, Data b, Monad m)-  => (KeywordId -> Bool)        -- transfer Anns matching predicate-  -> Located a                  -- from-  -> Located b                  -- to-  -> TransformT m ()+  => (TrailingAnn -> Bool)  -- transfer Anns matching predicate+  -> LocatedA a             -- from+  -> LocatedA b             -- to+  -> TransformT m (LocatedA b) transferEntryAnnsT p a b = do-  transferEntryDPT a b-  transferAnnsT p a b+  b' <- transferEntryDP a b+  transferAnnsT p a b'  -- | 'Transform' monad version of 'transferEntryDP' transferEntryDPT   :: (HasCallStack, Data a, Data b, Monad m)   => Located a -> Located b -> TransformT m ()-transferEntryDPT a b = modifyAnnsT (transferEntryDP a b)+-- transferEntryDPT a b = modifyAnnsT (transferEntryDP a b)+transferEntryDPT _a _b = error "transferEntryDPT" -tryTransferEntryDPT-  :: (Data a, Data b, Monad m)-  => Located a -> Located b -> TransformT m ()-tryTransferEntryDPT a b = modifyAnnsT $ \anns ->-  if M.member (mkAnnKey a) anns-    then transferEntryDP a b anns-    else anns+-- tryTransferEntryDPT+--   :: (Data a, Data b, Monad m)+--   => Located a -> Located b -> TransformT m ()+-- tryTransferEntryDPT a b = modifyAnnsT $ \anns ->+--   if M.member (mkAnnKey a) anns+--     then transferEntryDP a b anns+--     else anns  -- This function fails if b is not in Anns, which seems dumb, since we are inserting it.-transferEntryDP :: (HasCallStack, Data a, Data b) => Located a -> Located b -> Anns -> Anns-transferEntryDP a b anns = setEntryDP b dp anns'-  where-    maybeAnns = do -- Maybe monad-      anA <- M.lookup (mkAnnKey a) anns-      let anB = M.findWithDefault annNone (mkAnnKey b) anns-          anB' = anB { annEntryDelta = DP (0,0) }-      return (M.insert (mkAnnKey b) anB' anns, annLeadingCommentEntryDelta anA)-    (anns',dp) = fromMaybe-                  (error $ "transferEntryDP: lookup failed: " ++ show (mkAnnKey a))-                  maybeAnns+-- transferEntryDP :: (HasCallStack, Data a, Data b) => Located a -> Located b -> Anns -> Anns+-- transferEntryDP a b anns = setEntryDP b dp anns'+--   where+--     maybeAnns = do -- Maybe monad+--       anA <- M.lookup (mkAnnKey a) anns+--       let anB = M.findWithDefault annNone (mkAnnKey b) anns+--           anB' = anB { annEntryDelta = DP (0,0) }+--       return (M.insert (mkAnnKey b) anB' anns, annLeadingCommentEntryDelta anA)+--     (anns',dp) = fromMaybe+--                   (error $ "transferEntryDP: lookup failed: " ++ show (mkAnnKey a))+--                   maybeAnns  addAllAnnsT-  :: (HasCallStack, Data a, Data b, Monad m)-  => Located a -> Located b -> TransformT m ()-addAllAnnsT a b = modifyAnnsT (addAllAnns a b)+  :: (HasCallStack, Monoid an, Data a, Data b, MonadIO m, Typeable an)+  => LocatedAn an a -> LocatedAn an b -> TransformT m (LocatedAn an b)+addAllAnnsT a b = do+  -- AZ: to start with, just transfer the entry DP from a to b+  transferEntryDP a b -addAllAnns :: (HasCallStack, Data a, Data b) => Located a -> Located b -> Anns -> Anns-addAllAnns a b anns =-  fromMaybe-    (error $ "addAllAnns: lookup failed: " ++ show (mkAnnKey a)-      ++ " or " ++ show (mkAnnKey b))-    $ do ann <- M.lookup (mkAnnKey a) anns-         case M.lookup (mkAnnKey b) anns of-           Just ann' -> return $ M.insert (mkAnnKey b) (ann `annAdd` ann') anns-           Nothing -> return $ M.insert (mkAnnKey b) ann anns-  where annAdd ann ann' = ann'-          { annEntryDelta = annEntryDelta ann-          , annPriorComments = ((++) `on` annPriorComments) ann ann'-          , annFollowingComments = ((++) `on` annFollowingComments) ann ann'-          , annsDP = ((++) `on` annsDP) ann ann'-          } -isComma :: KeywordId -> Bool-isComma (G AnnComma) = True+-- addAllAnnsT+--   :: (HasCallStack, Data a, Data b, Monad m)+--   => Located a -> Located b -> TransformT m ()+-- addAllAnnsT a b = modifyAnnsT (addAllAnns a b)++-- addAllAnns :: (HasCallStack, Data a, Data b) => Located a -> Located b -> Anns -> Anns+-- addAllAnns a b anns =+--   fromMaybe+--     (error $ "addAllAnns: lookup failed: " ++ show (mkAnnKey a)+--       ++ " or " ++ show (mkAnnKey b))+--     $ do ann <- M.lookup (mkAnnKey a) anns+--          case M.lookup (mkAnnKey b) anns of+--            Just ann' -> return $ M.insert (mkAnnKey b) (ann `annAdd` ann') anns+--            Nothing -> return $ M.insert (mkAnnKey b) ann anns+--   where annAdd ann ann' = ann'+--           { annEntryDelta = annEntryDelta ann+--           , annPriorComments = ((++) `on` annPriorComments) ann ann'+--           , annFollowingComments = ((++) `on` annFollowingComments) ann ann'+--           , annsDP = ((++) `on` annsDP) ann ann'+--           }++transferAnchor :: LocatedA a -> LocatedA b -> LocatedA b+transferAnchor (L (SrcSpanAnn EpAnnNotUsed l)    _) lb = setAnchorAn lb (spanAsAnchor l) emptyComments+transferAnchor (L (SrcSpanAnn (EpAnn anc _ _) _) _) lb = setAnchorAn lb anc              emptyComments+++isComma :: TrailingAnn -> Bool+isComma (AddCommaAnn _) = True isComma _ = False -isCommentKeyword :: KeywordId -> Bool-isCommentKeyword (AnnComment _) = True+isCommentKeyword :: AnnKeywordId -> Bool+-- isCommentKeyword (AnnComment _) = True isCommentKeyword _ = False -isCommentAnnotation :: Annotation -> Bool-isCommentAnnotation Ann{..} =-  (not . null $ annPriorComments)-  || (not . null $ annFollowingComments)-  || any (isCommentKeyword . fst) annsDP+-- isCommentAnnotation :: Annotation -> Bool+-- isCommentAnnotation Ann{..} =+--   (not . null $ annPriorComments)+--   || (not . null $ annFollowingComments)+--   || any (isCommentKeyword . fst) annsDP -hasComments :: (Data a, Monad m) => Located a -> TransformT m Bool-hasComments e = do-  anns <- getAnnsT-  let b = isCommentAnnotation <$> M.lookup (mkAnnKey e) anns-  return $ fromMaybe False b+hasComments :: LocatedAn an a -> Bool+hasComments (L (SrcSpanAnn EpAnnNotUsed _) _) = False+hasComments (L (SrcSpanAnn (EpAnn anc _ cs) _) _)+  = case cs of+      EpaComments [] -> False+      EpaCommentsBalanced [] [] -> False+      _ -> True +-- hasComments :: (Data a, Monad m) => Located a -> TransformT m Bool+-- hasComments e = do+--   anns <- getAnnsT+--   let b = isCommentAnnotation <$> M.lookup (mkAnnKey e) anns+--   return $ fromMaybe False b++-- transferAnnsT+--   :: (Data a, Data b, Monad m)+--   => (KeywordId -> Bool)        -- transfer Anns matching predicate+--   -> Located a                  -- from+--   -> Located b                  -- to+--   -> TransformT m ()+-- transferAnnsT p a b = modifyAnnsT f+--   where+--     bKey = mkAnnKey b+--     f anns = fromMaybe anns $ do+--       anA <- M.lookup (mkAnnKey a) anns+--       anB <- M.lookup bKey anns+--       let anB' = anB { annsDP = annsDP anB ++ filter (p . fst) (annsDP anA) }+--       return $ M.insert bKey anB' anns+ transferAnnsT   :: (Data a, Data b, Monad m)-  => (KeywordId -> Bool)        -- transfer Anns matching predicate-  -> Located a                  -- from-  -> Located b                  -- to-  -> TransformT m ()-transferAnnsT p a b = modifyAnnsT f-  where-    bKey = mkAnnKey b-    f anns = fromMaybe anns $ do-      anA <- M.lookup (mkAnnKey a) anns-      anB <- M.lookup bKey anns-      let anB' = anB { annsDP = annsDP anB ++ filter (p . fst) (annsDP anA) }-      return $ M.insert bKey anB' anns+  => (TrailingAnn -> Bool)      -- transfer Anns matching predicate+  -> LocatedA a                 -- from+  -> LocatedA b                 -- to+  -> TransformT m (LocatedA b)+transferAnnsT p (L (SrcSpanAnn EpAnnNotUsed _) _) b = return b+transferAnnsT p (L (SrcSpanAnn (EpAnn anc (AnnListItem ts) cs) l) a) (L (SrcSpanAnn an lb) b) = do+  let ps = filter p ts+  let an' = case an of+        EpAnnNotUsed -> EpAnn (spanAsAnchor lb) (AnnListItem ps) emptyComments+        EpAnn ancb (AnnListItem tsb) csb -> EpAnn ancb (AnnListItem (tsb++ps)) csb+  return (L (SrcSpanAnn an' lb) b) --- | 'Transform' monad version of 'setEntryDP',---   which sets the entry 'DeltaPos' for an annotation.-setEntryDPT-  :: (Data a, Monad m)-  => Located a -> DeltaPos -> TransformT m ()-setEntryDPT ast dp = do-  modifyAnnsT (setEntryDP ast dp) --- | Set the true entry 'DeltaPos' from the annotation of a---   given AST element.-setEntryDP :: Data a => Located a -> DeltaPos -> Anns -> Anns---  The setEntryDP that comes with exactprint does some really confusing---  entry math around comments that I'm unconvinced is either correct or useful.-setEntryDP x dp anns = M.alter (Just . f . fromMaybe annNone) k anns-  where-    k = mkAnnKey x-    f ann = case annPriorComments ann of-              []       -> ann { annEntryDelta = dp }-              (c,_):cs -> ann { annPriorComments = (c,dp):cs }+-- -- | 'Transform' monad version of 'setEntryDP',+-- --   which sets the entry 'DeltaPos' for an annotation.+-- setEntryDPT+--   :: (Data a, Monad m)+--   => Located a -> DeltaPos -> TransformT m ()+-- setEntryDPT ast dp = do+--   modifyAnnsT (setEntryDP ast dp) +-- -- | Set the true entry 'DeltaPos' from the annotation of a+-- --   given AST element.+-- setEntryDP :: Data a => Located a -> DeltaPos -> Anns -> Anns+-- --  The setEntryDP that comes with exactprint does some really confusing+-- --  entry math around comments that I'm unconvinced is either correct or useful.+-- setEntryDP x dp anns = M.alter (Just . f . fromMaybe annNone) k anns+--   where+--     k = mkAnnKey x+--     f ann = case annPriorComments ann of+--               []       -> ann { annEntryDelta = dp }+--               (c,_):cs -> ann { annPriorComments = (c,dp):cs }+ -- Useful for figuring out what annotations should be on something. -- If you don't care about fixities, pass 'mempty' as the FixityEnv. -- String should be the entire module contents.-debugParse :: FixityEnv -> String -> IO ()-debugParse fixityEnv s = do+debugParse :: Parsers.LibDir -> FixityEnv -> String -> IO ()+debugParse libdir fixityEnv s = do   writeFile "debug.txt" s-  r <- parseModule "debug.txt"+  r <- parseModule libdir "debug.txt"   case r of     Left _ -> putStrLn "parse failed"-    Right (anns, modl) -> do-      let m = unsafeMkA modl anns 0+    Right modl -> do+      let m = unsafeMkA (makeDeltaAst modl) 0       putStrLn "parseModule"       debugDump m       void $ transformDebug m
Retrie/ExactPrint/Annotated.hs view
@@ -6,11 +6,12 @@ {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE DeriveDataTypeable #-} module Retrie.ExactPrint.Annotated   ( -- * Annotated     Annotated   , astA-  , annsA   , seedA   -- ** Synonyms   , AnnotatedHsDecl@@ -26,7 +27,10 @@   , graftA   , transformA   , trimA+  , setEntryDPA   , printA+  , printA'+  , showAstA     -- * Internal   , unsafeMkA   ) where@@ -36,14 +40,14 @@ import Data.Functor.Identity  import Language.Haskell.GHC.ExactPrint hiding-  ( cloneT-  , setEntryDP-  , setEntryDPT-  , transferEntryDPT-  , transferEntryDP+  ( -- cloneT+    -- setEntryDP+  -- , setEntryDPT+  -- , transferEntryDPT+    transferEntryDP   )-import Language.Haskell.GHC.ExactPrint.Annotate (Annotate)-import Language.Haskell.GHC.ExactPrint.Types (emptyAnns)+-- import Language.Haskell.GHC.ExactPrint.ExactPrint (ExactPrint(..))+import Language.Haskell.GHC.ExactPrint.Utils  import Retrie.GHC import Retrie.SYB@@ -56,7 +60,7 @@ type AnnotatedImport = Annotated (LImportDecl GhcPs) type AnnotatedImports = Annotated [LImportDecl GhcPs] type AnnotatedModule = Annotated (Located HsModule)-type AnnotatedPat = Annotated (Located (Pat GhcPs))+type AnnotatedPat = Annotated (LPat GhcPs) type AnnotatedStmt = Annotated (LStmt GhcPs (LHsExpr GhcPs))  -- | 'Annotated' packages an AST fragment with the annotations necessary to@@ -64,11 +68,10 @@ data Annotated ast = Annotated   { astA :: ast   -- ^ Examine the actual AST.-  , annsA  :: Anns-  -- ^ Annotations generated/consumed by ghc-exactprint   , seedA  :: Int   -- ^ Name supply used by ghc-exactprint to generate unique locations.   }+deriving instance (Data ast) => Data (Annotated ast)  instance Functor Annotated where   fmap f Annotated{..} = Annotated{astA = f astA, ..}@@ -81,29 +84,29 @@     (\ast -> Annotated{astA = ast, ..}) <$> f astA  instance Default ast => Default (Annotated ast) where-  def = Annotated D.def emptyAnns 0+  def = Annotated D.def 0  instance (Data ast, Monoid ast) => Semigroup (Annotated ast) where   (<>) = mappend  instance (Data ast, Monoid ast) => Monoid (Annotated ast) where-  mempty = Annotated mempty emptyAnns 0-  mappend a1 (Annotated ast2 anns _) =+  mempty = Annotated mempty 0+  mappend a1 (Annotated ast2 _) =     runIdentity $ transformA a1 $ \ ast1 ->-      mappend ast1 <$> graftT anns ast2+      mappend ast1 <$> return ast2  -- | Construct an 'Annotated'. -- This should really only be used in the parsing functions, hence the scary name. -- Don't use this unless you know what you are doing.-unsafeMkA :: ast -> Anns -> Int -> Annotated ast+unsafeMkA :: ast -> Int -> Annotated ast unsafeMkA = Annotated  -- | Transform an 'Annotated' thing. transformA   :: Monad m => Annotated ast1 -> (ast1 -> TransformT m ast2) -> m (Annotated ast2)-transformA (Annotated ast anns seed) f = do-  (ast',(anns',seed'),_) <- runTransformFromT seed anns (f ast)-  return $ Annotated ast' anns' seed'+transformA (Annotated ast seed) f = do+  (ast',seed',_) <- runTransformFromT seed (f ast)+  return $ Annotated ast' seed'  -- | Graft an 'Annotated' thing into the current transformation. -- The resulting AST will have proper annotations within the 'TransformT'@@ -118,7 +121,7 @@ -- >     return [d1, d2] -- graftA :: (Data ast, Monad m) => Annotated ast -> TransformT m ast-graftA (Annotated x anns _) = graftT anns x+graftA (Annotated x _) = return x  -- | Encapsulate something in the current transformation into an 'Annotated' -- thing. This is the inverse of 'graftT'. For example:@@ -130,7 +133,7 @@ -- >   return (y, ys) -- pruneA :: (Data ast, Monad m) => ast -> TransformT m (Annotated ast)-pruneA ast = Annotated ast <$> getAnnsT <*> gets snd+pruneA ast = Annotated ast <$> gets id  -- | Trim the annotation data to only include annotations for 'ast'. -- (Usually, the annotation data is a superset of what is necessary.)@@ -145,6 +148,18 @@     nil :: Annotated ()     nil = mempty +setEntryDPA :: (Monoid an)+            => Annotated (LocatedAn an ast) -> DeltaPos -> Annotated (LocatedAn an ast)+setEntryDPA (Annotated ast s) dp = Annotated (setEntryDP ast dp) s+ -- | Exactprint an 'Annotated' thing.-printA :: Annotate ast => Annotated (Located ast) -> String-printA (Annotated ast anns _) = exactPrint ast anns+printA :: (Data ast, ExactPrint ast) => Annotated ast -> String+printA (Annotated ast _) = exactPrint ast+    `debug` ("printA:" ++ showAst ast)++printA' :: (Data ast, ExactPrint ast) => Annotated ast -> String+printA' (Annotated ast _) = "[" ++ exactPrint ast ++ "]\n" ++ showAst ast++-- | showAst an 'Annotated' thing.+showAstA :: (Data ast, ExactPrint ast) => Annotated ast -> String+showAstA (Annotated ast _) = showAst ast
Retrie/Expr.hs view
@@ -18,6 +18,7 @@   , mkLams   , mkLet   , mkLoc+  , mkLocA   , mkLocatedHsVar   , mkVarPat   , mkTyVar@@ -25,8 +26,8 @@   , parenifyT   , parenifyP   , patToExpr-  , patToExprA-  , setAnnsFor+  -- , patToExprA+  -- , setAnnsFor   , unparen   , unparenP   , unparenT@@ -35,8 +36,9 @@  import Control.Monad.State.Lazy import Data.Functor.Identity-import qualified Data.Map as M+-- import qualified Data.Map as M import Data.Maybe+-- import Data.Void  import Retrie.AlphaEnv import Retrie.ExactPrint@@ -44,40 +46,71 @@ import Retrie.GHC import Retrie.SYB import Retrie.Types+import Retrie.Util  ------------------------------------------------------------------------------- -mkLocatedHsVar :: Monad m => Located RdrName -> TransformT m (LHsExpr GhcPs)-mkLocatedHsVar v = do+mkLocatedHsVar :: Monad m => LocatedN RdrName -> TransformT m (LHsExpr GhcPs)+mkLocatedHsVar ln@(L l n) = do   -- This special casing for [] is gross, but this is apparently how the   -- annotations work.-  let anns =-        case occNameString (occName (unLoc v)) of-          "[]" -> [(G AnnOpenS, DP (0,0)), (G AnnCloseS, DP (0,0))]-          _    -> [(G AnnVal, DP (0,0))]-  r <- setAnnsFor v anns-  lv@(L _ v') <- cloneT (noLoc (HsVar noExtField r))-  case v' of-    HsVar _ x ->-      swapEntryDPT x lv-    _ -> return ()-  return lv+  -- let anns =+  --       case occNameString (occName (unLoc v)) of+  --         "[]" -> [(G AnnOpenS, DP (0,0)), (G AnnCloseS, DP (0,0))]+  --         _    -> [(G AnnVal, DP (0,0))]+  -- r <- setAnnsFor v anns+  -- return (L (moveAnchor l)  (HsVar noExtField n))+  mkLocA (SameLine 0)  (HsVar noExtField (L (setMoveAnchor (SameLine 0) l) n)) +-- TODO: move to ghc-exactprint+setMoveAnchor :: (Monoid an) => DeltaPos -> SrcAnn an -> SrcAnn an+setMoveAnchor dp (SrcSpanAnn EpAnnNotUsed l)+  = SrcSpanAnn (EpAnn (dpAnchor l dp) mempty emptyComments) l+setMoveAnchor dp (SrcSpanAnn (EpAnn (Anchor a _) an cs) l)+  = SrcSpanAnn (EpAnn (Anchor a (MovedAnchor dp)) an cs) l++-- TODO: move to ghc-exactprint+dpAnchor :: SrcSpan -> DeltaPos -> Anchor+dpAnchor l dp = Anchor (realSrcSpan l) (MovedAnchor dp)+ ------------------------------------------------------------------------------- -setAnnsFor :: (Data e, Monad m)-           => Located e -> [(KeywordId, DeltaPos)] -> TransformT m (Located e)-setAnnsFor e anns = modifyAnnsT (M.alter f (mkAnnKey e)) >> return e-  where f Nothing  = Just annNone { annsDP = anns }-        f (Just a) = Just a { annsDP = M.toList-                                     $ M.union (M.fromList anns)-                                               (M.fromList (annsDP a)) }+-- setAnnsFor :: (Data e, Monad m)+--            => Located e -> [(KeywordId, DeltaPos)] -> TransformT m (Located e)+-- setAnnsFor e anns = modifyAnnsT (M.alter f (mkAnnKey e)) >> return e+--   where f Nothing  = Just annNone { annsDP = anns }+--         f (Just a) = Just a { annsDP = M.toList+--                                      $ M.union (M.fromList anns)+--                                                (M.fromList (annsDP a)) }  mkLoc :: (Data e, Monad m) => e -> TransformT m (Located e) mkLoc e = do-  le <- L <$> uniqueSrcSpanT <*> pure e-  setAnnsFor le []+  L <$> uniqueSrcSpanT <*> pure e +-- ++AZ++:TODO: move to ghc-exactprint+mkLocA :: (Data e, Monad m, Monoid an)+  => DeltaPos -> e -> TransformT m (LocatedAn an e)+mkLocA dp e = mkLocAA dp mempty e++-- ++AZ++:TODO: move to ghc-exactprint+mkLocAA :: (Data e, Monad m) => DeltaPos -> an -> e -> TransformT m (LocatedAn an e)+mkLocAA dp an e = do+  l <- uniqueSrcSpanT+  let anc = Anchor (realSrcSpan l) (MovedAnchor dp)+  return (L (SrcSpanAnn (EpAnn anc an emptyComments) l) e)+++-- ++AZ++:TODO: move to ghc-exactprint+mkEpAnn :: Monad m => DeltaPos -> an -> TransformT m (EpAnn an)+mkEpAnn dp an = do+  anc <- mkAnchor dp+  return $ EpAnn anc an emptyComments++mkAnchor :: Monad m => DeltaPos -> TransformT m (Anchor)+mkAnchor dp = do+  l <- uniqueSrcSpanT+  return (Anchor (realSrcSpan l) (MovedAnchor dp))+ -------------------------------------------------------------------------------  mkLams@@ -86,55 +119,69 @@   -> TransformT IO (LHsExpr GhcPs) mkLams [] e = return e mkLams vs e = do+  ancg <- mkAnchor (SameLine 0)+  ancm <- mkAnchor (SameLine 0)   let+    ga = GrhsAnn Nothing (AddEpAnn AnnRarrow (EpaDelta (SameLine 1) []))+    ang = EpAnn ancg ga emptyComments+    anm = EpAnn ancm [(AddEpAnn AnnLam (EpaDelta (SameLine 0) []))] emptyComments+    L l (Match x ctxt pats (GRHSs cs grhs binds)) = mkMatch LambdaExpr vs e emptyLocalBinds+    grhs' = case grhs of+      [L lg (GRHS an guards rhs)] -> [L lg (GRHS ang guards rhs)]+      _ -> fail "mkLams: lambda expression can only have a single grhs!"+  matches <- mkLocA (SameLine 0) [L l (Match anm ctxt pats (GRHSs cs grhs' binds))]+  let     mg =-      mkMatchGroup Generated [mkMatch LambdaExpr vs e (noLoc emptyLocalBinds)]-  m' <- case unLoc $ mg_alts mg of-    [m] -> setAnnsFor m [(G AnnLam, DP (0,0)),(G AnnRarrow, DP (0,1))]-    _   -> fail "mkLams: lambda expression can only have a single match!"-  cloneT $ noLoc $ HsLam noExtField mg { mg_alts = noLoc [m'] }+      mkMatchGroup Generated matches+  mkLocA (SameLine 1) $ HsLam noExtField mg  mkLet :: Monad m => HsLocalBinds GhcPs -> LHsExpr GhcPs -> TransformT m (LHsExpr GhcPs) mkLet EmptyLocalBinds{} e = return e mkLet lbs e = do-  llbs <- mkLoc lbs-  le <- mkLoc $ HsLet noExtField llbs e-  setAnnsFor le [(G AnnLet, DP (0,0)), (G AnnIn, DP (1,1))]+  an <- mkEpAnn (DifferentLine 1 5)+                (AnnsLet {+                   alLet = EpaDelta (SameLine 0) [],+                   alIn = EpaDelta (DifferentLine 1 1) []+                 })+  le <- mkLocA (SameLine 1) $ HsLet an lbs e+  return le -mkApps :: Monad m => LHsExpr GhcPs -> [LHsExpr GhcPs] -> TransformT m (LHsExpr GhcPs)+++mkApps :: MonadIO m => LHsExpr GhcPs -> [LHsExpr GhcPs] -> TransformT m (LHsExpr GhcPs) mkApps e []     = return e mkApps f (a:as) = do-  f' <- mkLoc (HsApp noExtField f a)+  -- lift $ liftIO $ debugPrint Loud "mkApps:f="  [showAst f]+  f' <- mkLocA (SameLine 0) (HsApp noAnn f a)   mkApps f' as  -- GHC never generates HsAppTy in the parser, using HsAppsTy to keep a list -- of types. mkHsAppsTy :: Monad m => [LHsType GhcPs] -> TransformT m (LHsType GhcPs) mkHsAppsTy [] = error "mkHsAppsTy: empty list"-mkHsAppsTy (t:ts) = foldM (\t1 t2 -> mkLoc (HsAppTy noExtField t1 t2)) t ts+mkHsAppsTy (t:ts) = foldM (\t1 t2 -> mkLocA (SameLine 1) (HsAppTy noExtField t1 t2)) t ts -mkTyVar :: Monad m => Located RdrName -> TransformT m (LHsType GhcPs)+mkTyVar :: Monad m => LocatedN RdrName -> TransformT m (LHsType GhcPs) mkTyVar nm = do-  tv <- mkLoc (HsTyVar noExtField NotPromoted nm)-  _ <- setAnnsFor nm [(G AnnVal, DP (0,0))]-  swapEntryDPT tv nm-  return tv+  tv <- mkLocA (SameLine 1) (HsTyVar noAnn NotPromoted nm)+  -- _ <- setAnnsFor nm [(G AnnVal, DP (0,0))]+  (tv', nm') <- swapEntryDPT tv nm+  return tv' -mkVarPat :: Monad m => Located RdrName -> TransformT m (LPat GhcPs)-mkVarPat nm = cLPat <$> mkLoc (VarPat noExtField nm)+mkVarPat :: Monad m => LocatedN RdrName -> TransformT m (LPat GhcPs)+mkVarPat nm = cLPat <$> mkLocA (SameLine 1) (VarPat noExtField nm) +-- type HsConPatDetails p = HsConDetails (HsPatSigType (NoGhcTc p)) (LPat p) (HsRecFields p (LPat p))+ mkConPatIn   :: Monad m-  => Located RdrName+  => LocatedN RdrName   -> HsConPatDetails GhcPs-  -> TransformT m (Located (Pat GhcPs))+  -- -> HsConDetails Void (LocatedN RdrName) [RecordPatSynField GhcPs]+  -> TransformT m (LPat GhcPs) mkConPatIn patName params = do-#if __GLASGOW_HASKELL__ < 900-  p <- mkLoc $ ConPatIn patName params-#else-  p <- mkLoc $ ConPat noExtField patName params-#endif-  setEntryDPT p (DP (0,0))+  p <- mkLocA (SameLine 0) $ ConPat noAnn patName params+  -- setEntryDPT p (DP (0,0))   return p  -------------------------------------------------------------------------------@@ -171,19 +218,22 @@       , let r = mkVarUnqual (mkFastString ('w' : show (i :: Int)))       , p r ] -patToExprA :: AlphaEnv -> AnnotatedPat -> AnnotatedHsExpr-patToExprA env pat = runIdentity $ transformA pat $ \ p ->-  fst <$> runStateT (patToExpr $ cLPat p) (wildSupplyAlphaEnv env, [])+-- patToExprA :: AlphaEnv -> AnnotatedPat -> AnnotatedHsExpr+-- patToExprA env pat = runIdentity $ transformA pat $ \ p ->+--   fst <$> runStateT (patToExpr $ cLPat p) (wildSupplyAlphaEnv env, []) -patToExpr :: Monad m => LPat GhcPs -> PatQ m (LHsExpr GhcPs)+patToExpr :: MonadIO m => LPat GhcPs -> PatQ m (LHsExpr GhcPs) patToExpr orig = case dLPat orig of   Nothing -> error "patToExpr: called on unlocated Pat!"   Just lp@(L _ p) -> do     e <- go p-    lift $ transferEntryDPT lp e-    return e+    lift $ transferEntryDP lp e   where-    go WildPat{} = newWildVar >>= lift . mkLocatedHsVar . noLoc+    -- go :: Pat GhcPs -> PatQ m (LHsExpr GhcPs)+    go WildPat{} = do+      w <- newWildVar+      v <- lift $ mkLocA (SameLine 1) w+      lift $ mkLocatedHsVar v #if __GLASGOW_HASKELL__ < 900     go XPat{} = error "patToExpr XPat"     go CoPat{} = error "patToExpr CoPat"@@ -197,24 +247,29 @@     go (ListPat _ ps) = do       ps' <- mapM patToExpr ps       lift $ do-        el <- mkLoc $ ExplicitList noExtField Nothing ps'-        setAnnsFor el [(G AnnOpenS, DP (0,0)), (G AnnCloseS, DP (0,0))]+        an <- mkEpAnn (SameLine 1)+                      (AnnList Nothing (Just (AddEpAnn AnnOpenS d0)) (Just (AddEpAnn AnnCloseS d0)) [] [])+        el <- mkLocA (SameLine 1) $ ExplicitList an ps'+        -- setAnnsFor el [(G AnnOpenS, DP (0,0)), (G AnnCloseS, DP (0,0))]+        return el     go (LitPat _ lit) = lift $ do-      lit' <- cloneT lit-      mkLoc $ HsLit noExtField lit'+      -- lit' <- cloneT lit+      mkLocA (SameLine 1) $ HsLit noAnn lit     go (NPat _ llit mbNeg _) = lift $ do-      L _ lit <- cloneT llit-      e <- mkLoc $ HsOverLit noExtField lit-      negE <- maybe (return e) (mkLoc . NegApp noExtField e) mbNeg-      addAllAnnsT llit negE+      -- L _ lit <- cloneT llit+      e <- mkLocA (SameLine 1) $ HsOverLit noAnn (unLoc llit)+      negE <- maybe (return e) (mkLocA (SameLine 0) . NegApp noAnn e) mbNeg+      -- addAllAnnsT llit negE       return negE-    go (ParPat _ p') = lift . mkParen (HsPar noExtField) =<< patToExpr p'+    go (ParPat an p') = do+      p <- patToExpr p'+      lift $ mkLocA (SameLine 1) (HsPar an p)     go SigPat{} = error "patToExpr SigPat"-    go (TuplePat _ ps boxity) = do+    go (TuplePat an ps boxity) = do       es <- forM ps $ \pat -> do         e <- patToExpr pat-        lift $ mkLoc $ Present noExtField e-      lift $ mkLoc $ ExplicitTuple noExtField es boxity+        return $ Present noAnn e+      lift $ mkLocA (SameLine 1) $ ExplicitTuple an es boxity     go (VarPat _ i) = lift $ mkLocatedHsVar i     go AsPat{} = error "patToExpr AsPat"     go NPlusKPat{} = error "patToExpr NPlusKPat"@@ -222,24 +277,26 @@     go SumPat{} = error "patToExpr SumPat"     go ViewPat{} = error "patToExpr ViewPat" -conPatHelper :: Monad m-             => Located RdrName+conPatHelper :: MonadIO m+             => LocatedN RdrName              -> HsConPatDetails GhcPs              -> PatQ m (LHsExpr GhcPs) conPatHelper con (InfixCon x y) =-  lift . mkLoc =<< OpApp <$> pure noExtField+  lift . mkLocA (SameLine 1)+               =<< OpApp <$> pure noAnn                          <*> patToExpr x                          <*> lift (mkLocatedHsVar con)                          <*> patToExpr y-conPatHelper con (PrefixCon xs) = do+conPatHelper con (PrefixCon tyargs xs) = do   f <- lift $ mkLocatedHsVar con   as <- mapM patToExpr xs+  -- lift $ lift $ liftIO $ debugPrint Loud "conPatHelper:f="  [showAst f]   lift $ mkApps f as conPatHelper _ _ = error "conPatHelper RecCon"  ------------------------------------------------------------------------------- -grhsToExpr :: LGRHS p (LHsExpr p) -> LHsExpr p+grhsToExpr :: LGRHS GhcPs (LHsExpr GhcPs) -> LHsExpr GhcPs grhsToExpr (L _ (GRHS _ [] e)) = e grhsToExpr (L _ (GRHS _ (_:_) e)) = e -- not sure about this grhsToExpr _ = error "grhsToExpr"@@ -255,7 +312,7 @@   :: Monad m => Context -> LHsExpr GhcPs -> TransformT m (LHsExpr GhcPs) parenify Context{..} le@(L _ e)   | needed ctxtParentPrec (precedence ctxtFixityEnv e) && needsParens e =-    mkParen (HsPar noExtField) le+    mkParen' (getEntryDP le) (\an -> HsPar an (setEntryDP le (SameLine 0)))   | otherwise = return le   where            {- parent -}               {- child -}@@ -268,6 +325,7 @@ getUnparened :: Data k => k -> k getUnparened = mkT unparen `extT` unparenT `extT` unparenP +-- TODO: what about comments? unparen :: LHsExpr GhcPs -> LHsExpr GhcPs unparen (L _ (HsPar _ e)) = e unparen e = e@@ -276,11 +334,21 @@ needsParens :: HsExpr GhcPs -> Bool needsParens = hsExprNeedsParens (PprPrec 10) -mkParen :: (Data x, Monad m) => (Located x -> x) -> Located x -> TransformT m (Located x)+mkParen :: (Data x, Monad m, Monoid an, Typeable an)+  => (LocatedAn an x -> x) -> LocatedAn an x -> TransformT m (LocatedAn an x) mkParen k e = do-  pe <- mkLoc (k e)-  _ <- setAnnsFor pe [(G AnnOpenP, DP (0,0)), (G AnnCloseP, DP (0,0))]-  swapEntryDPT e pe+  pe <- mkLocA (SameLine 1) (k e)+  -- _ <- setAnnsFor pe [(G AnnOpenP, DP (0,0)), (G AnnCloseP, DP (0,0))]+  (e0,pe0) <- swapEntryDPT e pe+  return pe0++mkParen' :: (Data x, Monad m, Monoid an)+         => DeltaPos -> (EpAnn AnnParen -> x) -> TransformT m (LocatedAn an x)+mkParen' dp k = do+  let an = AnnParen AnnParens d0 d0+  l <- uniqueSrcSpanT+  let anc = Anchor (realSrcSpan l) (MovedAnchor (SameLine 0))+  pe <- mkLocA dp (k (EpAnn anc an emptyComments))   return pe  -- This explicitly operates on 'Located (Pat GhcPs)' instead of 'LPat GhcPs'@@ -288,12 +356,12 @@ parenifyP   :: Monad m   => Context-  -> Located (Pat GhcPs)-  -> TransformT m (Located (Pat GhcPs))+  -> LPat GhcPs+  -> TransformT m (LPat GhcPs) parenifyP Context{..} p@(L _ pat)   | IsLhs <- ctxtParentPrec   , needed pat =-    mkParen (ParPat noExtField . cLPat) p+    mkParen' (getEntryDP p) (\an -> ParPat an (setEntryDP p (SameLine 0)))   | otherwise = return p   where     needed BangPat{}                          = False@@ -309,14 +377,14 @@     needed (ConPatIn _ (PrefixCon []))        = False     needed ConPatOut{pat_args = PrefixCon []} = False #else-    needed (ConPat _ _ (PrefixCon []))        = False+    needed (ConPat _ _ (PrefixCon _ []))      = False #endif     needed _                                  = True  parenifyT   :: Monad m => Context -> LHsType GhcPs -> TransformT m (LHsType GhcPs) parenifyT Context{..} lty@(L _ ty)-  | needed ty = mkParen (HsParTy noExtField) lty+  | needed ty = mkParen' (getEntryDP lty) (\an -> HsParTy an (setEntryDP lty (SameLine 0)))   | otherwise = return lty   where     needed HsAppTy{}@@ -328,23 +396,22 @@ unparenT (L _ (HsParTy _ ty)) = ty unparenT ty = ty --- This explicitly operates on 'Located (Pat GhcPs)' instead of 'LPat GhcPs'--- to ensure 'dLPat' was called on the input.-unparenP :: Located (Pat GhcPs) -> Located (Pat GhcPs)-unparenP (L _ (ParPat _ p)) | Just lp <- dLPat p = lp+unparenP :: LPat GhcPs -> LPat GhcPs+unparenP (L _ (ParPat _ p)) = p unparenP p = p  --------------------------------------------------------------------  bitraverseHsConDetails   :: Applicative m-  => (arg -> m arg')+  => ([tyarg] -> m [tyarg'])+  -> (arg -> m arg')   -> (rec -> m rec')-  -> HsConDetails arg rec-  -> m (HsConDetails arg' rec')-bitraverseHsConDetails argf _ (PrefixCon args) =-  PrefixCon <$> (argf `traverse` args)-bitraverseHsConDetails _ recf (RecCon r) =+  -> HsConDetails tyarg arg rec+  -> m (HsConDetails tyarg' arg' rec')+bitraverseHsConDetails argt argf _ (PrefixCon tyargs args) =+  PrefixCon <$> (argt tyargs) <*> (argf `traverse` args)+bitraverseHsConDetails _ _ recf (RecCon r) =   RecCon <$> recf r-bitraverseHsConDetails argf _ (InfixCon a1 a2) =+bitraverseHsConDetails _ argf _ (InfixCon a1 a2) =   InfixCon <$> argf a1 <*> argf a2
Retrie/Fixity.hs view
@@ -33,7 +33,7 @@ lookupOp (L _ e) | Just n <- varRdrName e = lookupOpRdrName n lookupOp _ = error "lookupOp: called with non-variable!" -lookupOpRdrName :: Located RdrName -> FixityEnv -> Fixity+lookupOpRdrName :: LocatedN RdrName -> FixityEnv -> Fixity lookupOpRdrName (L _ n) (FixityEnv env) =   maybe defaultFixity snd $ lookupFsEnv env (occNameFS $ occName n) 
Retrie/GHC.hs view
@@ -7,119 +7,64 @@ {-# LANGUAGE RecordWildCards #-} module Retrie.GHC   ( module Retrie.GHC-#if __GLASGOW_HASKELL__ < 900-  , module ApiAnnotation-  , module Bag-  , module BasicTypes-  , module FastString-  , module FastStringEnv-#if __GLASGOW_HASKELL__ < 810-  , module HsExpr-  , module HsSyn-#else-  , module ErrUtils-  , module GHC.Hs.Expr-  , module GHC.Hs-#endif-  , module Module-  , module Name-  , module OccName-  , module RdrName-  , module SrcLoc-  , module Unique-  , module UniqFM-  , module UniqSet-#else-  -- GHC >= 9.0   , module GHC.Data.Bag   , module GHC.Data.FastString   , module GHC.Data.FastString.Env-  , module GHC.Utils.Error+  , module GHC.Driver.Errors   , module GHC.Hs+  , module GHC.Hs.Expr   , module GHC.Parser.Annotation+  , module GHC.Parser.Errors.Ppr   , module GHC.Types.Basic+  , module GHC.Types.Error+  , module GHC.Types.Fixity   , module GHC.Types.Name+  , module GHC.Types.Name.Occurrence   , module GHC.Types.Name.Reader+  , module GHC.Types.SourceText   , module GHC.Types.SrcLoc   , module GHC.Types.Unique   , module GHC.Types.Unique.FM   , module GHC.Types.Unique.Set-  , module GHC.Unit-#endif+  , module GHC.Unit.Module.Name   ) where -#if __GLASGOW_HASKELL__ < 900-import ApiAnnotation-import Bag-import BasicTypes-import FastString-import FastStringEnv-#if __GLASGOW_HASKELL__ < 810-import HsExpr-import HsSyn hiding (HsModule)-import qualified HsSyn as HS-#else-import ErrUtils-import GHC.Hs.Expr-import GHC.Hs hiding (HsModule)-import qualified GHC.Hs as HS-#endif-import Module-import Name-import OccName-import RdrName-import SrcLoc-import Unique-import UniqFM-import UniqSet-#else--- GHC >= 9.0+import GHC+import GHC.Builtin.Names import GHC.Data.Bag import GHC.Data.FastString import GHC.Data.FastString.Env-import GHC.Utils.Error+import GHC.Driver.Errors import GHC.Hs+import GHC.Hs.Expr import GHC.Parser.Annotation-import GHC.Types.Basic+import GHC.Parser.Errors.Ppr+import GHC.Types.Basic hiding (EP)+import GHC.Types.Error+import GHC.Types.Fixity import GHC.Types.Name+import GHC.Types.Name.Occurrence import GHC.Types.Name.Reader+import GHC.Types.SourceText import GHC.Types.SrcLoc import GHC.Types.Unique import GHC.Types.Unique.FM import GHC.Types.Unique.Set-import GHC.Unit-#endif+import GHC.Unit.Module.Name  import Data.Bifunctor (second) import Data.Maybe -#if __GLASGOW_HASKELL__ < 900-type HsModule = HS.HsModule GhcPs-#endif--cLPat :: Located (Pat (GhcPass p)) -> LPat (GhcPass p)-#if __GLASGOW_HASKELL__ == 808-cLPat = composeSrcSpan-#else+cLPat :: LPat (GhcPass p) -> LPat (GhcPass p) cLPat = id-#endif  -- | Only returns located pat if there is a genuine location available.-dLPat :: LPat (GhcPass p) -> Maybe (Located (Pat (GhcPass p)))-#if __GLASGOW_HASKELL__ == 808-dLPat (XPat (L s p)) = Just $ L s $ stripSrcSpanPat p-dLPat _ = Nothing-#else+dLPat :: LPat (GhcPass p) -> Maybe (LPat (GhcPass p)) dLPat = Just-#endif  -- | Will always give a location, but it may be noSrcSpan.-dLPatUnsafe :: LPat (GhcPass p) -> Located (Pat (GhcPass p))-#if __GLASGOW_HASKELL__ == 808-dLPatUnsafe = dL-#else+dLPatUnsafe :: LPat (GhcPass p) -> LPat (GhcPass p) dLPatUnsafe = id-#endif  #if __GLASGOW_HASKELL__ == 808 stripSrcSpanPat :: LPat (GhcPass p) -> Pat (GhcPass p)@@ -134,15 +79,16 @@ fsDot :: FastString fsDot = mkFastString "." -varRdrName :: HsExpr p -> Maybe (Located (IdP p))+varRdrName :: HsExpr p -> Maybe (LIdP p) varRdrName (HsVar _ n) = Just n varRdrName _ = Nothing -tyvarRdrName :: HsType p -> Maybe (Located (IdP p))+tyvarRdrName :: HsType p -> Maybe (LIdP p) tyvarRdrName (HsTyVar _ _ n) = Just n tyvarRdrName _ = Nothing -fixityDecls :: HsModule -> [(Located RdrName, Fixity)]+-- fixityDecls :: HsModule -> [(LIdP p, Fixity)]+fixityDecls :: HsModule -> [(LocatedN RdrName, Fixity)] fixityDecls m =   [ (nm, fixity)   | L _ (SigD _ (FixSig _ (FixitySig _ nms fixity))) <- hsmodDecls m@@ -156,36 +102,20 @@       map unLoc (tyBindersToLocatedRdrNames (fromMaybe [] tyBs)) ++       ruleBindersToQs valBs   in [ RuleInfo{..} ]-#if __GLASGOW_HASKELL__ < 900-ruleInfo XRuleDecl{} = []-#endif  ruleBindersToQs :: [LRuleBndr GhcPs] -> [RdrName] ruleBindersToQs bs = catMaybes   [ case b of       RuleBndr _ (L _ v) -> Just v       RuleBndrSig _ (L _ v) _ -> Just v-#if __GLASGOW_HASKELL__ < 900-      XRuleBndr{} -> Nothing-#endif   | L _ b <- bs   ] -#if __GLASGOW_HASKELL__ < 900-tyBindersToLocatedRdrNames :: [LHsTyVarBndr GhcPs] -> [Located RdrName]-#else-tyBindersToLocatedRdrNames :: [LHsTyVarBndr () GhcPs] -> [Located RdrName]-#endif+tyBindersToLocatedRdrNames :: [LHsTyVarBndr s GhcPs] -> [LocatedN RdrName] tyBindersToLocatedRdrNames vars = catMaybes   [ case var of-#if __GLASGOW_HASKELL__ < 900-      UserTyVar _ v -> Just v-      KindedTyVar _ v _ -> Just v-      XTyVarBndr{} -> Nothing-#else       UserTyVar _ _ v -> Just v       KindedTyVar _ _ v _ -> Just v-#endif   | L _ var <- vars ]  data RuleInfo = RuleInfo@@ -201,11 +131,10 @@ #endif  overlaps :: SrcSpan -> SrcSpan -> Bool-overlaps ss1 ss2-  | Just s1 <- getRealSpan ss1, Just s2 <- getRealSpan ss2 =-    srcSpanFile s1 == srcSpanFile s2 &&-    ((srcSpanStartLine s1, srcSpanStartCol s1) `within` s2 ||-     (srcSpanEndLine s1, srcSpanEndCol s1) `within` s2)+overlaps (RealSrcSpan s1 _) (RealSrcSpan s2 _) =+     srcSpanFile s1 == srcSpanFile s2 &&+     ((srcSpanStartLine s1, srcSpanStartCol s1) `within` s2 ||+      (srcSpanEndLine s1, srcSpanEndCol s1) `within` s2) overlaps _ _ = False  within :: (Int, Int) -> RealSrcSpan -> Bool@@ -218,17 +147,13 @@ lineCount :: [SrcSpan] -> Int lineCount ss = sum   [ srcSpanEndLine s - srcSpanStartLine s + 1-  | Just s <- map getRealSpan ss+  | RealSrcSpan s _ <- ss   ]  showRdrs :: [RdrName] -> String showRdrs = show . map (occNameString . occName) -#if __GLASGOW_HASKELL__ < 900-uniqBag :: Uniquable a => [(a,b)] -> UniqFM [b]-#else uniqBag :: Uniquable a => [(a,b)] -> UniqFM a [b]-#endif uniqBag = listToUFM_C (++) . map (second pure)  getRealLoc :: SrcLoc -> Maybe RealSrcLoc
Retrie/GroundTerms.hs view
@@ -72,10 +72,8 @@     printer :: GenericQ [String]     printer = mkQ [] printExpr `extQ` printTy -    anns = annsA qPattern-     printExpr :: LHsExpr GhcPs -> [String]-    printExpr e = [exactPrint e anns]+    printExpr e = [exactPrint (setEntryDP e (SameLine 0))]      printTy :: LHsType GhcPs -> [String]-    printTy t = [exactPrint t anns]+    printTy t = [exactPrint (setEntryDP t (SameLine 0))]
Retrie/Monad.hs view
@@ -36,7 +36,7 @@  import Retrie.Context import Retrie.CPP-import Retrie.ExactPrint+import Retrie.ExactPrint hiding (rs) import Retrie.Fixity import Retrie.GroundTerms import Retrie.Query
Retrie/Options.hs view
@@ -60,20 +60,20 @@ type Options = Options_ [Rewrite Universe] AnnotatedImports  -- | Parse options using the given 'FixityEnv'.-parseOptions :: FixityEnv -> IO Options-parseOptions fixityEnv = do+parseOptions :: LibDir -> FixityEnv -> IO Options+parseOptions libdir fixityEnv = do   p <- getOptionsParser fixityEnv   opts <- execParser (info (p <**> helper) fullDesc)-  resolveOptions opts+  resolveOptions libdir opts  -- | Create 'Rewrite's from string specifications of rewrites. -- We expose this from "Retrie" with a nicer type signature as -- 'Retrie.Options.parseRewrites'. We have it here so we can use it with -- 'ProtoOptions'.-parseRewritesInternal :: Options_ a b -> [RewriteSpec] -> IO [Rewrite Universe]-parseRewritesInternal Options{..} = parseRewriteSpecs parser fixityEnv+parseRewritesInternal :: LibDir -> Options_ a b -> [RewriteSpec] -> IO [Rewrite Universe]+parseRewritesInternal libdir Options{..} = parseRewriteSpecs libdir parser fixityEnv   where-    parser fp = parseCPPFile (parseContent fixityEnv) (targetDir </> fp)+    parser fp = parseCPPFile (parseContent libdir fixityEnv) (targetDir </> fp)  -- | Controls the ultimate action taken by 'apply'. The default action is -- 'ExecRewrite'.@@ -350,18 +350,18 @@ -- | Resolve 'ProtoOptions' into 'Options'. Parses rewrites into 'Rewrite's, -- parses imports, validates options, and extends 'fixityEnv' with any -- declared fixities in the target directory.-resolveOptions :: ProtoOptions -> IO Options-resolveOptions protoOpts = do+resolveOptions :: LibDir -> ProtoOptions -> IO Options+resolveOptions libdir protoOpts = do   absoluteTargetDir <- makeAbsolute (targetDir protoOpts)   opts@Options{..} <--    addLocalFixities protoOpts { targetDir = absoluteTargetDir }-  parsedImports <- parseImports additionalImports+    addLocalFixities libdir protoOpts { targetDir = absoluteTargetDir }+  parsedImports <- parseImports libdir additionalImports   debugPrint verbosity "Imports:" $     runIdentity $ fmap astA $ transformA parsedImports $ \ imps -> do-      anns <- getAnnsT-      return $ map (`exactPrint` anns) imps-  rrs <- parseRewritesInternal opts rewrites-  es <- parseRewritesInternal opts $+      -- anns <- getAnnsT+      return $ map exactPrint imps+  rrs <- parseRewritesInternal libdir opts rewrites+  es <- parseRewritesInternal libdir opts $     (if noDefaultElaborations then [] else defaultElaborations) ++     elaborations   elaborated <- elaborateRewritesInternal fixityEnv es rrs@@ -374,15 +374,15 @@     }  -- | Find all fixity declarations in targetDir and add them to fixity env.-addLocalFixities :: Options_ a b -> IO (Options_ a b)-addLocalFixities opts = do+addLocalFixities :: LibDir -> Options_ a b -> IO (Options_ a b)+addLocalFixities libdir opts = do   -- do not limit search for infix decls to only targetFiles   let opts' = opts { targetFiles = [] }   -- "infix" will find infixl and infixr as well   files <- getTargetFiles opts' [HashSet.singleton "infix"]    fixFns <- forFn opts files $ \ fp -> do-    ms <- toList <$> parseCPPFile parseContentNoFixity fp+    ms <- toList <$> parseCPPFile (parseContentNoFixity libdir) fp     return $ extendFixityEnv       [ (rdrFS nm, fixity)       | m <- ms
Retrie/PatternMap/Bag.hs view
@@ -140,11 +140,7 @@  ------------------------------------------------------------------------ -#if __GLASGOW_HASKELL__ < 900-newtype UniqFM a = UniqFM { unUniqFM :: GHC.UniqFM [a] }-#else-newtype UniqFM a = UniqFM { unUniqFM :: GHC.UniqFM (Key UniqFM) [a] }-#endif+newtype UniqFM a = UniqFM { unUniqFM :: GHC.UniqFM GHC.Unique [a] }   deriving (Functor)  instance PatternMap UniqFM where
Retrie/PatternMap/Instances.hs view
@@ -34,7 +34,8 @@   deriving (Functor)  instance PatternMap TupArgMap where-  type Key TupArgMap = LHsTupArg GhcPs+  -- type Key TupArgMap = Located (HsTupArg GhcPs)+  type Key TupArgMap = HsTupArg GhcPs    mEmpty :: TupArgMap a   mEmpty = TupArgMap mEmpty mEmpty@@ -46,7 +47,7 @@     }    mAlter :: AlphaEnv -> Quantifiers -> Key TupArgMap -> A a -> TupArgMap a -> TupArgMap a-  mAlter env vs tupArg f m = go (unLoc tupArg)+  mAlter env vs tupArg f m = go tupArg     where       go (Present _ e) = m { tamPresent = mAlter env vs e  f (tamPresent m) } #if __GLASGOW_HASKELL__ < 900@@ -55,7 +56,7 @@       go (Missing _) = m { tamMissing = mAlter env vs () f (tamMissing m) }    mMatch :: MatchEnv -> Key TupArgMap -> (Substitution, TupArgMap a) -> [(Substitution, a)]-  mMatch env = go . unLoc+  mMatch env = go     where       go (Present _ e) = mapFor tamPresent >=> mMatch env e #if __GLASGOW_HASKELL__ < 900@@ -206,6 +207,7 @@   = OLMEmpty   | OLM     { olmIntegral :: BoolMap (Map Integer a)+    -- ++AZ++:TODO: Fractional has *much* more than Rational now     , olmFractional :: Map Rational a     , olmIsString :: FSEnv a     }@@ -235,7 +237,7 @@     where       go (HsIntegral (IL _ b i)) =         m { olmIntegral = mAlter env vs b (toA (mAlter env vs i f)) (olmIntegral m) }-      go (HsFractional fl) = m { olmFractional = mAlter env vs (fl_value fl) f (olmFractional m) }+      go (HsFractional fl) = m { olmFractional = mAlter env vs (fl_signi fl) f (olmFractional m) }       go (HsIsString _ fs) = m { olmIsString = mAlter env vs fs f (olmIsString m) }    mMatch :: MatchEnv -> Key OLMap -> (Substitution, OLMap a) -> [(Substitution, a)]@@ -244,7 +246,7 @@     where       go (HsIntegral (IL _ b i)) =         mapFor olmIntegral >=> mMatch env b >=> mMatch env i-      go (HsFractional fl) = mapFor olmFractional >=> mMatch env (fl_value fl)+      go (HsFractional fl) = mapFor olmFractional >=> mMatch env (fl_signi fl)       go (HsIsString _ fs) = mapFor olmIsString >=> mMatch env fs  ------------------------------------------------------------------------@@ -300,7 +302,7 @@      mEmpty  instance PatternMap EMap where-  type Key EMap = LHsExpr GhcPs+  type Key EMap = LocatedA (HsExpr GhcPs)    mEmpty :: EMap a   mEmpty = EMEmpty@@ -366,22 +368,22 @@       go (RecordCon _ v fs) =         m { emRecordCon = mAlter env vs (unLoc v) (toA (mAlter env vs (fieldsToRdrNames $ rec_flds fs) f)) (emRecordCon m) }       go (RecordUpd _ e' fs) =-        m { emRecordUpd = mAlter env vs e' (toA (mAlter env vs (fieldsToRdrNames fs) f)) (emRecordUpd m) }+        m { emRecordUpd = mAlter env vs e' (toA (mAlter env vs (fieldsToRdrNamesUpd fs) f)) (emRecordUpd m) }       go (SectionL _ lhs o) =         m { emSecL = mAlter env vs o (toA (mAlter env vs lhs f)) (emSecL m) }       go (SectionR _ o rhs) =         m { emSecR = mAlter env vs o (toA (mAlter env vs rhs f)) (emSecR m) }       go (HsLet _ lbs e') =         let-          bs = collectLocalBinders $ unLoc lbs+          bs = collectLocalBinders CollNoDictBinders lbs           env' = foldr extendAlphaEnvInternal env bs           vs' = vs `exceptQ` bs-        in m { emLet = mAlter env vs (unLoc lbs) (toA (mAlter env' vs' e' f)) (emLet m) }+        in m { emLet = mAlter env vs lbs (toA (mAlter env' vs' e' f)) (emLet m) }       go HsLamCase{} = missingSyntax "HsLamCase"       go HsMultiIf{} = missingSyntax "HsMultiIf"-      go (ExplicitList _ _ es) = m { emExplicitList = mAlter env vs es f (emExplicitList m) }+      go (ExplicitList _ es) = m { emExplicitList = mAlter env vs es f (emExplicitList m) }       go ArithSeq{} = missingSyntax "ArithSeq"-      go (ExprWithTySig _ e' (HsWC _ (HsIB _ ty))) =+      go (ExprWithTySig _ e' (HsWC _ (L _ (HsSig _ _ ty)))) =         m { emExprWithTySig = mAlter env vs e' (toA (mAlter env vs ty f)) (emExprWithTySig m) } #if __GLASGOW_HASKELL__ < 900       go XExpr{} = missingSyntax "XExpr"@@ -444,16 +446,16 @@       go (RecordCon _ v fs) =         mapFor emRecordCon >=> mMatch env (unLoc v) >=> mMatch env (fieldsToRdrNames $ rec_flds fs)       go (RecordUpd _ e' fs) =-        mapFor emRecordUpd >=> mMatch env e' >=> mMatch env (fieldsToRdrNames fs)+        mapFor emRecordUpd >=> mMatch env e' >=> mMatch env (fieldsToRdrNamesUpd fs)       go (SectionL _ lhs o) = mapFor emSecL >=> mMatch env o >=> mMatch env lhs       go (SectionR _ o rhs) = mapFor emSecR >=> mMatch env o >=> mMatch env rhs       go (HsLet _ lbs e') =         let-          bs = collectLocalBinders (unLoc lbs)+          bs = collectLocalBinders CollNoDictBinders lbs           env' = extendMatchEnv env bs-        in mapFor emLet >=> mMatch env (unLoc lbs) >=> mMatch env' e'-      go (ExplicitList _ _ es) = mapFor emExplicitList >=> mMatch env es-      go (ExprWithTySig _ e' (HsWC _ (HsIB _ ty))) =+        in mapFor emLet >=> mMatch env lbs >=> mMatch env' e'+      go (ExplicitList _ es) = mapFor emExplicitList >=> mMatch env es+      go (ExprWithTySig _ e' (HsWC _ (L _ (HsSig _ _ ty)))) =         mapFor emExprWithTySig >=> mMatch env e' >=> mMatch env ty       go _ = const [] -- TODO remove @@ -566,7 +568,7 @@   deriving (Functor)  instance PatternMap MGMap where-  type Key MGMap = MatchGroup GhcPs (LHsExpr GhcPs)+  type Key MGMap = MatchGroup GhcPs (LocatedA (HsExpr GhcPs))    mEmpty :: MGMap a   mEmpty = MGMap mEmpty@@ -588,7 +590,7 @@   deriving (Functor)  instance PatternMap MMap where-  type Key MMap = Match GhcPs (LHsExpr GhcPs)+  type Key MMap = Match GhcPs (LocatedA (HsExpr GhcPs))    mEmpty :: MMap a   mEmpty = MMap mEmpty@@ -599,7 +601,7 @@   mAlter :: AlphaEnv -> Quantifiers -> Key MMap -> A a -> MMap a -> MMap a   mAlter env vs match f (MMap m) =     let lpats = m_pats match-        pbs = collectPatsBinders lpats+        pbs = collectPatsBinders CollNoDictBinders lpats         env' = foldr extendAlphaEnvInternal env pbs         vs' = vs `exceptQ` pbs     in MMap (mAlter env vs lpats@@ -609,7 +611,7 @@   mMatch env match = mapFor unMMap >=> mMatch env lpats >=> mMatch env' (m_grhss match)     where       lpats = m_pats match-      pbs = collectPatsBinders lpats+      pbs = collectPatsBinders CollNoDictBinders lpats       env' = extendMatchEnv env pbs  ------------------------------------------------------------------------@@ -630,7 +632,9 @@   type Key CDMap = HsConDetails (LPat GhcPs) (HsRecFields GhcPs (LPat GhcPs)) #else   -- We must manually expand 'LPat' to avoid UndecidableInstances in GHC 8.10+-  type Key CDMap = HsConDetails (Located (Pat GhcPs)) (HsRecFields GhcPs (Located (Pat GhcPs)))+  type Key CDMap = HsConDetails (HsPatSigType GhcPs) (LocatedA (Pat GhcPs)) (HsRecFields GhcPs (LocatedA (Pat GhcPs)))+  -- type HsConPatDetails p = HsConDetails (HsPatSigType (NoGhcTc p)) (LPat p) (HsRecFields p (LPat p))+ #endif    mEmpty :: CDMap a@@ -648,7 +652,7 @@   mAlter env vs d f CDEmpty   = mAlter env vs d f emptyCDMapWrapper   mAlter env vs d f m@CDMap{} = go d     where-      go (PrefixCon ps) = m { cdPrefixCon = mAlter env vs ps f (cdPrefixCon m) }+      go (PrefixCon tyargs ps) = m { cdPrefixCon = mAlter env vs ps f (cdPrefixCon m) }       go (RecCon _) = missingSyntax "RecCon"       go (InfixCon p1 p2) = m { cdInfixCon = mAlter env vs p1                                               (toA (mAlter env vs p2 f))@@ -658,7 +662,7 @@   mMatch _   _ (_ ,CDEmpty)   = []   mMatch env d (hs,m@CDMap{}) = go d (hs,m)     where-      go (PrefixCon ps) = mapFor cdPrefixCon >=> mMatch env ps+      go (PrefixCon tyargs ps) = mapFor cdPrefixCon >=> mMatch env ps       go (InfixCon p1 p2) = mapFor cdInfixCon >=> mMatch env p1 >=> mMatch env p2       go _ = const [] -- TODO @@ -688,7 +692,7 @@   type Key PatMap = LPat GhcPs #else   -- We must manually expand 'LPat' to avoid UndecidableInstances in GHC 8.10+-  type Key PatMap = Located (Pat GhcPs)+  type Key PatMap = LocatedA (Pat GhcPs) #endif    mEmpty :: PatMap a@@ -764,7 +768,7 @@   deriving (Functor)  instance PatternMap GRHSSMap where-  type Key GRHSSMap = GRHSs GhcPs (LHsExpr GhcPs)+  type Key GRHSSMap = GRHSs GhcPs (LocatedA (HsExpr GhcPs))    mEmpty :: GRHSSMap a   mEmpty = GRHSSMap mEmpty@@ -774,8 +778,8 @@    mAlter :: AlphaEnv -> Quantifiers -> Key GRHSSMap -> A a -> GRHSSMap a -> GRHSSMap a   mAlter env vs grhss f (GRHSSMap m) =-    let lbs = unLoc $ grhssLocalBinds grhss-        bs = collectLocalBinders lbs+    let lbs = grhssLocalBinds grhss+        bs = collectLocalBinders CollNoDictBinders lbs         env' = foldr extendAlphaEnvInternal env bs         vs' = vs `exceptQ` bs     in GRHSSMap (mAlter env vs lbs@@ -785,8 +789,8 @@   mMatch env grhss = mapFor unGRHSSMap >=> mMatch env lbs                       >=> mMatch env' (map unLoc $ grhssGRHSs grhss)     where-      lbs = unLoc $ grhssLocalBinds grhss-      bs = collectLocalBinders lbs+      lbs = grhssLocalBinds  grhss+      bs = collectLocalBinders CollNoDictBinders lbs       env' = extendMatchEnv env bs  ------------------------------------------------------------------------@@ -795,7 +799,7 @@   deriving (Functor)  instance PatternMap GRHSMap where-  type Key GRHSMap = GRHS GhcPs (LHsExpr GhcPs)+  type Key GRHSMap = GRHS GhcPs (LocatedA (HsExpr GhcPs))    mEmpty :: GRHSMap a   mEmpty = GRHSMap mEmpty@@ -808,7 +812,7 @@   mAlter _ _ XGRHS{} _ _ = missingSyntax "XGRHS" #endif   mAlter env vs (GRHS _ gs b) f (GRHSMap m) =-    let bs = collectLStmtsBinders gs+    let bs = collectLStmtsBinders CollNoDictBinders gs         env' = foldr extendAlphaEnvInternal env bs         vs' = vs `exceptQ` bs     in GRHSMap (mAlter env vs gs (toA (mAlter env' vs' b f)) m)@@ -820,7 +824,7 @@   mMatch env (GRHS _ gs b) =     mapFor unGRHSMap >=> mMatch env gs >=> mMatch env' b     where-      bs = collectLStmtsBinders gs+      bs = collectLStmtsBinders CollNoDictBinders gs       env' = extendMatchEnv env bs  ------------------------------------------------------------------------@@ -836,7 +840,7 @@ emptySLMapWrapper = SLM mEmpty mEmpty  instance PatternMap SLMap where-  type Key SLMap = [LStmt GhcPs (LHsExpr GhcPs)]+  type Key SLMap = [LocatedA (Stmt GhcPs (LocatedA (HsExpr GhcPs)))]    mEmpty :: SLMap a   mEmpty = SLEmpty@@ -856,7 +860,7 @@       go []      = m { slmNil = mAlter env vs () f (slmNil m) }       go (s:ss') =         let-          bs = collectLStmtBinders s+          bs = collectLStmtBinders CollNoDictBinders s           env' = foldr extendAlphaEnvInternal env bs           vs' = vs `exceptQ` bs         in m { slmCons = mAlter env vs s (toA (mAlter env' vs' ss' f)) (slmCons m) }@@ -868,7 +872,7 @@       go [] = mapFor slmNil >=> mMatch env ()       go (s:ss') =         let-          bs = collectLStmtBinders s+          bs = collectLStmtBinders CollNoDictBinders s           env' = extendMatchEnv env bs         in mapFor slmCons >=> mMatch env s >=> mMatch env' ss' @@ -913,7 +917,7 @@ #endif       go (HsValBinds _ vbs) =         let-          bs = collectHsValBinders vbs+          bs = collectHsValBinders CollNoDictBinders vbs           env' = foldr extendAlphaEnvInternal env bs           vs' = vs `exceptQ` bs         in m { lbValBinds = mAlter env' vs' (deValBinds vbs) f (lbValBinds m) }@@ -926,7 +930,7 @@       go (EmptyLocalBinds _) = mapFor lbEmpty >=> mMatch env ()       go (HsValBinds _ vbs) =         let-          bs = collectHsValBinders vbs+          bs = collectHsValBinders CollNoDictBinders vbs           env' = extendMatchEnv env bs         in mapFor lbValBinds >=> mMatch env' (deValBinds vbs)       go _ = const [] -- TODO@@ -1016,7 +1020,7 @@ emptySMapWrapper = SM mEmpty mEmpty mEmpty  instance PatternMap SMap where-  type Key SMap = LStmt GhcPs (LHsExpr GhcPs)+  type Key SMap = LocatedA (Stmt GhcPs (LocatedA (HsExpr GhcPs)))    mEmpty :: SMap a   mEmpty = SMEmpty@@ -1042,7 +1046,7 @@ #else       go (BindStmt _ p e) = #endif-        let bs = collectPatBinders p+        let bs = collectPatBinders CollNoDictBinders p             env' = foldr extendAlphaEnvInternal env bs             vs' = vs `exceptQ` bs         in m { smBindStmt = mAlter env vs p@@ -1064,7 +1068,7 @@ #else       go (BindStmt _ p e) = #endif-        let bs = collectPatBinders p+        let bs = collectPatBinders CollNoDictBinders p             env' = extendMatchEnv env bs         in mapFor smBindStmt >=> mMatch env p >=> mMatch env' e       go _ = const [] -- TODO@@ -1097,7 +1101,7 @@   mEmpty mEmpty mEmpty mEmpty mEmpty mEmpty mEmpty  instance PatternMap TyMap where-  type Key TyMap = LHsType GhcPs+  type Key TyMap = LocatedA (HsType GhcPs)    mEmpty :: TyMap a   mEmpty = TyEmpty@@ -1150,8 +1154,8 @@ #endif       go (HsListTy _ ty') = m { tyHsListTy = mAlter env vs ty' f (tyHsListTy m) }       go (HsParTy _ ty') = m { tyHsParTy = mAlter env vs ty' f (tyHsParTy m) }-      go (HsQualTy _ (L _ cons) ty') =-        m { tyHsQualTy = mAlter env vs ty' (toA (mAlter env vs cons f)) (tyHsQualTy m) }+      go (HsQualTy _ cons ty') =+        m { tyHsQualTy = mAlter env vs ty' (toA (mAlter env vs (fromMaybeContext cons) f)) (tyHsQualTy m) }       go HsStarTy{} = missingSyntax "HsStarTy"       go (HsSumTy _ tys) = m { tyHsSumTy = mAlter env vs tys f (tyHsSumTy m) }       go (HsTupleTy _ ts tys) =@@ -1187,7 +1191,7 @@ #endif       go (HsListTy _ ty') = mapFor tyHsListTy >=> mMatch env ty'       go (HsParTy _ ty') = mapFor tyHsParTy >=> mMatch env ty'-      go (HsQualTy _ (L _ cons) ty') = mapFor tyHsQualTy >=> mMatch env ty' >=> mMatch env cons+      go (HsQualTy _ cons ty') = mapFor tyHsQualTy >=> mMatch env ty' >=> mMatch env (fromMaybeContext cons)       go (HsSumTy _ tys) = mapFor tyHsSumTy >=> mMatch env tys       go (HsTupleTy _ ts tys) = mapFor tyHsTupleTy >=> mMatch env ts >=> mMatch env tys       go (HsTyVar _ _ v) = mapFor tyHsTyVar >=> mMatch env (unLoc v)@@ -1219,7 +1223,7 @@   deriving (Functor)  instance PatternMap RFMap where-  type Key RFMap = LHsRecField' RdrName (LHsExpr GhcPs)+  type Key RFMap = LocatedA (HsRecField' RdrName (LocatedA (HsExpr GhcPs)))    mEmpty :: RFMap a   mEmpty = RFM mEmpty@@ -1230,13 +1234,13 @@   mAlter :: AlphaEnv -> Quantifiers -> Key RFMap -> A a -> RFMap a -> RFMap a   mAlter env vs lf f m = go (unLoc lf)     where-      go (HsRecField lbl arg _pun) =+      go (HsRecField _ lbl arg _pun) =         m { rfmField = mAlter env vs (unLoc lbl) (toA (mAlter env vs arg f)) (rfmField m) }    mMatch :: MatchEnv -> Key RFMap -> (Substitution, RFMap a) -> [(Substitution, a)]   mMatch env lf (hs,m) = go (unLoc lf) (hs,m)     where-      go (HsRecField lbl arg _pun) =+      go (HsRecField _ lbl arg _pun) =         mapFor rfmField >=> mMatch env (unLoc lbl) >=> mMatch env arg  -- Helper class to collapse the complex encoding of record fields into RdrNames.@@ -1251,14 +1255,30 @@ instance RecordFieldToRdrName (FieldOcc p) where   recordFieldToRdrName = unLoc . rdrNameFieldOcc +instance RecordFieldToRdrName (FieldLabelStrings GhcPs) where+  recordFieldToRdrName = error "TBD"++-- Either [LHsRecUpdField GhcPs] [LHsRecUpdProj GhcPs]+fieldsToRdrNamesUpd+  :: Either [LHsRecUpdField GhcPs] [LHsRecUpdProj GhcPs]+  -> [LHsRecField' GhcPs RdrName (LHsExpr GhcPs)]+fieldsToRdrNamesUpd (Left fs) = map go fs+  where+    go (L l (HsRecField a (L l2 f) arg pun)) =+      L l (HsRecField a (L l2 (recordFieldToRdrName f)) arg pun)+fieldsToRdrNamesUpd (Right fs) = map go fs+  where+    go (L l (HsRecField a (L l2 f) arg pun)) =+      L l (HsRecField a (L l2 (recordFieldToRdrName f)) arg pun)+ fieldsToRdrNames   :: RecordFieldToRdrName f-  => [LHsRecField' f arg]-  -> [LHsRecField' RdrName arg]+  => [LHsRecField' GhcPs f arg]+  -> [LHsRecField' GhcPs RdrName arg] fieldsToRdrNames = map go   where-    go (L l (HsRecField (L l2 f) arg pun)) =-      L l (HsRecField (L l2 (recordFieldToRdrName f)) arg pun)+    go (L l (HsRecField a (L l2 f) arg pun)) =+      L l (HsRecField a (L l2 (recordFieldToRdrName f)) arg pun)  ------------------------------------------------------------------------ @@ -1287,17 +1307,17 @@   mAlter :: AlphaEnv -> Quantifiers -> Key TupleSortMap -> A a -> TupleSortMap a -> TupleSortMap a   mAlter env vs HsUnboxedTuple f m =     m { tsUnboxed = mAlter env vs () f (tsUnboxed m) }-  mAlter env vs HsBoxedTuple f m =-    m { tsBoxed = mAlter env vs () f (tsBoxed m) }-  mAlter env vs HsConstraintTuple f m =-    m { tsConstraint = mAlter env vs () f (tsConstraint m) }+  -- mAlter env vs HsBoxedOrConstraintTuple f m =+  --   m { tsBoxed = mAlter env vs () f (tsBoxed m) }+  -- mAlter env vs HsConstraintTuple f m =+  --   m { tsConstraint = mAlter env vs () f (tsConstraint m) }   mAlter env vs HsBoxedOrConstraintTuple f m =     m { tsBoxedOrConstraint = mAlter env vs () f (tsBoxedOrConstraint m) }    mMatch :: MatchEnv -> Key TupleSortMap -> (Substitution, TupleSortMap a) -> [(Substitution, a)]   mMatch env HsUnboxedTuple = mapFor tsUnboxed >=> mMatch env ()-  mMatch env HsBoxedTuple = mapFor tsBoxed >=> mMatch env ()-  mMatch env HsConstraintTuple = mapFor tsConstraint >=> mMatch env ()+  -- mMatch env HsBoxedTuple = mapFor tsBoxed >=> mMatch env ()+  -- mMatch env HsConstraintTuple = mapFor tsConstraint >=> mMatch env ()   mMatch env HsBoxedOrConstraintTuple = mapFor tsBoxedOrConstraint >=> mMatch env ()  ------------------------------------------------------------------------@@ -1317,7 +1337,7 @@   deriving (Functor)  instance PatternMap ForAllTyMap where-  type Key ForAllTyMap = ([(RdrName, Maybe (LHsKind GhcPs))], LHsType GhcPs)+  type Key ForAllTyMap = ([(RdrName, Maybe (LocatedA (HsKind GhcPs)))], LocatedA (HsType GhcPs))    mEmpty :: ForAllTyMap a   mEmpty = ForAllTyMap mEmpty mEmpty mEmpty
Retrie/Quantifiers.hs view
@@ -3,6 +3,7 @@ -- This source code is licensed under the MIT license found in the -- LICENSE file in the root directory of this source tree. --+{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} module Retrie.Quantifiers   ( Quantifiers@@ -43,6 +44,8 @@   { qSet :: UniqSet FastString     -- ^ Convert to a 'UniqSet'.   }+instance Show Quantifiers where+  show qs = "Quantifiers " ++ show (qList qs)  -- | Construct from GHC's 'RdrName's. mkQs :: [RdrName] -> Quantifiers
Retrie/Query.hs view
@@ -28,20 +28,21 @@   | QStmt String  parseQuerySpecs-  :: FixityEnv+  :: LibDir+  -> FixityEnv   -> [(Quantifiers, QuerySpec, v)]   -> IO [Query Universe v]-parseQuerySpecs fixityEnv =+parseQuerySpecs libdir' fixityEnv =   mapM $ \(qQuantifiers, querySpec, qResult) -> do-    qPattern <- parse querySpec+    qPattern <- parse libdir' querySpec     return Query{..}   where-    parse (QExpr s) = do-      e <- parseExpr s+    parse libdir (QExpr s) = do+      e <- parseExpr libdir s       fmap inject <$> transformA e (fix fixityEnv)-    parse (QType s) = fmap inject <$> parseType s-    parse (QStmt s) = do-      stmt <- parseStmt s+    parse libdir (QType s) = fmap inject <$> parseType libdir s+    parse libdir (QStmt s) = do+      stmt <- parseStmt libdir s       fmap inject <$> transformA stmt (fix fixityEnv)  genericQ
Retrie/Replace.hs view
@@ -25,6 +25,7 @@ import Retrie.Subst import Retrie.Types import Retrie.Universe+import Retrie.Util  ------------------------------------------------------------------------ @@ -48,8 +49,8 @@ -- 'Rewriter' carried by the context, instantiates templates, handles parens -- and other whitespace bookkeeping, and emits resulting 'Replacement's. replaceImpl-  :: forall ast m. (Annotate ast, Matchable (Located ast), MonadIO m)-  => Context -> Located ast -> TransformT (WriterT Change m) (Located ast)+  :: forall ast m. (Data ast, ExactPrint ast, Matchable (LocatedA ast), MonadIO m)+  => Context -> LocatedA ast -> TransformT (WriterT Change m) (LocatedA ast) replaceImpl c e = do   let     -- Prevent rewriting source of the rewrite itself by refusing to@@ -59,7 +60,7 @@           fmap (fmap (check rrOrigin rrQuantifiers)) <$> rrTransformer       }     check origin quantifiers match-      | getLoc e `overlaps` origin = NoMatch+      | getLocA e `overlaps` origin = NoMatch       | MatchResult _ Template{..} <- match       , fvs <- freeVars quantifiers (astA tTemplate)       , any (`elemFVs` fvs) (ctxtBinders c) = NoMatch@@ -80,17 +81,37 @@       -- substitute for quantifiers in grafted template       r <- subst sub c t'       -- copy appropriate annotations from old expression to template-      addAllAnnsT e r+      r0 <- addAllAnnsT e r       -- add parens to template if needed-      res <- (mkM (parenify c) `extM` parenifyT c `extM` parenifyP c) r+      res' <- (mkM (parenify c) `extM` parenifyT c `extM` parenifyP c) r0+      -- Make sure the replacement has the same anchor as the thing+      -- being replaced+      let res = transferAnchor e res'+       -- prune the resulting expression and log it with location       orig <- printNoLeadingSpaces <$> pruneA e+      -- orig <- printA' <$> pruneA e+       repl <- printNoLeadingSpaces <$> pruneA res-      let replacement = Replacement (getLoc e) orig repl+      -- repl <- printA' <$> pruneA r+      -- repl <- printA' <$> pruneA res+      -- repl <- return $ showAst t'++      -- lift $ liftIO $ debugPrint Loud "replaceImpl:orig="  [orig]+      -- lift $ liftIO $ debugPrint Loud "replaceImpl:repl="  [repl]++      -- lift $ liftIO $ debugPrint Loud "replaceImpl:e="  [showAst e]+      -- lift $ liftIO $ debugPrint Loud "replaceImpl:r="  [showAst r]+      -- lift $ liftIO $ debugPrint Loud "replaceImpl:r0="  [showAst r0]+      -- lift $ liftIO $ debugPrint Loud "replaceImpl:t'=" [showAst t']+      -- lift $ liftIO $ debugPrint Loud "replaceImpl:res=" [showAst res]++      let replacement = Replacement (getLocA e) orig repl       TransformT $ lift $ tell $ Change [replacement] [tImports]       -- make the actual replacement-      return res+      return res' + -- | Records a replacement made. In cases where we cannot use ghc-exactprint -- to print the resulting AST (e.g. CPP modules), we fall back on splicing -- strings. Can also be used by external tools (search, linters, etc).@@ -98,7 +119,7 @@   { replLocation :: SrcSpan   , replOriginal :: String   , replReplacement :: String-  }+  } deriving Show  -- | Used as the writer type during matching to indicate whether any change -- to the module should be made.@@ -121,5 +142,5 @@ -- Unfortunately, its hard to find the right annEntryDelta (it may not be the -- top of the redex) and zero it out. As janky as it seems, its easier to just -- drop leading spaces like this.-printNoLeadingSpaces :: Annotate k => Annotated (Located k) -> String+printNoLeadingSpaces :: (Data k, ExactPrint k) => Annotated k -> String printNoLeadingSpaces = dropWhile isSpace . printA
Retrie/Rewrites.hs view
@@ -17,6 +17,7 @@ import Control.Exception import qualified Data.Map as Map import Data.Maybe+import Data.Data hiding (Fixity) import qualified Data.Text as Text import Data.Traversable import System.FilePath@@ -31,6 +32,7 @@ import Retrie.Rewrites.Types import Retrie.Types import Retrie.Universe+import Retrie.Util  -- | A qualified name. (e.g. @"Module.Name.functionName"@) type QualifiedName = String@@ -78,11 +80,12 @@     ClassifiedRewrites (a <> a') (b <> b') (c <> c') (d <> d')  parseRewriteSpecs-  :: (FilePath -> IO (CPP AnnotatedModule))+  :: LibDir+  -> (FilePath -> IO (CPP AnnotatedModule))   -> FixityEnv   -> [RewriteSpec]   -> IO [Rewrite Universe]-parseRewriteSpecs parser fixityEnv specs = do+parseRewriteSpecs libdir parser fixityEnv specs = do   ClassifiedRewrites{..} <- mconcat <$> sequence     [ case spec of         Adhoc rule -> return mempty{adhocRules = [rule]}@@ -98,10 +101,13 @@         Unfold name -> mkFileBased FoldUnfold LeftToRight name     | spec <- specs     ]-  fbRewrites <- parseFileBased parser fileBased-  adhocExpressionRewrites <- parseAdhocs fixityEnv adhocRules-  adhocTypeRewrites <- parseAdhocTypes fixityEnv adhocTypes-  adhocPatternRewrites <- parseAdhocPatterns fixityEnv adhocPatterns+  fbRewrites <- parseFileBased libdir parser fileBased+  adhocExpressionRewrites <- parseAdhocs libdir fixityEnv adhocRules+  -- debugPrint Loud "parseRewriteSpecs" (["adhocExpressionRewrites:" ++ show adhocRules]  ++ map (\r -> showAst ((astA . qPattern) r)) adhocExpressionRewrites)+  adhocTypeRewrites <- parseAdhocTypes libdir fixityEnv adhocTypes+  -- debugPrint Loud "parseRewriteSpecs" (["adhocTypeRewrites:"] ++ map (\r -> showAst ((astA . qPattern) r)) adhocTypeRewrites)+  adhocPatternRewrites <- parseAdhocPatterns libdir fixityEnv adhocPatterns+  -- debugPrint Loud "parseRewriteSpecs" (["adhocPatternRewrites:"] ++ map (\r -> showAst ((astA . qPattern) r)) adhocPatternRewrites)   return $     fbRewrites ++     adhocExpressionRewrites ++@@ -117,11 +123,12 @@   deriving (Eq, Ord)  parseFileBased-  :: (FilePath -> IO (CPP AnnotatedModule))+  :: LibDir+  -> (FilePath -> IO (CPP AnnotatedModule))   -> [(FilePath, [(FileBasedTy, [(FastString, Direction)])])]   -> IO [Rewrite Universe]-parseFileBased _ [] = return []-parseFileBased parser specs = concat <$> mapM (uncurry goFile) (gather specs)+parseFileBased _ _ [] = return []+parseFileBased libdir parser specs = concat <$> mapM (uncurry goFile) (gather specs)   where     gather :: Ord a => [(a,[b])] -> [(a,[b])]     gather = Map.toList . Map.fromListWith (++)@@ -132,14 +139,17 @@       -> IO [Rewrite Universe]     goFile fp rules = do       cpp <- parser fp-      concat <$> mapM (uncurry $ constructRewrites cpp) (gather rules)+      concat <$> mapM (uncurry $ constructRewrites libdir cpp) (gather rules) -parseAdhocs :: FixityEnv -> [String] -> IO [Rewrite Universe]-parseAdhocs _ [] = return []-parseAdhocs fixities adhocs = do+parseAdhocs :: LibDir -> FixityEnv -> [String] -> IO [Rewrite Universe]+parseAdhocs _ _ [] = return []+parseAdhocs libdir fixities adhocs = do+  -- debugPrint Loud "parseAdhocs:adhocs" adhocs+  -- debugPrint Loud "parseAdhocs:adhocRules" (map show adhocRules)   cpp <--    parseCPP (parseContent fixities "parseAdhocs") (Text.unlines adhocRules)-  constructRewrites cpp Rule adhocSpecs+    parseCPP (parseContent libdir fixities "parseAdhocs") (Text.unlines adhocRules)+  -- debugPrint Loud "parseAdhocs:cpp" [showCpp cpp]+  constructRewrites libdir cpp Rule adhocSpecs   where     -- In search mode, there is no need to specify a right-hand side, but we     -- need one to parse as a RULE, so add it if necessary.@@ -154,13 +164,18 @@       , let nm = "adhoc" ++ show (i::Int)       ] -parseAdhocTypes :: FixityEnv -> [String] -> IO [Rewrite Universe]-parseAdhocTypes _ [] = return []-parseAdhocTypes fixities tySyns = do++showCpp :: (Data ast, ExactPrint ast) => CPP (Annotated ast) -> String+showCpp (NoCPP c) = showAstA c+showCpp (CPP{}) = "CPP{}"++parseAdhocTypes :: LibDir -> FixityEnv -> [String] -> IO [Rewrite Universe]+parseAdhocTypes _ _ [] = return []+parseAdhocTypes libdir fixities tySyns = do   print adhocTySyns   cpp <--    parseCPP (parseContent fixities "parseAdhocTypes") (Text.unlines adhocTySyns)-  constructRewrites cpp Type adhocSpecs+    parseCPP (parseContent libdir fixities "parseAdhocTypes") (Text.unlines adhocTySyns)+  constructRewrites libdir cpp Type adhocSpecs   where     (adhocSpecs, adhocTySyns) = unzip       [ ( (mkFastString nm, LeftToRight), "type " <> Text.pack s)@@ -168,13 +183,13 @@       , Just nm <- [listToMaybe $ words s]       ] -parseAdhocPatterns :: FixityEnv -> [String] -> IO [Rewrite Universe]-parseAdhocPatterns _ [] = return []-parseAdhocPatterns fixities patSyns = do+parseAdhocPatterns :: LibDir -> FixityEnv -> [String] -> IO [Rewrite Universe]+parseAdhocPatterns _ _ [] = return []+parseAdhocPatterns libdir fixities patSyns = do   cpp <--    parseCPP (parseContent fixities "parseAdhocPatterns")+    parseCPP (parseContent libdir fixities "parseAdhocPatterns")              (Text.unlines $ pragma : adhocPatSyns)-  constructRewrites cpp Pattern adhocSpecs+  constructRewrites libdir cpp Pattern adhocSpecs   where     pragma = "{-# LANGUAGE PatternSynonyms #-}"     (adhocSpecs, adhocPatSyns) = unzip@@ -184,12 +199,13 @@       ]  constructRewrites-  :: CPP AnnotatedModule+  :: LibDir+  -> CPP AnnotatedModule   -> FileBasedTy   -> [(FastString, Direction)]   -> IO [Rewrite Universe]-constructRewrites cpp ty specs = do-  cppM <- traverse (tyBuilder ty specs) cpp+constructRewrites libdir cpp ty specs = do+  cppM <- traverse (tyBuilder libdir ty specs) cpp   let     names = nonDetEltsUniqSet $ mkUniqSet $ map fst specs @@ -204,10 +220,13 @@     case lookupUFM m fs of       Nothing ->         fail $ "could not find " ++ nameOf ty ++ " named " ++ unpackFS fs-      Just rrs -> return rrs+      Just rrs -> do+        -- debugPrint Loud "constructRewrites:cppM" ["enter"]+        return rrs  tyBuilder-  :: FileBasedTy+  :: LibDir+  -> FileBasedTy   -> [(FastString, Direction)]   -> AnnotatedModule #if __GLASGOW_HASKELL__ < 900@@ -215,10 +234,10 @@ #else   -> IO (UniqFM FastString [Rewrite Universe]) #endif-tyBuilder FoldUnfold specs am = promote <$> dfnsToRewrites specs am-tyBuilder Rule specs am = promote <$> rulesToRewrites specs am-tyBuilder Type specs am = promote <$> typeSynonymsToRewrites specs am-tyBuilder Pattern specs am = patternSynonymsToRewrites specs am+tyBuilder libdir FoldUnfold specs am = promote <$> dfnsToRewrites libdir specs am+tyBuilder _libdir Rule specs am = promote <$> rulesToRewrites specs am+tyBuilder _libdir Type specs am = promote <$> typeSynonymsToRewrites specs am+tyBuilder libdir Pattern specs am = patternSynonymsToRewrites libdir specs am  #if __GLASGOW_HASKELL__ < 900 promote :: Matchable a => UniqFM [Rewrite a] -> UniqFM [Rewrite Universe]
Retrie/Rewrites/Function.hs view
@@ -22,23 +22,22 @@ import Retrie.GHC import Retrie.Quantifiers import Retrie.Types+import Retrie.Util  dfnsToRewrites-  :: [(FastString, Direction)]+  :: LibDir+  -> [(FastString, Direction)]   -> AnnotatedModule-#if __GLASGOW_HASKELL__ < 900-  -> IO (UniqFM [Rewrite (LHsExpr GhcPs)])-#else   -> IO (UniqFM FastString [Rewrite (LHsExpr GhcPs)])-#endif-dfnsToRewrites specs am = fmap astA $ transformA am $ \ (L _ m) -> do+dfnsToRewrites libdir specs am = fmap astA $ transformA am $ \ (L _ m) -> do   let     fsMap = uniqBag specs    rrs <- sequence     [ do         fe <- mkLocatedHsVar fRdrName-        imps <- getImports dir (hsmodName m)+        -- lift $ debugPrint Loud "dfnsToRewrites:ef="  [showAst fe]+        imps <- getImports libdir dir (hsmodName m)         (fName,) . concat <$>           forM (unLoc $ mg_alts $ fun_matches f) (matchToRewrites fe imps dir)     | L _ (ValD _ f@FunBind{}) <- hsmodDecls m@@ -52,10 +51,10 @@ ------------------------------------------------------------------------  getImports-  :: Direction -> Maybe (Located ModuleName) -> TransformT IO AnnotatedImports-getImports RightToLeft (Just (L _ mn)) = -- See Note [fold only]-  lift $ liftIO $ parseImports ["import " ++ moduleNameString mn]-getImports _ _ = return mempty+  :: LibDir -> Direction -> Maybe (LocatedA ModuleName) -> TransformT IO AnnotatedImports+getImports libdir RightToLeft (Just (L _ mn)) = -- See Note [fold only]+  lift $ liftIO $ parseImports libdir ["import " ++ moduleNameString mn]+getImports _ _ _ = return mempty  matchToRewrites   :: LHsExpr GhcPs@@ -64,6 +63,7 @@   -> LMatch GhcPs (LHsExpr GhcPs)   -> TransformT IO [Rewrite (LHsExpr GhcPs)] matchToRewrites e imps dir (L _ alt) = do+  -- lift $ debugPrint Loud "matchToRewrites:e="  [showAst e]   let     pats = m_pats alt     grhss = m_grhss alt@@ -99,12 +99,13 @@   | otherwise = do     let       GRHSs _ rhss lbs = grhss-      bs = collectPatsBinders argpats+      bs = collectPatsBinders CollNoDictBinders argpats     -- See Note [Wildcards]     (es,(_,bs')) <- runStateT (mapM patToExpr argpats) (wildSupply bs, bs)+    -- lift $ debugPrint Loud "makeFunctionQuery:e="  [showAst e]     lhs <- mkAppFn e es     for rhss $ \ grhs -> do-      le <- mkLet (unLoc lbs) (grhsToExpr grhs)+      le <- mkLet lbs (grhsToExpr grhs)       rhs <- mkLams bndpats le       let         (pat, temp) =@@ -125,13 +126,13 @@ backtickRules e imps dir@LeftToRight grhss ps@[p1, p2] = do   let     both, left, right :: AppBuilder-    both op [l, r] = mkLoc (OpApp noExtField l op r)+    both op [l, r] = mkLocA (SameLine 1) (OpApp noAnn l op r)     both _ _ = fail "backtickRules - both: impossible!" -    left op [l] = mkLoc (SectionL noExtField l op)+    left op [l] = mkLocA (SameLine 1) (SectionL noAnn l op)     left _ _ = fail "backtickRules - left: impossible!" -    right op [r] = mkLoc (SectionR noExtField op r)+    right op [r] = mkLocA (SameLine 1) (SectionR noAnn op r)     right _ _ = fail "backtickRules - right: impossible!"   qs <- makeFunctionQuery e imps dir grhss both (ps, [])   qsl <- makeFunctionQuery e imps dir grhss left ([p1], [p2])
Retrie/Rewrites/Patterns.hs view
@@ -9,9 +9,11 @@ {-# LANGUAGE RecordWildCards #-} module Retrie.Rewrites.Patterns (patternSynonymsToRewrites) where -import Control.Monad.State (StateT(runStateT))+import Control.Monad.State (StateT(runStateT), lift) import Control.Monad+import Control.Monad.IO.Class import Data.Maybe+import Data.Void  import Retrie.ExactPrint import Retrie.Expr@@ -23,17 +25,14 @@ import Retrie.Util  patternSynonymsToRewrites-  :: [(FastString, Direction)]+  :: LibDir+  -> [(FastString, Direction)]   -> AnnotatedModule-#if __GLASGOW_HASKELL__ < 900-  -> IO (UniqFM [Rewrite Universe])-#else   -> IO (UniqFM FastString [Rewrite Universe])-#endif-patternSynonymsToRewrites specs am = fmap astA $ transformA am $ \(L _ m) -> do+patternSynonymsToRewrites libdir specs am = fmap astA $ transformA am $ \(L _ m) -> do   let     fsMap = uniqBag specs-  imports <- getImports RightToLeft (hsmodName m)+  imports <- getImports libdir RightToLeft (hsmodName m)   rrs <- sequence       [ do           patRewrite <- mkPatRewrite dir imports nm params lrhs@@ -50,69 +49,74 @@ mkPatRewrite   :: Direction   -> AnnotatedImports-  -> LRdrName-  -> HsConDetails LRdrName [RecordPatSynField LRdrName]-  -> Located (Pat GhcPs)-  -> TransformT IO (Rewrite (Located (Pat GhcPs)))+  -> LocatedN RdrName+  -> HsConDetails Void (LocatedN RdrName) [RecordPatSynField GhcPs]+  -> LPat GhcPs+  -> TransformT IO (Rewrite (LPat GhcPs)) mkPatRewrite dir imports patName params rhs = do   lhs <- asPat patName params    (pat, temp) <- case dir of     LeftToRight -> return (lhs, rhs)     RightToLeft -> do-      setEntryDPT lhs (DP (0,0))+      let lhs' = setEntryDP lhs (SameLine 0)       -- Patterns from lhs have wonky annotations,       -- the space will be attached to the name, not to the ConPatIn ast node-      setEntryDPTunderConPatIn lhs (DP (0,0))-      return (rhs, lhs)+      let lhs'' = setEntryDPTunderConPatIn lhs' (SameLine 0)+      return (rhs, lhs'')    p <- pruneA pat   t <- pruneA temp-  let bs = collectPatBinders (cLPat temp)+  let bs = collectPatBinders CollNoDictBinders (cLPat temp)   return $ addRewriteImports imports $ mkRewrite (mkQs bs) p t    where-    setEntryDPTunderConPatIn-      :: Monad m => Located (Pat GhcPs) -> DeltaPos -> TransformT m ()-#if __GLASGOW_HASKELL__ < 900-    setEntryDPTunderConPatIn (L _ (ConPatIn nm _)) = setEntryDPT nm-#else-    setEntryDPTunderConPatIn (L _ (ConPat _ nm _)) = setEntryDPT nm-#endif-    setEntryDPTunderConPatIn _ = const $ return ()+    setEntryDPTunderConPatIn :: LPat GhcPs -> DeltaPos -> LPat GhcPs+    setEntryDPTunderConPatIn (L l (ConPat x nm args)) dp+      = (L l (ConPat x (setEntryDP nm dp) args))+    setEntryDPTunderConPatIn p _ = p  asPat   :: Monad m-  => LRdrName-  -> HsConDetails LRdrName [RecordPatSynField LRdrName]-  -> TransformT m (Located (Pat GhcPs))+  => LocatedN RdrName+  -> HsConDetails Void (LocatedN RdrName) [RecordPatSynField GhcPs]+  -> TransformT m (LPat GhcPs) asPat patName params = do-  params' <- bitraverseHsConDetails mkVarPat convertFields params+  params' <- bitraverseHsConDetails convertTyVars mkVarPat convertFields params   mkConPatIn patName params'   where +    convertTyVars :: (Monad m) => [Void] -> TransformT m [HsPatSigType GhcPs]+    convertTyVars _ = return []++    convertFields :: (Monad m) => [RecordPatSynField GhcPs]+                      -> TransformT m (HsRecFields GhcPs (LPat GhcPs))     convertFields fields =       HsRecFields <$> traverse convertField fields <*> pure Nothing +    convertField :: (Monad m) => RecordPatSynField GhcPs+                      -> TransformT m (LHsRecField GhcPs (LPat GhcPs))     convertField RecordPatSynField{..} = do-      hsRecFieldLbl <- mkLoc $ mkFieldOcc recordPatSynSelectorId+      hsRecFieldLbl <- mkLoc $ recordPatSynField       hsRecFieldArg <- mkVarPat recordPatSynPatVar       let hsRecPun = False-      mkLoc HsRecField{..}+      let hsRecFieldAnn = noAnn+      mkLocA (SameLine 0) HsRecField{..}   mkExpRewrite   :: Direction   -> AnnotatedImports-  -> LRdrName-  -> HsConDetails LRdrName [RecordPatSynField LRdrName]+  -> LocatedN RdrName+  -> HsConDetails Void (LocatedN RdrName) [RecordPatSynField GhcPs]   -> LPat GhcPs   -> HsPatSynDir GhcPs   -> TransformT IO [Rewrite (LHsExpr GhcPs)] mkExpRewrite dir imports patName params rhs patDir = do   fe <- mkLocatedHsVar patName+  -- lift $ debugPrint Loud "mkExpRewrite:fe="  [showAst fe]   let altsFromParams = case params of-        PrefixCon names -> buildMatch names rhs+        PrefixCon _tyargs names -> buildMatch names rhs         InfixCon a1 a2 -> buildMatch [a1, a2] rhs         RecCon{} -> missingSyntax "RecCon"   alts <- case patDir of@@ -122,13 +126,13 @@   fmap concat $ forM alts $ matchToRewrites fe imports dir  buildMatch-  :: Monad m-  => [Located (IdP GhcPs)]+  :: MonadIO m+  => [LocatedN RdrName]   -> LPat GhcPs   -> TransformT m [LMatch GhcPs (LHsExpr GhcPs)] buildMatch names rhs = do   pats <- traverse mkVarPat names-  let bs = collectPatBinders rhs+  let bs = collectPatBinders CollNoDictBinders rhs   (rhsExpr,(_,_bs')) <- runStateT (patToExpr rhs) (wildSupply bs, bs)-  let alt = mkMatch PatSyn pats rhsExpr (noLoc emptyLocalBinds)+  let alt = mkMatch PatSyn pats rhsExpr emptyLocalBinds   return [alt]
Retrie/Rewrites/Rules.hs view
@@ -14,6 +14,11 @@ import Retrie.GHC import Retrie.Quantifiers import Retrie.Types+import Retrie.Util+import Retrie.Monad+import Control.Monad+import Control.Monad.IO.Class+import Control.Monad.Trans.Class  rulesToRewrites   :: [(FastString, Direction)]@@ -42,6 +47,7 @@ mkRuleRewrite RightToLeft (RuleInfo name qs lhs rhs) =   mkRuleRewrite LeftToRight (RuleInfo name qs rhs lhs) mkRuleRewrite _ RuleInfo{..} = do-  p <- pruneA riLHS-  t <- pruneA riRHS+  p <- pruneA (setEntryDP riLHS (SameLine 1))+  t <- pruneA (setEntryDP riRHS (SameLine 1))+  -- lift $ debugPrint Loud "mkRuleRewrite" [showAstA p, showAstA t]   return (riName, mkRewrite (mkQs riQuantifiers) p t)
Retrie/Rewrites/Types.hs view
@@ -44,21 +44,17 @@ -- | Compile a list of RULES into a list of rewrites. mkTypeRewrite   :: Direction-#if __GLASGOW_HASKELL__ < 900-  -> (Located RdrName, [LHsTyVarBndr GhcPs], LHsType GhcPs)-#else-  -> (Located RdrName, [LHsTyVarBndr () GhcPs], LHsType GhcPs)-#endif+  -> (LocatedN RdrName, [LHsTyVarBndr () GhcPs], LHsType GhcPs)   -> TransformT IO (Rewrite (LHsType GhcPs)) mkTypeRewrite d (lhsName, vars, rhs) = do-  setEntryDPT lhsName $ DP (0,0)-  tc <- mkTyVar lhsName+  let lhsName' = setEntryDP lhsName (SameLine 0)+  tc <- mkTyVar lhsName'   let     lvs = tyBindersToLocatedRdrNames vars   args <- forM lvs $ \ lv -> do     tv <- mkTyVar lv-    setEntryDPT tv (DP (0,1))-    return tv+    let tv' = setEntryDP tv (SameLine 1)+    return tv'   lhsApps <- mkHsAppsTy (tc:args)   let     (pat, tmp) = case d of
Retrie/Run.hs view
@@ -47,47 +47,48 @@ -- >   return $ apply rr -- -- To run the script, compile the program and execute it.-runScript :: (Options -> IO (Retrie ())) -> IO ()-runScript f = runScriptWithModifiedOptions (\opts -> (opts,) <$> f opts)+runScript :: LibDir -> (Options -> IO (Retrie ())) -> IO ()+runScript libdir f = runScriptWithModifiedOptions libdir (\opts -> (opts,) <$> f opts)  -- | Define a custom refactoring script and run it with modified options. -- This is the same as 'runScript', but the returned 'Options' will be used -- during rewriting.-runScriptWithModifiedOptions :: (Options -> IO (Options, Retrie ())) -> IO ()-runScriptWithModifiedOptions f = do-  opts <- parseOptions mempty+runScriptWithModifiedOptions :: LibDir -> (Options -> IO (Options, Retrie ())) -> IO ()+runScriptWithModifiedOptions libdir f = do+  opts <- parseOptions libdir mempty   (opts', retrie) <- f opts-  execute opts' retrie+  execute libdir opts' retrie  -- | Implements retrie's iteration and execution modes.-execute :: Options -> Retrie () -> IO ()-execute opts@Options{..} retrie0 = do+execute :: LibDir -> Options -> Retrie () -> IO ()+execute libdir opts@Options{..} retrie0 = do   let retrie = iterateR iterateN retrie0   case executionMode of-    ExecDryRun -> void $ run (writeDiff opts) id opts retrie-    ExecExtract -> void $ run (writeExtract opts) id opts retrie+    ExecDryRun -> void $ run libdir (writeDiff opts) id opts retrie+    ExecExtract -> void $ run libdir (writeExtract opts) id opts retrie     ExecRewrite -> do-      s <- mconcat <$> run writeCountLines id opts retrie+      s <- mconcat <$> run libdir writeCountLines id opts retrie       when (verbosity > Silent) $         putStrLn $ "Done! " ++ show (getSum s) ++ " lines changed."-    ExecSearch -> void $ run (writeSearch opts) id opts retrie+    ExecSearch -> void $ run libdir (writeSearch opts) id opts retrie  -- | Callback function to actually write the resulting file back out. -- Is given list of changed spans, module contents, and user-defined data.-type WriteFn a b = [Replacement] -> String -> a -> IO b+type WriteFn a b = [Replacement] -> String -> CPP AnnotatedModule -> a -> IO b  -- | Primitive means of running a 'Retrie' computation. run   :: Monoid b-  => (FilePath -> WriteFn a b)+  => LibDir+  -> (FilePath -> WriteFn a b)      -- ^ write action when a file changes, unchanged files result in 'mempty'   -> (IO b -> IO c)            -- ^ wrap per-file rewrite action   -> Options -> Retrie a -> IO [c]-run writeFn wrapper opts@Options{..} r = do+run libdir writeFn wrapper opts@Options{..} r = do   fps <- getTargetFiles opts (getGroundTerms r)   forFn opts fps $ \ fp -> wrapper $ do     debugPrint verbosity "Processing:" [fp]-    p <- trySync $ parseCPPFile (parseContent fixityEnv) fp+    p <- trySync $ parseCPPFile (parseContent libdir fixityEnv) fp     case p of       Left ex -> do         when (verbosity > Silent) $ print ex@@ -105,16 +106,22 @@   -> CPP AnnotatedModule   -> IO b runOneModule writeFn Options{..} r cpp = do+  -- debugPrint Loud "runOneModule" ["enter"]   (x, cpp', changed) <- runRetrie fixityEnv r cpp   case changed of     NoChange -> return mempty     Change repls imports -> do+      -- debugPrint Loud "runOneModule" ["change", show repls]       let cpp'' = addImportsCPP (additionalImports:imports) cpp'-      writeFn repls (printCPP repls cpp'') x+      writeFn repls (printCPP repls cpp'') cpp'' x +-- isCpp :: CPP AnnotatedModule -> String+-- isCpp (NoCPP m) = "NoCPP:" ++ showAstA m+-- isCpp (CPP{}) = "CPP"+ -- | Write action which counts changed lines using 'diff' writeCountLines :: FilePath -> WriteFn a (Sum Int)-writeCountLines fp reps str _ = do+writeCountLines fp reps str _ _ = do   let lc = lineCount $ map replLocation reps   putStrLn $ "Writing: " ++ fp ++ " (" ++ show lc ++ " lines changed)"   writeFile fp str@@ -122,7 +129,7 @@  -- | Print the lines before replacement and after replacement. writeDiff :: Options -> FilePath -> WriteFn a (Sum Int)-writeDiff Options{..} fp repls _ _ = do+writeDiff Options{..} fp repls _ _ _ = do   fl <- linesMap fp   forM_ repls $ \Replacement{..} -> do     let ppLines lineStart color = unlines@@ -139,7 +146,7 @@  -- | Print lines that match the query and highligh the matched string. writeSearch :: Options -> FilePath -> WriteFn a ()-writeSearch Options{..} fp repls _ _ = do+writeSearch Options{..} fp repls _ _ _ = do   fl <- linesMap fp   forM_ repls $ \Replacement{..} ->     putStrLn $ mconcat@@ -155,7 +162,7 @@  -- | Print only replacement. writeExtract :: Options -> FilePath -> WriteFn a ()-writeExtract Options{..} _ repls _ _ = do+writeExtract Options{..} _ repls _ _ _ = do   forM_ repls $ \Replacement{..} -> do     putStrLn $ mconcat       [ ppSrcSpan colorise replLocation
Retrie/Subst.hs view
@@ -17,6 +17,7 @@ import Retrie.Substitution import Retrie.SYB import Retrie.Types+import Retrie.Util  ------------------------------------------------------------------------ @@ -45,55 +46,66 @@   lookupSubst (rdrFS rdr) sub  substExpr-  :: Monad m+  :: MonadIO m   => Context   -> LHsExpr GhcPs   -> TransformT m (LHsExpr GhcPs) substExpr ctxt e@(L l1 (HsVar x (L l2 v))) =   case lookupHoleVar v ctxt of     Just (HoleExpr eA) -> do-      e' <- graftA (unparen <$> eA)-      comments <- hasComments e'-      unless comments $ transferEntryDPT e e'-      transferAnnsT isComma e e'-      parenify ctxt e'+      -- lift $ liftIO $ debugPrint Loud "substExpr:HoleExpr:e" [showAst e]+      -- lift $ liftIO $ debugPrint Loud "substExpr:HoleExpr:eA" [showAst eA]+      e0 <- graftA (unparen <$> eA)+      let comments = hasComments e0+      -- unless comments $ transferEntryDPT e e'+      e1 <- if comments+               then return e0+               else transferEntryDP e e0+      e2 <- transferAnnsT isComma e e1+      -- let e'' = setEntryDP e' (SameLine 1)+      -- lift $ liftIO $ debugPrint Loud "substExpr:HoleExpr:e2" [showAst e2]+      parenify ctxt e2     Just (HoleRdr rdr) ->       return $ L l1 $ HsVar x $ L l2 rdr     _ -> return e substExpr _ e = return e  substPat-  :: Monad m+  :: MonadIO m   => Context   -> LPat GhcPs   -> TransformT m (LPat GhcPs)-substPat ctxt (dLPat -> Just p@(L l1 (VarPat x vl@(L l2 v)))) = fmap cLPat $+substPat ctxt (dLPat -> Just p@(L l1 (VarPat x _vl@(L l2 v)))) = fmap cLPat $   case lookupHoleVar v ctxt of     Just (HolePat pA) -> do+      -- lift $ liftIO $ debugPrint Loud "substPat:HolePat:p" [showAst p]+      -- lift $ liftIO $ debugPrint Loud "substPat:HolePat:pA" [showAst pA]       p' <- graftA (unparenP <$> pA)-      transferEntryAnnsT isComma p p'+      p0 <- transferEntryAnnsT isComma p p'       -- the relevant entry delta is sometimes attached to       -- the OccName and not to the VarPat.       -- This seems to be the case only when the pattern comes from a lhs,       -- whereas it has no annotations in patterns found in rhs's.-      tryTransferEntryDPT vl p'-      parenifyP ctxt p'+      -- tryTransferEntryDPT vl p'+      parenifyP ctxt p0     Just (HoleRdr rdr) ->       return $ L l1 $ VarPat x $ L l2 rdr     _ -> return p substPat _ p = return p  substType-  :: Monad m+  :: MonadIO m   => Context   -> LHsType GhcPs   -> TransformT m (LHsType GhcPs) substType ctxt ty   | Just (L _ v) <- tyvarRdrName (unLoc ty)   , Just (HoleType tyA) <- lookupHoleVar v ctxt = do+    -- lift $ liftIO $ debugPrint Loud "substType:HoleType:ty" [showAst ty]+    -- lift $ liftIO $ debugPrint Loud "substType:HoleType:tyA" [showAst tyA]     ty' <- graftA (unparenT <$> tyA)-    transferEntryAnnsT isComma ty ty'-    parenifyT ctxt ty'+    ty0 <- transferEntryAnnsT isComma ty ty'+    parenifyT ctxt ty0 substType _ ty = return ty  -- You might reasonably think that we would replace the RdrName in FunBind...
Retrie/Substitution.hs view
@@ -18,11 +18,7 @@ import Retrie.GHC  -- | A 'Substitution' is essentially a map from variable name to 'HoleVal'.-#if __GLASGOW_HASKELL__ < 900-newtype Substitution = Substitution (UniqFM (FastString, HoleVal))-#else newtype Substitution = Substitution (UniqFM FastString (FastString, HoleVal))-#endif -- See Note [Why not RdrNames?] for explanation of use of FastString  instance Show Substitution where
Retrie/Types.hs view
@@ -3,6 +3,7 @@ -- This source code is licensed under the MIT license found in the -- LICENSE file in the root directory of this source tree. --+{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -11,6 +12,7 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeSynonymInstances #-} module Retrie.Types@@ -49,6 +51,7 @@ import Control.Monad.State import Data.Bifunctor import qualified Data.IntMap.Strict as I+import Data.Data hiding (Fixity) import Data.Maybe  import Retrie.AlphaEnv@@ -112,6 +115,10 @@ instance Bifunctor Query where   bimap f g (Query qs ast v) = Query qs (fmap f ast) (g v) +instance (Data (Annotated ast), Show ast, Show v) => Show (Query ast v) where+  show (Query q p r) = "Query " ++ show q ++ " " ++ showAst p ++ " " ++ show r++ ------------------------------------------------------------------------  -- | 'Matcher' is a compiled 'Query'. Several queries can be compiled and then@@ -157,9 +164,9 @@   -> ast   -> TransformT m [(Substitution, v)] runMatcher Context{..} (Matcher m) ast = do-  (anns, seed) <- get+  seed <- get   let-    matchEnv = ME ctxtInScope (\x -> unsafeMkA x anns seed)+    matchEnv = ME ctxtInScope (\x -> unsafeMkA x seed)     uast = inject ast    return
Retrie/Universe.hs view
@@ -32,19 +32,20 @@   = ULHsExpr (LHsExpr GhcPs)   | ULStmt (LStmt GhcPs (LHsExpr GhcPs))   | ULType (LHsType GhcPs)-  | ULPat (Located (Pat GhcPs))+  | ULPat (LPat GhcPs)   deriving (Data)  -- | Exactprint an annotated 'Universe'. printU :: Annotated Universe -> String-printU u = exactPrintU (astA u) (annsA u)+printU u = exactPrintU (astA u)+    `debug` ("printU:" ++ showAst (astA u))  -- | Primitive exactprint for 'Universe'.-exactPrintU :: Universe -> Anns -> String-exactPrintU (ULHsExpr e) anns = exactPrint e anns-exactPrintU (ULStmt s) anns = exactPrint s anns-exactPrintU (ULType t) anns = exactPrint t anns-exactPrintU (ULPat p) anns = exactPrint p anns+exactPrintU :: Universe -> String+exactPrintU (ULHsExpr e) = exactPrint e+exactPrintU (ULStmt s) = exactPrint s+exactPrintU (ULType t) = exactPrint t+exactPrintU (ULPat p) = exactPrint p  ------------------------------------------------------------------------------- @@ -68,29 +69,29 @@   getOrigin (ULType t) = getOrigin t   getOrigin (ULPat p) = getOrigin p -instance Matchable (LHsExpr GhcPs) where+instance Matchable (LocatedA (HsExpr GhcPs)) where   inject = ULHsExpr   project (ULHsExpr x) = x   project _ = error "project LHsExpr"-  getOrigin e = getLoc e+  getOrigin e = getLocA e -instance Matchable (LStmt GhcPs (LHsExpr GhcPs)) where+instance Matchable (LocatedA (Stmt GhcPs (LocatedA (HsExpr GhcPs)))) where   inject = ULStmt   project (ULStmt x) = x   project _ = error "project LStmt"-  getOrigin e = getLoc e+  getOrigin e = getLocA e -instance Matchable (LHsType GhcPs) where+instance Matchable (LocatedA (HsType GhcPs)) where   inject = ULType   project (ULType t) = t   project _ = error "project ULType"-  getOrigin e = getLoc e+  getOrigin e = getLocA e -instance Matchable (Located (Pat GhcPs)) where+instance Matchable (LocatedA (Pat GhcPs)) where   inject = ULPat   project (ULPat p) = p   project _ = error "project ULPat"-  getOrigin = getLoc+  getOrigin = getLocA  ------------------------------------------------------------------------------- 
bin/Main.hs view
@@ -8,6 +8,7 @@  import Control.Monad import Fixity+import qualified GHC.Paths as GHC.Paths import Retrie import Retrie.Debug import Retrie.Options@@ -15,10 +16,11 @@  main :: IO () main = do-  opts@Options{..} <- parseOptions defaultFixityEnv-  doRoundtrips fixityEnv targetDir roundtrips+  let libdir = GHC.Paths.libdir+  opts@Options{..} <- parseOptions libdir defaultFixityEnv+  doRoundtrips libdir fixityEnv targetDir roundtrips   unless (null rewrites) $ do     when (verbosity > Silent) $ do       putStrLn "Adding:"       mapM_ (putStrLn . ppRewrite) rewrites-    execute opts $ apply rewrites+    execute libdir opts $ apply rewrites
demo/Main.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE OverloadedStrings #-} module Main where +import qualified GHC.Paths as GHC.Paths import Retrie  -- | A script for rewriting calls to a function that takes a string to be@@ -22,9 +23,10 @@ -- -quux = fooOld "quux" -- +quux = fooNew (error "invalid argument: quux") --+ main :: IO ()-main = runScript $ \opts -> do-  [rewrite] <- parseRewrites opts [Adhoc "forall arg. fooOld arg = fooNew arg"]+main = runScript GHC.Paths.libdir $ \opts -> do+  [rewrite] <- parseRewrites GHC.Paths.libdir opts [Adhoc "forall arg. fooOld arg = fooNew arg"]   return $ apply [setRewriteTransformer stringToFooArg rewrite]  argMapping :: [(FastString, String)]@@ -42,8 +44,8 @@   , L _ (HsLit _ (HsString _ str)) <- astA expr = do     newExpr <- case lookup str argMapping of       Nothing ->-        parseExpr $ "error \"invalid argument: " ++ unpackFS str ++ "\""-      Just constructor -> parseExpr constructor+        parseExpr GHC.Paths.libdir $ "error \"invalid argument: " ++ unpackFS str ++ "\""+      Just constructor -> parseExpr GHC.Paths.libdir constructor     return $       MatchResult (extendSubst substitution "arg" (HoleExpr newExpr)) template   | otherwise = return NoMatch
retrie.cabal view
@@ -4,7 +4,7 @@ -- LICENSE file in the root directory of this source tree. -- name: retrie-version: 1.1.0.0+version: 1.2.0.0 synopsis: A powerful, easy-to-use codemodding tool for Haskell. homepage: https://github.com/facebookincubator/retrie bug-reports: https://github.com/facebookincubator/retrie/issues@@ -23,7 +23,7 @@   README.md   tests/inputs/*.custom   tests/inputs/*.test-tested-with: GHC ==9.0.1 || ==8.10.4 || ==8.8.4+tested-with: GHC ==9.2.1  description:   Retrie is a tool for codemodding Haskell. Key goals include:@@ -77,21 +77,21 @@   build-depends:     ansi-terminal >= 0.10.3 && < 0.12,     async >= 2.2.2 && < 2.3,-    base >= 4.11 && < 4.16,-    bytestring >= 0.10.8 && < 0.11,+    base >= 4.11 && < 4.17,+    bytestring >= 0.10.8 && < 0.12,     containers >= 0.5.11 && < 0.7,     data-default >= 0.7.1 && < 0.8,     directory >= 1.3.1 && < 1.4,     filepath >= 1.4.2 && < 1.5,-    ghc >= 8.8 && < 9.2,-    ghc-exactprint >= 0.6.2 && < 0.7,+    ghc >= 9.2,+    ghc-exactprint >= 1.3.0 && < 1.4,     list-t >= 1.0.4 && < 1.1,     mtl >= 2.2.2 && < 2.3,     optparse-applicative >= 0.15.1 && < 0.17,     process >= 1.6.3 && < 1.7,     random-shuffle >= 0.0.4 && < 0.1,     syb >= 0.7.1 && < 0.8,-    text >= 1.2.3 && < 1.3,+    text >= 1.2.3 && < 2.0,     transformers >= 0.5.5 && < 0.6,     unordered-containers >= 0.2.10 && < 0.3   default-language: Haskell2010@@ -112,8 +112,9 @@   GHC-Options: -Wall   build-depends:     retrie,-    base >= 4.11 && < 4.16,-    haskell-src-exts >= 1.23.0 && < 1.24+    base >= 4.11 && < 4.17,+    haskell-src-exts >= 1.23.0 && < 1.24,+    ghc-paths   default-language: Haskell2010  executable demo-retrie@@ -128,8 +129,9 @@   GHC-Options: -Wall   build-depends:     retrie,-    base >= 4.11 && < 4.16,-    haskell-src-exts >= 1.23.0 && < 1.24+    base >= 4.11 && < 4.17,+    haskell-src-exts >= 1.23.0 && < 1.24,+    ghc-paths   default-language: Haskell2010  test-suite test@@ -155,15 +157,17 @@   build-depends:     retrie,     HUnit,-    base >= 4.11 && < 4.16,+    base,      containers,     data-default,     deepseq,     directory,+    exceptions,     filepath,-    ghc >= 8.8 && < 9.2,+    ghc,+    ghc-exactprint,     ghc-paths,-    haskell-src-exts >= 1.23.0 && < 1.24,+    haskell-src-exts,     mtl,     optparse-applicative,     process,
tests/AllTests.hs view
@@ -27,21 +27,21 @@ import ParseQualified import Targets -allTests :: Verbosity -> IO Test-allTests rtVerbosity = do+allTests :: LibDir -> Verbosity -> IO Test+allTests libdir rtVerbosity = do   p <- getOptionsParser defaultFixityEnv   rtDir <-     fromMaybe (dropFileName __FILE__ </> "inputs")       <$> lookupEnv "RETRIEINPUTSDIR"   testFiles <- listDir rtDir-  focusTests <- getFocusTests+  focusTests <- getFocusTests libdir   return $ TestList     [ annotatedTest     , cppTest-    , dependentStmtTest rtDir p rtVerbosity+    , dependentStmtTest libdir rtDir p rtVerbosity     , excludeTest rtVerbosity     , TestLabel "golden" $ TestList-      [ TestLabel rtName $ TestCase $ runTest p RetrieTest{..}+      [ TestLabel rtName $ TestCase $ runTest libdir p RetrieTest{..}       | testFile <- testFiles       , takeExtension testFile == ".test"       , let@@ -50,11 +50,11 @@           rtRetrie = return . apply . rewrites       ]     , TestLabel "custom Retrie" $ TestCase $-        runTest p RetrieTest+        runTest libdir p RetrieTest           { rtName = "custom Retrie"           , rtTest = "Adhoc2.custom"           , rtRetrie = \opts -> do-              rrs' <- parseRewrites opts+              rrs' <- parseRewrites libdir opts                 [ Adhoc "forall f g xs. map f (map g xs) = map (f . g) xs"                 , Adhoc "forall p xs. length (filter p xs) = count p xs"                 ]@@ -62,21 +62,21 @@           , ..           }     , TestLabel "README advanced rewrite demo" $ TestCase $-        runTest p RetrieTest+        runTest libdir p RetrieTest           { rtName = "README advanced rewrite demo"           , rtTest = "Readme.custom"           , rtRetrie = \opts -> do               [rewrite] <--                parseRewrites opts [Adhoc "forall arg. fooOld arg = fooNew arg"]-              return $ apply [setRewriteTransformer Demo.stringToFooArg rewrite]+                parseRewrites libdir opts [Adhoc "forall arg. fooOld arg = fooNew arg"]+              return $ apply [setRewriteTransformer (Demo.stringToFooArg libdir) rewrite]           , ..           }     , TestLabel "query test" $ TestCase $ do-        is <- runQueryTest p RetrieTest+        is <- runQueryTest libdir p RetrieTest           { rtName = "query test"           , rtTest = "Query.custom"           , rtRetrie = \opts -> do-              qs <- parseQueries opts [(["x"], QExpr "succ x", 1::Int)]+              qs <- parseQueries libdir opts [(["x"], QExpr "succ x", 1::Int)]               return $ do                 matches <- query qs                 return [ v | (_,_,v) <- matches ]@@ -84,7 +84,7 @@           }         assertEqual "found three succs" 3 (sum is)     , TestLabel "groundterms can be found" $ TestList focusTests-    , groundTermsTest+    , groundTermsTest libdir     , ignoreTest     , parseQualifiedTest     , basicTargetTest
tests/Annotated.hs view
@@ -11,9 +11,10 @@ import Control.Monad.State.Lazy import Data.Data import Data.Generics-import qualified Data.Map as M-import qualified Data.Set as S-import Data.Maybe+-- import qualified Data.Map as M+-- import qualified Data.Set as S+-- import Data.Maybe+import qualified GHC.Paths as GHC.Paths import Test.HUnit  import Retrie.ExactPrint@@ -21,11 +22,12 @@  annotatedTest :: Test annotatedTest = TestLabel "Annotated" $ TestList-  [ increasingSeedTest-  , elemsPostGraftTest-  , inverseTest+  [ -- increasingSeedTest+  -- , elemsPostGraftTest+  -- ,+  inverseTest   , uniqueSrcSpanTest-  , trimTest+  -- , trimTest   ]  exprs :: [String]@@ -57,8 +59,9 @@ -- Run test on all ASTs parsed from the above lists forAst :: (forall a. Data a => Annotated a -> IO ()) -> IO () forAst f = do-  mapM_ (parseExpr >=> f) exprs-  mapM_ (parseType >=> f) types+  let libdir = GHC.Paths.libdir+  mapM_ (parseExpr libdir >=> f) exprs+  mapM_ (parseType libdir >=> f) types  -- Repeat a single transformation multiple times on an ast. The ast returned -- from the previous transformation is passed to the next transformation.@@ -67,29 +70,29 @@   _ <- fmap astA $ transformA at (f >=> f >=> f >=> f)   return () -increasingSeedTest :: Test-increasingSeedTest = TestLabel "graft increases seed" $ TestCase $-  testChainedTransforms transform-  where-    transform :: Data a => a -> TransformT IO a-    transform = transformWithSeedIncreaseCheck . (pruneA >=> graftA)+-- increasingSeedTest :: Test+-- increasingSeedTest = TestLabel "graft increases seed" $ TestCase $+--   testChainedTransforms transform+--   where+--     transform :: Data a => a -> TransformT IO a+--     transform = transformWithSeedIncreaseCheck . (pruneA >=> graftA)  -- Following a graft, the annotation map in the state has the expected elements-elemsPostGraftTest :: Test-elemsPostGraftTest = TestLabel "Expected elems in map" $ TestCase $-  testChainedTransforms transform-  where-    transform :: Data a => a -> TransformT IO a-    transform t = do-      annsPreGraft <- gets fst-      at <- pruneA t-      t' <- graftA at-      annsPostGraft <- gets fst-      lift $ liftIO $ do-        assertCountMaintained annsPreGraft t annsPostGraft-        assertNoOverwrite annsPreGraft annsPostGraft-        assertExactPrintAnns annsPreGraft annsPostGraft-      return t'+-- elemsPostGraftTest :: Test+-- elemsPostGraftTest = TestLabel "Expected elems in map" $ TestCase $+--   testChainedTransforms transform+--   where+--     transform :: Data a => a -> TransformT IO a+--     transform t = do+--       annsPreGraft <- gets fst+--       at <- pruneA t+--       t' <- graftA at+--       annsPostGraft <- gets fst+--       lift $ liftIO $ do+--         assertCountMaintained annsPreGraft t annsPostGraft+--         assertNoOverwrite annsPreGraft annsPostGraft+--         assertExactPrintAnns annsPreGraft annsPostGraft+--       return t'  inverseTest :: Test inverseTest = TestLabel "graftA and pruneA are inverse" $ TestCase $@@ -97,14 +100,14 @@   where     transform :: Data a => a -> TransformT IO a     transform t = do-      anns <- gets fst+      -- anns <- gets fst       at <- pruneA t       t' <- graftA at-      anns' <- gets fst-      lift $ liftIO $-        assertAstsEqual "ast pre-graft is same as ast post-graft"-          (anns, t)-          (anns', t')+      -- anns' <- gets fst+      -- lift $ liftIO $+      --   assertAstsEqual "ast pre-graft is same as ast post-graft"+      --     (anns, t)+      --     (anns', t')       return t'  uniqueSrcSpanTest :: Test@@ -113,17 +116,17 @@     ss <- transformWithSeedIncreaseCheck uniqueSrcSpanT     lift $ liftIO $ assertGoodSrcSpan ss -trimTest :: Test-trimTest = TestLabel "trimA" $ TestCase $-  forAst $ \at ->-    let at' = trimA at in-    assertLocsReplaced (astA at')+-- trimTest :: Test+-- trimTest = TestLabel "trimA" $ TestCase $+--   forAst $ \at ->+--     let at' = trimA at in+--     assertLocsReplaced (astA at')  transformWithSeedIncreaseCheck :: TransformT IO a -> TransformT IO a transformWithSeedIncreaseCheck m = do-  seed <- gets snd+  seed <- get   x <- m-  seed' <- gets snd+  seed' <- get   lift $ liftIO $ assertBool "transform increases seed" (seed' > seed)   return x @@ -139,24 +142,24 @@         Nothing -> defaultVal         Just ss -> q (L ss t) --- Structure of HsExpr AST, including constructor names and annotations--- associated with SrcSpan locations.-data ConTree = ConNode AnnConName (Maybe Annotation) [ConTree]-  deriving (Eq, Show)+-- -- Structure of HsExpr AST, including constructor names and annotations+-- -- associated with SrcSpan locations.+-- data ConTree = ConNode AnnConName (Maybe Annotation) [ConTree]+--   deriving (Eq, Show) --- Assert ast equality (up to src span location labeling)-assertAstsEqual :: Data a => String -> (Anns, a) -> (Anns, a) -> IO ()-assertAstsEqual msg (anns1, t1) (anns2, t2) =-  assertEqual msg (conTree anns1 t1) (conTree anns2 t2)-  where-    conTree :: Data a => Anns -> a -> ConTree-    conTree anns = loop-      where-        loop :: Data a => a -> ConTree-        loop t = ConNode (annGetConstr t) (annQ t) (gmapQ loop t)+-- -- Assert ast equality (up to src span location labeling)+-- assertAstsEqual :: Data a => String -> (Anns, a) -> (Anns, a) -> IO ()+-- assertAstsEqual msg (anns1, t1) (anns2, t2) =+--   assertEqual msg (conTree anns1 t1) (conTree anns2 t2)+--   where+--     conTree :: Data a => Anns -> a -> ConTree+--     conTree anns = loop+--       where+--         loop :: Data a => a -> ConTree+--         loop t = ConNode (annGetConstr t) (annQ t) (gmapQ loop t) -        annQ :: GenericQ (Maybe Annotation)-        annQ = locatedQ Nothing $ \loc -> M.lookup (mkAnnKey loc) anns+--         annQ :: GenericQ (Maybe Annotation)+--         annQ = locatedQ Nothing $ \loc -> M.lookup (mkAnnKey loc) anns  -- Assert that all locations in the updated ast are generated by uniqueSrcSpanT assertLocsReplaced :: Data a => a -> IO ()@@ -165,46 +168,46 @@     assertReplaced :: GenericQ (IO ())     assertReplaced = locatedQ (return ()) $ \(L ss _) -> assertGoodSrcSpan ss --- Assert that every location in the ast has been added to the pre-graft--- annotations to form the post-graft annotations.-assertCountMaintained :: Data a => Anns -> a -> Anns -> IO ()-assertCountMaintained annsPreGraft t annsPostGraft =-  let numAnnsAdded = everything (+) countIfInAnns t in-  assertEqual-    "sum of pre-graft size and # of SrcSpan sites in AST equals post-graft size"-    (M.size annsPreGraft + numAnnsAdded)-    (M.size annsPostGraft)-  where-    countIfInAnns :: GenericQ Int-    countIfInAnns = locatedQ 0 $ \loc ->-      if M.member (mkAnnKey loc) annsPreGraft then 1 else 0+-- -- Assert that every location in the ast has been added to the pre-graft+-- -- annotations to form the post-graft annotations.+-- assertCountMaintained :: Data a => Anns -> a -> Anns -> IO ()+-- assertCountMaintained annsPreGraft t annsPostGraft =+--   let numAnnsAdded = everything (+) countIfInAnns t in+--   assertEqual+--     "sum of pre-graft size and # of SrcSpan sites in AST equals post-graft size"+--     (M.size annsPreGraft + numAnnsAdded)+--     (M.size annsPostGraft)+--   where+--     countIfInAnns :: GenericQ Int+--     countIfInAnns = locatedQ 0 $ \loc ->+--       if M.member (mkAnnKey loc) annsPreGraft then 1 else 0 --- Check that no data in pre-graft map was overwritten.-assertNoOverwrite :: Anns -> Anns -> IO ()-assertNoOverwrite annsPreGraft annsPostGraft =-  assertEqual "pre-graft keys correspond to same data as post-graft"-    dataPreGraft-    dataPostGraft-  where-    dataPreGraft = M.toList annsPreGraft-    dataPostGraft = mapMaybe (\(k, _) -> do-        v <- M.lookup k annsPostGraft-        return (k, v))-      dataPreGraft+-- -- Check that no data in pre-graft map was overwritten.+-- assertNoOverwrite :: Anns -> Anns -> IO ()+-- assertNoOverwrite annsPreGraft annsPostGraft =+--   assertEqual "pre-graft keys correspond to same data as post-graft"+--     dataPreGraft+--     dataPostGraft+--   where+--     dataPreGraft = M.toList annsPreGraft+--     dataPostGraft = mapMaybe (\(k, _) -> do+--         v <- M.lookup k annsPostGraft+--         return (k, v))+--       dataPreGraft --- Assert that the annotation keys corresponding to newly-added data are of the--- expected form.-assertExactPrintAnns :: Anns -> Anns -> IO ()-assertExactPrintAnns annsPreGraft annsPostGraft =-  forM_ newKeys $ \(AnnKey ss _) ->-#if __GLASGOW_HASKELL__ < 900-    assertGoodSrcSpan ss-#else-    assertGoodRealSrcSpan ss-#endif-  where-    newKeys :: S.Set AnnKey-    newKeys = M.keysSet annsPostGraft `S.difference` M.keysSet annsPreGraft+-- -- Assert that the annotation keys corresponding to newly-added data are of the+-- -- expected form.+-- assertExactPrintAnns :: Anns -> Anns -> IO ()+-- assertExactPrintAnns annsPreGraft annsPostGraft =+--   forM_ newKeys $ \(AnnKey ss _) ->+-- #if __GLASGOW_HASKELL__ < 900+--     assertGoodSrcSpan ss+-- #else+--     assertGoodRealSrcSpan ss+-- #endif+--   where+--     newKeys :: S.Set AnnKey+--     newKeys = M.keysSet annsPostGraft `S.difference` M.keysSet annsPreGraft  assertGoodSrcSpan :: SrcSpan -> IO () assertGoodSrcSpan srcSpan =
tests/CPP.hs view
@@ -12,6 +12,7 @@ import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.IO as Text+import qualified GHC.Paths as GHC.Paths import Retrie.CPP import Retrie.ExactPrint import Retrie.Util@@ -253,7 +254,7 @@  roundTripTest :: CPPTest -> Test roundTripTest CPPTest{..} = TestLabel ("roundtrip: " ++ name) $ TestCase $ do-  r <- trySync $ parseCPP (parseContentNoFixity "roundTripTest") code+  r <- trySync $ parseCPP (parseContentNoFixity GHC.Paths.libdir "roundTripTest") code   case r of     Left msg -> assertFailure (show msg)     Right cpp -> assertEqual "cpp did not roundtrip correctly"
tests/Demo.hs view
@@ -11,15 +11,15 @@ argMapping :: [(FastString, String)] argMapping = [("foo", "Foo"), ("bar", "Bar")] -stringToFooArg :: MatchResultTransformer-stringToFooArg _ctxt match+stringToFooArg :: LibDir -> MatchResultTransformer+stringToFooArg libdir _ctxt match   | MatchResult substitution template <- match   , Just (HoleExpr expr) <- lookupSubst "arg" substitution   , L _ (HsLit _ (HsString _ str)) <- astA expr = do     newExpr <- case lookup str argMapping of       Nothing ->-        parseExpr $ "error \"invalid argument: " ++ unpackFS str ++ "\""-      Just constructor -> parseExpr constructor+        parseExpr libdir $ "error \"invalid argument: " ++ unpackFS str ++ "\""+      Just constructor -> parseExpr libdir constructor     return $       MatchResult (extendSubst substitution "arg" (HoleExpr newExpr)) template   | otherwise = return NoMatch
tests/Dependent.hs view
@@ -13,20 +13,21 @@ import Retrie import Retrie.Options -dependentStmtTest :: FilePath -> Parser ProtoOptions -> Verbosity -> Test-dependentStmtTest rtDir p rtVerbosity =+dependentStmtTest :: LibDir -> FilePath -> Parser ProtoOptions -> Verbosity -> Test+dependentStmtTest libdir rtDir p rtVerbosity =   TestLabel "dependent stmt" $ TestCase $-    runTest p RetrieTest+    runTest libdir p RetrieTest       { rtName = "dependent stmt"       , rtTest = "DependentStmt.custom"       , rtRetrie = \opts -> do-          rrs <- parseRewrites opts [ Adhoc "forall x. foo x = baz x" ]-          stmt <- parseStmt "y <- bar 54"+          rrs <- parseRewrites libdir opts [ Adhoc "forall x. foo x = baz x" ]+          stmt <- parseStmt libdir "y <- bar 54"           let             rr = toURewrite $               Query emptyQs stmt                 (Template stmt mempty (Just rrs), defaultTransformer)            return $ apply [rr]+      , rtVerbosity = Loud       , ..       }
tests/Golden.hs view
@@ -16,11 +16,15 @@ import Control.DeepSeq (force) import Control.Exception (evaluate) import Control.Monad+import qualified Control.Monad.Catch as MC+import Control.Monad.IO.Class import Data.Bifunctor (second) import Data.Char (isSpace) import Data.List (intersperse) import Options.Applicative import Retrie+import Retrie.CPP+import Retrie.ExactPrint.Annotated import Retrie.Options hiding (parseOptions) import Retrie.Run import System.Directory@@ -38,17 +42,18 @@   }  parseOptions-  :: Parser ProtoOptions+  :: LibDir+  -> Parser ProtoOptions   -> FilePath   -> RetrieTest a   -> IO Options-parseOptions p dir RetrieTest{..} = do+parseOptions libdir p dir RetrieTest{..} = do   flags <- takeFlags <$> readFileNoComments (rtDir </> rtTest)   case runParserOnString p flags of     Nothing   ->       fail $ unwords [rtName, " options did not parse: ", flags]     Just opts -> do-      resolveOptions opts { targetDir = dir, verbosity = rtVerbosity }+      resolveOptions libdir opts { targetDir = dir, verbosity = rtVerbosity }  runParserOnString :: Parser a -> String -> Maybe a runParserOnString p args = getParseResult $@@ -63,45 +68,60 @@         s' -> recurse $ break isSpace s'  runTestWrapper-  :: Parser ProtoOptions+  :: LibDir+  -> Parser ProtoOptions   -> RetrieTest a   -> (Options -> IO b)   -> IO b-runTestWrapper p t@RetrieTest{..} f =-  withTmpCopyOfInputs rtDir $ \dir -> do+runTestWrapper libdir p t@RetrieTest{..} f =+  withTmpCopyOfInputs KeepDir rtDir $ \dir -> do     -- Make the Rewrites from the temp file, to get correct SrcSpan's-    opts <- parseOptions p dir t+    opts <- parseOptions libdir p dir t     f opts { targetFiles = [dir </> replaceExtension rtTest ".hs"] }  runQueryTest   :: Monoid a-  => Parser ProtoOptions+  => LibDir+  -> Parser ProtoOptions   -> RetrieTest a   -> IO a-runQueryTest p t@RetrieTest{..} =-  runTestWrapper p t $ \opts -> do-    let writeFn _fp _locs _res = return+runQueryTest libdir p t@RetrieTest{..} =+  runTestWrapper libdir p t $ \opts -> do+    let writeFn _fp _locs _cpp _res = return     retrie <- rtRetrie opts     -- A 'writeFn' is only executed if the module changes, so add empty imports     -- to trip the Changed flag.-    fmap mconcat $ run writeFn id opts $ do+    fmap mconcat $ run libdir writeFn id opts $ do       r <- retrie       addImports mempty       return r -runTest :: Parser ProtoOptions -> RetrieTest () -> IO ()-runTest p t@RetrieTest{..} =-  runTestWrapper p t $ \opts@Options{..} -> do+runTest :: LibDir -> Parser ProtoOptions -> RetrieTest () -> IO ()+runTest libdir p t@RetrieTest{..} =+  runTestWrapper libdir p t $ \opts@Options{..} -> do     let-      writeFn fp _locs res _ = writeFile fp res+      writeFn fp _locs res _ _ = writeFile fp res       [tmpFile] = targetFiles     before <- evaluate . force =<< readFile tmpFile     retrie <- rtRetrie opts-    void $ run writeFn id opts $ iterateR iterateN retrie+    -- void $ run libdir writeFn id opts $ iterateR iterateN retrie+    void $ run libdir writeFileDumpAst id opts $ iterateR iterateN retrie     res <- readFile tmpFile     expected <- readFile $ targetDir </> replaceExtension rtTest ".expected"     displayAndAssertEqual before expected res +writeFileDumpAst :: FilePath -> WriteFn a ()+writeFileDumpAst fp _locs res cpp _ = do+  case cpp of+    NoCPP m -> do+      let outname = fp <.> "out"+      writeFile outname res+      appendFile outname "\n===============================================\n"+      appendFile outname (showAstA m)+    _ -> return ()+  writeFile fp res++ displayAndAssertEqual :: String -> String -> String -> IO () displayAndAssertEqual before expected res   | expected == res = return ()@@ -128,18 +148,34 @@   (_ec, so, _) <- readProcessWithExitCode "diff" [aFile, bFile] ""   return so +data KeepDir = KeepDir | DeleteDir deriving Eq+ -- Copies input dir, mapping *.test to *.hs, -- and provides a filepath to the root -- of the copy. Deletes the copy when done.-withTmpCopyOfInputs :: FilePath -> (FilePath -> IO a) -> IO a-withTmpCopyOfInputs inputsDir comp = do+withTmpCopyOfInputs :: KeepDir -> FilePath -> (FilePath -> IO a) -> IO a+withTmpCopyOfInputs keep inputsDir comp = do   fs <- listDir inputsDir-  withSystemTempDirectory "inputs" $ \dir -> do+  withSystemTempDirectory' keep "inputs" $ \dir -> do     forM_ fs $ \f -> do       if takeExtension f `elem` [".test", ".custom"]         then splitAndCopyTest inputsDir f dir         else copyFile (inputsDir </> f) (dir </> f)     comp dir++withSystemTempDirectory' :: (MonadIO m, MC.MonadMask m)+                        => KeepDir -- ^ Keep the contents when done+                        -> String   -- ^ Directory name template+                        -> (FilePath -> m a) -- ^ Callback that can use the directory+                        -> m a+withSystemTempDirectory' keep template act+  = case keep of+      DeleteDir -> withSystemTempDirectory template act+      KeepDir -> do+        tmpDir <- liftIO getCanonicalTemporaryDirectory+        dir <- liftIO $ createTempDirectory tmpDir template+        act dir+  splitAndCopyTest :: FilePath -> FilePath -> FilePath -> IO () splitAndCopyTest inputsDir testFile dstDir = do
tests/GroundTerms.hs view
@@ -24,27 +24,27 @@ import Retrie.Universe import Test.HUnit -groundTermsTest :: Test-groundTermsTest = TestLabel "ground terms" $ TestList-  [ gtTest "map"+groundTermsTest :: LibDir -> Test+groundTermsTest libdir = TestLabel "ground terms" $ TestList+  [ gtTest libdir "map"       ""       []       [Adhoc "forall f g xs. map f (map g xs) = map (f . g) xs"]       [["map"]]       [GrepCommands [] ["grep -R --include=\"*.hs\" -l 'map' '~/si_sigma'"]]-  , gtTest "isSpace"+  , gtTest libdir "isSpace"       ""       []       [Adhoc "forall xs. or (map isSpace xs) = any isSpace xs"]       [["or", "map isSpace"]]       [GrepCommands [] ["grep -R --include=\"*.hs\" -l 'or' '~/si_sigma'", "grep -l 'map[[:space:]]\\+isSpace'"]]-  , gtTest "MyType"+  , gtTest libdir "MyType"       "type MyType a = MyOtherType a"       []       [TypeForward "Test.MyType"]       [["MyType"]]       [GrepCommands [] ["grep -R --include=\"*.hs\" -l 'MyType' '~/si_sigma'"]]-  , gtTest "isSpace with file"+  , gtTest libdir "isSpace with file"       ""       ["Test.hs", "Test2.hs"]       [Adhoc "forall xs. or (map isSpace xs) = any isSpace xs"]@@ -53,14 +53,15 @@   ]  gtTest-  :: String+  :: LibDir+  -> String   -> Text   -> [FilePath]   -> [RewriteSpec]   -> [[String]]   -> [GrepCommands]   -> Test-gtTest lbl contents targFiles specs expected expectedCmds =+gtTest libdir lbl contents targFiles specs expected expectedCmds =   TestLabel ("groundTerms: " ++ lbl) $ TestCase $ do     -- since we 'zip' below     assertEqual "length of specs and expected ground terms"@@ -71,8 +72,8 @@       (length expectedCmds)      rrs <--      parseRewriteSpecs-        (\_ -> parseCPP (parseContent defaultFixityEnv "Test") contents)+      parseRewriteSpecs libdir+        (\_ -> parseCPP (parseContent libdir defaultFixityEnv "Test") contents)         defaultFixityEnv         specs     let gtss = map groundTerms rrs@@ -86,10 +87,10 @@             expectedCmd             (buildGrepChain "~/si_sigma" gts targFiles) -getFocusTests :: IO [Test]-getFocusTests = do-  rrs1 <- parseAdhocs defaultFixityEnv ["forall xs. or (map isSpace xs) = any isSpace xs"]-  rrs2 <- parseAdhocs defaultFixityEnv ["forall f g xs. map f (map g xs) = map (f . g) xs"]+getFocusTests :: LibDir -> IO [Test]+getFocusTests libdir = do+  rrs1 <- parseAdhocs libdir defaultFixityEnv ["forall xs. or (map isSpace xs) = any isSpace xs"]+  rrs2 <- parseAdhocs libdir defaultFixityEnv ["forall f g xs. map f (map g xs) = map (f . g) xs"]   let     -- compare hashsets to avoid ordering issues     terms = HashSet.fromList $ map groundTerms rrs1
tests/Main.hs view
@@ -9,11 +9,12 @@ import Test.Tasty import Test.Tasty.HUnit +import qualified GHC.Paths as GHC.Paths import Retrie import AllTests  main :: IO ()-main = allTests Silent >>= defaultMain . toTasty . TestLabel "retrie"+main = allTests GHC.Paths.libdir Silent >>= defaultMain . toTasty . TestLabel "retrie"  toTasty :: Test -> TestTree toTasty (TestLabel lbl (TestCase io)) = testCase lbl io
tests/inputs/Operator.test view
@@ -43,7 +43,8 @@ +  print $ foo || bar +  print $ foo || bar +  print $ foo || bar-+  print $ {- comment here -} foo || bar+# TODO fix extraneous space++  print $  {- comment here -} foo || bar +  print $ foo {- comment here -} || bar +  print $ foo || {- comment here -} bar +  print $ foo || bar {- comment here -}
tests/inputs/PatBind.test view
@@ -19,11 +19,9 @@  zzz :: () -zzz = let (alpha, beta) = one global -       in f alpha-+zzz = let (y,x) = two global-+       in f x++zzz = let (y,x) = two global in f x   yyy :: () -yyy = let snd:fst:xs = flipFirst global -       in f fst snd-+yyy = let x1:x2:xs = global-+       in f x1 x2++yyy = let x1:x2:xs = global in f x1 x2
tests/inputs/Readme2.test view
@@ -16,8 +16,8 @@  -{-# RULES "myRule" forall x. maybe Nothing Just x = x #-} +{-# RULES "myRule" forall x. case x of-+            Nothing -> Nothing-+            Just x1 -> Just x1 = x #-}++  Nothing -> Nothing++  Just x1 -> Just x1 = x #-}   foo :: MyMaybe -foo = maybe Nothing Just (Just 5)
tests/inputs/Types4.test view
@@ -7,7 +7,7 @@ --type-backward Types4.Foo2 --type-backward Types4.Foo3 --type-backward Types4.Foo4---type-backward Types4.Foo5+# TODO --type-backward Types4.Foo5 ===  {-# LANGUAGE ScopedTypeVariables #-}  {-# LANGUAGE TypeOperators #-}@@ -40,6 +40,6 @@   type Foo5 = forall r (a :: Type) (b :: TYPE r). (a -> b) -> a -> b --foo5 :: forall s (c :: Type) (d :: TYPE s). (c -> d) -> c -> d-+foo5 :: Foo5+#-foo5 :: forall s (c :: Type) (d :: TYPE s). (c -> d) -> c -> d+ foo5 :: Foo5  foo5 = ($)