Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ghc-th-expand-syns for openSUSE:Factory checked in at 2021-09-10 23:41:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-th-expand-syns (Old) and /work/SRC/openSUSE:Factory/.ghc-th-expand-syns.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-th-expand-syns" Fri Sep 10 23:41:14 2021 rev:14 rq:917500 version:0.4.9.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-th-expand-syns/ghc-th-expand-syns.changes 2021-03-17 20:19:39.379293031 +0100 +++ /work/SRC/openSUSE:Factory/.ghc-th-expand-syns.new.1899/ghc-th-expand-syns.changes 2021-09-10 23:41:32.166573740 +0200 @@ -1,0 +2,22 @@ +Fri Sep 3 14:01:20 UTC 2021 - psim...@suse.com + +- Update th-expand-syns to version 0.4.9.0. + ## 0.4.9.0 [2021.08.30] + + * Consolidate the type-synonym expansion functionality with `th-abstraction`, + which also provides the ability to expand type synonyms. After this change, + the `th-expand-syns` library is mostly a small shim on top of + `th-abstraction`. The only additional pieces of functionality that + `th-expand-syns` which aren't currently available in `th-abstraction` are: + + * `th-expand-syns`' `expandSyns{With}` functions will warn that they cannot + expand type families (if the `SynonymExpansionSettings` are configured to + check for this). By contrast, `th-abstraction`'s `applySubstitution` + function will silently ignore type families. + * `th-expand-syns` provides a `substInCon` function which allows substitution + into `Con`s. + * `th-expand-syns` provides `evade{s}` functions which support type variable + `Name` freshening that calculating the free variables in any type that + provides an instance of `Data`. + +------------------------------------------------------------------- Old: ---- th-expand-syns-0.4.8.0.tar.gz New: ---- th-expand-syns-0.4.9.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-th-expand-syns.spec ++++++ --- /var/tmp/diff_new_pack.htmrhN/_old 2021-09-10 23:41:32.566574165 +0200 +++ /var/tmp/diff_new_pack.htmrhN/_new 2021-09-10 23:41:32.570574169 +0200 @@ -19,7 +19,7 @@ %global pkg_name th-expand-syns %bcond_with tests Name: ghc-%{pkg_name} -Version: 0.4.8.0 +Version: 0.4.9.0 Release: 0 Summary: Expands type synonyms in Template Haskell ASTs License: BSD-3-Clause @@ -36,6 +36,10 @@ %description Expands type synonyms in Template Haskell ASTs. +As of version '0.4.9.0', this library is a small shim on top of the +'applySubstitution'/'resolveTypeSynonyms' functions from 'th-abstraction', so +you may want to consider using 'th-abstraction' instead. + %package devel Summary: Haskell %{pkg_name} library development files Requires: %{name} = %{version}-%{release} ++++++ th-expand-syns-0.4.8.0.tar.gz -> th-expand-syns-0.4.9.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/th-expand-syns-0.4.8.0/Language/Haskell/TH/ExpandSyns.hs new/th-expand-syns-0.4.9.0/Language/Haskell/TH/ExpandSyns.hs --- old/th-expand-syns-0.4.8.0/Language/Haskell/TH/ExpandSyns.hs 2001-09-09 03:46:40.000000000 +0200 +++ new/th-expand-syns-0.4.9.0/Language/Haskell/TH/ExpandSyns.hs 2001-09-09 03:46:40.000000000 +0200 @@ -11,12 +11,14 @@ ,substInCon ,evades,evade) where +import Language.Haskell.TH.Datatype import Language.Haskell.TH.Datatype.TyVarBndr import Language.Haskell.TH.ExpandSyns.SemigroupCompat as Sem import Language.Haskell.TH hiding(cxt) +import qualified Data.Map as Map +import Data.Map (Map) import qualified Data.Set as Set import Data.Generics -import Data.Maybe import Control.Monad import Prelude @@ -35,29 +37,11 @@ tyVarBndrSetName :: Name -> TyVarBndr_ flag -> TyVarBndr_ flag tyVarBndrSetName n = mapTVName (const n) -#if MIN_VERSION_template_haskell(2,10,0) --- mapPred is not needed for template-haskell >= 2.10 -#else -mapPred :: (Type -> Type) -> Pred -> Pred -mapPred f (ClassP n ts) = ClassP n (f <$> ts) -mapPred f (EqualP t1 t2) = EqualP (f t1) (f t2) -#endif - -#if MIN_VERSION_template_haskell(2,10,0) -bindPred :: (Type -> Q Type) -> Pred -> Q Pred -bindPred = id -#else -bindPred :: (Type -> Q Type) -> Pred -> Q Pred -bindPred f (ClassP n ts) = ClassP n <$> mapM f ts -bindPred f (EqualP t1 t2) = (EqualP <$> f t1) `ap` f t2 -#endif - data SynonymExpansionSettings = SynonymExpansionSettings { sesWarnTypeFamilies :: Bool } - instance Semigroup SynonymExpansionSettings where SynonymExpansionSettings w1 <> SynonymExpansionSettings w2 = SynonymExpansionSettings (w1 && w2) @@ -79,7 +63,6 @@ mappend = (Sem.<>) #endif - -- | Suppresses the warning that type families are unsupported. noWarnTypeFamilies :: SynonymExpansionSettings noWarnTypeFamilies = mempty { sesWarnTypeFamilies = False } @@ -93,371 +76,178 @@ #endif (packagename ++": WARNING: "++msg) - - - -type SynInfo = ([Name],Type) - -nameIsSyn :: SynonymExpansionSettings -> Name -> Q (Maybe SynInfo) -nameIsSyn settings n = do +warnIfNameIsTypeFamily :: Name -> Q () +warnIfNameIsTypeFamily n = do i <- reify n case i of - ClassI {} -> no - ClassOpI {} -> no - TyConI d -> decIsSyn settings d + ClassI {} -> return () + ClassOpI {} -> return () + TyConI d -> warnIfDecIsTypeFamily d #if MIN_VERSION_template_haskell(2,7,0) - FamilyI d _ -> decIsSyn settings d -- Called for warnings + FamilyI d _ -> warnIfDecIsTypeFamily d -- Called for warnings #endif - PrimTyConI {} -> no - DataConI {} -> no - VarI {} -> no - TyVarI {} -> no + PrimTyConI {} -> return () + DataConI {} -> return () + VarI {} -> return () + TyVarI {} -> return () #if MIN_VERSION_template_haskell(2,12,0) - PatSynI {} -> no + PatSynI {} -> return () #endif +warnIfDecIsTypeFamily :: Dec -> Q () +warnIfDecIsTypeFamily = go where - no = return Nothing - -decIsSyn :: SynonymExpansionSettings -> Dec -> Q (Maybe SynInfo) -decIsSyn settings = go - where - go (TySynD _ vars t) = return (Just (tvName <$> vars,t)) + go (TySynD {}) = return () #if MIN_VERSION_template_haskell(2,11,0) - go (OpenTypeFamilyD (TypeFamilyHead name _ _ _)) = maybeWarnTypeFamily settings name >> no - go (ClosedTypeFamilyD (TypeFamilyHead name _ _ _) _) = maybeWarnTypeFamily settings name >> no + go (OpenTypeFamilyD (TypeFamilyHead name _ _ _)) = maybeWarnTypeFamily name + go (ClosedTypeFamilyD (TypeFamilyHead name _ _ _) _) = maybeWarnTypeFamily name #else #if MIN_VERSION_template_haskell(2,9,0) - go (ClosedTypeFamilyD name _ _ _) = maybeWarnTypeFamily settings name >> no + go (ClosedTypeFamilyD name _ _ _) = maybeWarnTypeFamily name #endif - go (FamilyD TypeFam name _ _) = maybeWarnTypeFamily settings name >> no + go (FamilyD TypeFam name _ _) = maybeWarnTypeFamily name #endif - go (FunD {}) = no - go (ValD {}) = no - go (DataD {}) = no - go (NewtypeD {}) = no - go (ClassD {}) = no - go (InstanceD {}) = no - go (SigD {}) = no - go (ForeignD {}) = no + go (FunD {}) = return () + go (ValD {}) = return () + go (DataD {}) = return () + go (NewtypeD {}) = return () + go (ClassD {}) = return () + go (InstanceD {}) = return () + go (SigD {}) = return () + go (ForeignD {}) = return () #if MIN_VERSION_template_haskell(2,8,0) - go (InfixD {}) = no + go (InfixD {}) = return () #endif - go (PragmaD {}) = no + go (PragmaD {}) = return () -- Nothing to expand for data families, so no warning #if MIN_VERSION_template_haskell(2,11,0) - go (DataFamilyD {}) = no + go (DataFamilyD {}) = return () #else - go (FamilyD DataFam _ _ _) = no + go (FamilyD DataFam _ _ _) = return () #endif - go (DataInstD {}) = no - go (NewtypeInstD {}) = no - go (TySynInstD {}) = no + go (DataInstD {}) = return () + go (NewtypeInstD {}) = return () + go (TySynInstD {}) = return () #if MIN_VERSION_template_haskell(2,9,0) - go (RoleAnnotD {}) = no + go (RoleAnnotD {}) = return () #endif #if MIN_VERSION_template_haskell(2,10,0) - go (StandaloneDerivD {}) = no - go (DefaultSigD {}) = no + go (StandaloneDerivD {}) = return () + go (DefaultSigD {}) = return () #endif #if MIN_VERSION_template_haskell(2,12,0) - go (PatSynD {}) = no - go (PatSynSigD {}) = no + go (PatSynD {}) = return () + go (PatSynSigD {}) = return () #endif #if MIN_VERSION_template_haskell(2,15,0) - go (ImplicitParamBindD {}) = no + go (ImplicitParamBindD {}) = return () #endif #if MIN_VERSION_template_haskell(2,16,0) - go (KiSigD {}) = no + go (KiSigD {}) = return () #endif - no = return Nothing - -maybeWarnTypeFamily :: SynonymExpansionSettings -> Name -> Q () -maybeWarnTypeFamily settings name = - when (sesWarnTypeFamilies settings) $ - warn ("Type synonym families (and associated type synonyms) are currently not supported (they won't be expanded). Name of unsupported family: "++show name) - - - - - - - --- | Calls 'expandSynsWith' with the default settings. -expandSyns :: Type -> Q Type -expandSyns = expandSynsWith mempty - - --- | Expands all type synonyms in the given type. Type families currently won't be expanded (but will be passed through). -expandSynsWith :: SynonymExpansionSettings -> Type -> Q Type -expandSynsWith settings = expandSyns' - - where - expandSyns' t = - do - (acc,t') <- go [] t - return (foldl applyTypeArg t' acc) - - expandKindSyns' k = -#if MIN_VERSION_template_haskell(2,8,0) - do - (acc,k') <- go [] k - return (foldl applyTypeArg k' acc) -#else - return k -- No kind variables on old versions of GHC -#endif - - applyTypeArg :: Type -> TypeArg -> Type - applyTypeArg f (TANormal x) = f `AppT` x - applyTypeArg f (TyArg _x) = -#if __GLASGOW_HASKELL__ >= 807 - f `AppKindT` _x -#else - -- VKA isn't supported, so - -- conservatively drop the argument - f -#endif - - - -- Filter the normal type arguments from a list of TypeArgs. - filterTANormals :: [TypeArg] -> [Type] - filterTANormals = mapMaybe getTANormal - where - getTANormal :: TypeArg -> Maybe Type - getTANormal (TANormal t) = Just t - getTANormal (TyArg {}) = Nothing - - -- Must only be called on an `x' requiring no expansion - passThrough acc x = return (acc, x) - - forallAppError :: [TypeArg] -> Type -> Q a - forallAppError acc x = - fail (packagename++": Unexpected application of the local quantification: " - ++show x - ++"\n (to the arguments "++show acc++")") - - -- If @go args t = (args', t')@, - -- - -- Precondition: - -- All elements of `args' are expanded. - -- Postcondition: - -- All elements of `args'' and `t'' are expanded. - -- `t' applied to `args' equals `t'' applied to `args'' (up to expansion, of course) - - go :: [TypeArg] -> Type -> Q ([TypeArg], Type) - - go acc x@ListT = passThrough acc x - go acc x@ArrowT = passThrough acc x - go acc x@(TupleT _) = passThrough acc x - go acc x@(VarT _) = passThrough acc x - - go [] (ForallT ns cxt t) = do - cxt' <- mapM (bindPred expandSyns') cxt - t' <- expandSyns' t - return ([], ForallT ns cxt' t') - - go acc x@ForallT{} = forallAppError acc x - - go acc (AppT t1 t2) = - do - r <- expandSyns' t2 - go (TANormal r:acc) t1 - - go acc x@(ConT n) = - do - i <- nameIsSyn settings n - case i of - Nothing -> return (acc, x) - Just (vars,body) -> - if length acc < length vars - then fail (packagename++": expandSynsWith: Underapplied type synonym: "++show(n,acc)) - else - let - substs = zip vars (filterTANormals acc) - expanded = doSubsts substs body - in - go (drop (length vars) acc) expanded - - - go acc (SigT t kind) = - do - (acc',t') <- go acc t - kind' <- expandKindSyns' kind - return (acc', SigT t' kind') - +warnTypeFamiliesInType :: Type -> Q () +warnTypeFamiliesInType = go + where + go :: Type -> Q () + go (ConT n) = warnIfNameIsTypeFamily n + go (AppT t1 t2) = go t1 >> go t2 + go (SigT t k) = go t >> go_kind k + go ListT{} = return () + go ArrowT{} = return () + go VarT{} = return () + go TupleT{} = return () + go (ForallT tvbs ctxt body) = do + mapM_ (go_kind . tvKind) tvbs + mapM_ go_pred ctxt + go body #if MIN_VERSION_template_haskell(2,6,0) - go acc x@(UnboxedTupleT _) = passThrough acc x + go UnboxedTupleT{} = return () #endif - #if MIN_VERSION_template_haskell(2,8,0) - go acc x@(PromotedT _) = passThrough acc x - go acc x@(PromotedTupleT _) = passThrough acc x - go acc x@PromotedConsT = passThrough acc x - go acc x@PromotedNilT = passThrough acc x - go acc x@StarT = passThrough acc x - go acc x@ConstraintT = passThrough acc x - go acc x@(LitT _) = passThrough acc x + go PromotedT{} = return () + go PromotedTupleT{} = return () + go PromotedConsT{} = return () + go PromotedNilT{} = return () + go StarT{} = return () + go ConstraintT{} = return () + go LitT{} = return () #endif - #if MIN_VERSION_template_haskell(2,10,0) - go acc x@EqualityT = passThrough acc x + go EqualityT{} = return () #endif - #if MIN_VERSION_template_haskell(2,11,0) - go acc (InfixT t1 nm t2) = - do - t1' <- expandSyns' t1 - t2' <- expandSyns' t2 - return (acc,InfixT t1' nm t2') - go acc (UInfixT t1 nm t2) = - do - t1' <- expandSyns' t1 - t2' <- expandSyns' t2 - return (acc,UInfixT t1' nm t2') - go acc (ParensT t) = - do - (acc',t') <- go acc t - return (acc',ParensT t') - go acc x@WildCardT = passThrough acc x + go (InfixT t1 n t2) = do + warnIfNameIsTypeFamily n + go t1 + go t2 + go (UInfixT t1 n t2) = do + warnIfNameIsTypeFamily n + go t1 + go t2 + go (ParensT t) = go t + go WildCardT{} = return () #endif - #if MIN_VERSION_template_haskell(2,12,0) - go acc x@(UnboxedSumT _) = passThrough acc x + go UnboxedSumT{} = return () #endif - #if MIN_VERSION_template_haskell(2,15,0) - go acc (AppKindT t k) = - do - k' <- expandKindSyns' k - go (TyArg k':acc) t - go acc (ImplicitParamT n t) = - do - (acc',t') <- go acc t - return (acc',ImplicitParamT n t') + go (AppKindT t k) = go t >> go_kind k + go (ImplicitParamT _ t) = go t #endif - #if MIN_VERSION_template_haskell(2,16,0) - go [] (ForallVisT ns t) = do - t' <- expandSyns' t - return ([], ForallVisT ns t') - - go acc x@ForallVisT{} = forallAppError acc x + go (ForallVisT tvbs body) = do + mapM_ (go_kind . tvKind) tvbs + go body #endif - #if MIN_VERSION_template_haskell(2,17,0) - go acc x@MulArrowT = passThrough acc x -#endif - --- | An argument to a type, either a normal type ('TANormal') or a visible --- kind application ('TyArg'). -data TypeArg - = TANormal Type -- Normal arguments - | TyArg Kind -- Visible kind applications - deriving Show - -class SubstTypeVariable a where - -- | Capture-free substitution - subst :: (Name, Type) -> a -> a - - - -instance SubstTypeVariable Type where - subst vt@(v, t) = go - where - go (AppT x y) = AppT (go x) (go y) - go s@(ConT _) = s - go s@(VarT w) | v == w = t - | otherwise = s - go ArrowT = ArrowT - go ListT = ListT - go (ForallT vars cxt body) = - commonForallCase vt vars $ \vts' vars' -> - ForallT vars' (map (doSubsts vts') cxt) (doSubsts vts' body) - - go s@(TupleT _) = s - - go (SigT t1 kind) = SigT (go t1) (subst vt kind) - -#if MIN_VERSION_template_haskell(2,6,0) - go s@(UnboxedTupleT _) = s + go MulArrowT{} = return () #endif + go_kind :: Kind -> Q () #if MIN_VERSION_template_haskell(2,8,0) - go s@(PromotedT _) = s - go s@(PromotedTupleT _) = s - go s@PromotedConsT = s - go s@PromotedNilT = s - go s@StarT = s - go s@ConstraintT = s - go s@(LitT _) = s + go_kind = go +#else + go_kind _ = return () #endif + go_pred :: Pred -> Q () #if MIN_VERSION_template_haskell(2,10,0) - go s@EqualityT = s -#endif - -#if MIN_VERSION_template_haskell(2,11,0) - go (InfixT t1 nm t2) = InfixT (go t1) nm (go t2) - go (UInfixT t1 nm t2) = UInfixT (go t1) nm (go t2) - go (ParensT t1) = ParensT (go t1) - go s@WildCardT = s -#endif - -#if MIN_VERSION_template_haskell(2,12,0) - go s@(UnboxedSumT _) = s + go_pred = go +#else + go_pred (ClassP _ ts) = mapM_ go ts + go_pred (EqualP t1 t2) = go t1 >> go t2 #endif -#if MIN_VERSION_template_haskell(2,15,0) - go (AppKindT ty ki) = AppKindT (go ty) (go ki) - go (ImplicitParamT n ty) = ImplicitParamT n (go ty) -#endif +maybeWarnTypeFamily :: Name -> Q () +maybeWarnTypeFamily name = + warn ("Type synonym families (and associated type synonyms) are currently not supported (they won't be expanded). Name of unsupported family: "++show name) -#if MIN_VERSION_template_haskell(2,16,0) - go (ForallVisT vars body) = - commonForallCase vt vars $ \vts' vars' -> - ForallVisT vars' (doSubsts vts' body) -#endif - -#if MIN_VERSION_template_haskell(2,17,0) - go MulArrowT = MulArrowT -#endif +-- | Calls 'expandSynsWith' with the default settings. +expandSyns :: Type -> Q Type +expandSyns = expandSynsWith mempty --- testCapture :: Type --- testCapture = --- let --- n = mkName --- v = VarT . mkName --- in --- substInType (n "x", v "y" `AppT` v "z") --- (ForallT --- [n "y",n "z"] --- [ConT (mkName "Show") `AppT` v "x" `AppT` v "z"] --- (v "x" `AppT` v "y")) - - -#if !MIN_VERSION_template_haskell(2,10,0) -instance SubstTypeVariable Pred where - subst s = mapPred (subst s) -#endif - -#if !MIN_VERSION_template_haskell(2,8,0) -instance SubstTypeVariable Kind where - subst _ = id -- No kind variables on old versions of GHC -#endif +-- | Expands all type synonyms in the given type. Type families currently won't be expanded (but will be passed through). +expandSynsWith :: SynonymExpansionSettings -> Type -> Q Type +expandSynsWith settings = expandSyns' + where + expandSyns' x = do + when (sesWarnTypeFamilies settings) $ + warnTypeFamiliesInType x + resolveTypeSynonyms x -- | Make a name (based on the first arg) that's distinct from every name in the second arg -- @@ -496,17 +286,25 @@ -- in -- evade v (AppT (VarT v) (VarT (mkName "fx"))) -instance SubstTypeVariable Con where - subst vt = go +-- | Capture-free substitution +substInType :: (Name,Type) -> Type -> Type +substInType vt = applySubstitution (Map.fromList [vt]) + +-- | Capture-free substitution +substInCon :: (Name,Type) -> Con -> Con +substInCon vt = go where - st = subst vt + vtSubst = Map.fromList [vt] + st = applySubstitution vtSubst go (NormalC n ts) = NormalC n [(x, st y) | (x,y) <- ts] go (RecC n ts) = RecC n [(x, y, st z) | (x,y,z) <- ts] go (InfixC (y1,t1) op (y2,t2)) = InfixC (y1,st t1) op (y2,st t2) go (ForallC vars cxt body) = commonForallCase vt vars $ \vts' vars' -> - ForallC vars' (map (doSubsts vts') cxt) (doSubsts vts' body) + ForallC (map (mapTVKind (applySubstitution vts')) vars') + (applySubstitution vts' cxt) + (Map.foldrWithKey (\v t -> substInCon (v, t)) body vts') #if MIN_VERSION_template_haskell(2,11,0) go c@GadtC{} = errGadt c go c@RecGadtC{} = errGadt c @@ -518,12 +316,12 @@ -- argument provides new substitutions and fresh type variable binders to avoid -- the outer substitution from capturing the thing underneath the @forall@. commonForallCase :: (Name, Type) -> [TyVarBndr_ flag] - -> ([(Name, Type)] -> [TyVarBndr_ flag] -> a) + -> (Map Name Type -> [TyVarBndr_ flag] -> a) -> a commonForallCase vt@(v,t) bndrs k -- If a variable with the same name as the one to be replaced is bound by the forall, -- the variable to be replaced is shadowed in the body, so we leave the whole thing alone (no recursion) - | v `elem` (tvName <$> bndrs) = k [vt] bndrs + | v `elem` (tvName <$> bndrs) = k (Map.fromList [vt]) bndrs | otherwise = let @@ -533,16 +331,4 @@ freshTyVarBndrs = zipWith tyVarBndrSetName freshes bndrs substs = zip vars (VarT <$> freshes) in - k (vt:substs) freshTyVarBndrs - --- Apply multiple substitutions. -doSubsts :: SubstTypeVariable a => [(Name, Type)] -> a -> a -doSubsts substs x = foldr subst x substs - --- | Capture-free substitution -substInType :: (Name,Type) -> Type -> Type -substInType = subst - --- | Capture-free substitution -substInCon :: (Name,Type) -> Con -> Con -substInCon = subst + k (Map.fromList (vt:substs)) freshTyVarBndrs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/th-expand-syns-0.4.8.0/changelog.markdown new/th-expand-syns-0.4.9.0/changelog.markdown --- old/th-expand-syns-0.4.8.0/changelog.markdown 2001-09-09 03:46:40.000000000 +0200 +++ new/th-expand-syns-0.4.9.0/changelog.markdown 2001-09-09 03:46:40.000000000 +0200 @@ -1,3 +1,21 @@ +## 0.4.9.0 [2021.08.30] + +* Consolidate the type-synonym expansion functionality with `th-abstraction`, + which also provides the ability to expand type synonyms. After this change, + the `th-expand-syns` library is mostly a small shim on top of + `th-abstraction`. The only additional pieces of functionality that + `th-expand-syns` which aren't currently available in `th-abstraction` are: + + * `th-expand-syns`' `expandSyns{With}` functions will warn that they cannot + expand type families (if the `SynonymExpansionSettings` are configured to + check for this). By contrast, `th-abstraction`'s `applySubstitution` + function will silently ignore type families. + * `th-expand-syns` provides a `substInCon` function which allows substitution + into `Con`s. + * `th-expand-syns` provides `evade{s}` functions which support type variable + `Name` freshening that calculating the free variables in any type that + provides an instance of `Data`. + ## 0.4.8.0 [2021.03.12] * Make the test suite compile with GHC 9.0 or later. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/th-expand-syns-0.4.8.0/th-expand-syns.cabal new/th-expand-syns-0.4.9.0/th-expand-syns.cabal --- old/th-expand-syns-0.4.8.0/th-expand-syns.cabal 2001-09-09 03:46:40.000000000 +0200 +++ new/th-expand-syns-0.4.9.0/th-expand-syns.cabal 2001-09-09 03:46:40.000000000 +0200 @@ -1,7 +1,12 @@ name: th-expand-syns -version: 0.4.8.0 +version: 0.4.9.0 synopsis: Expands type synonyms in Template Haskell ASTs description: Expands type synonyms in Template Haskell ASTs. + . + As of version @0.4.9.0@, this library is a small shim on + top of the @applySubstitution@/@resolveTypeSynonyms@ + functions from @th-abstraction@, so you may want to + consider using @th-abstraction@ instead. category: Template Haskell license: BSD3 license-file: LICENSE @@ -23,19 +28,20 @@ GHC == 8.4.4 GHC == 8.6.5 GHC == 8.8.4 - GHC == 8.10.4 + GHC == 8.10.7 GHC == 9.0.1 + GHC == 9.2.* source-repository head type: git location: https://github.com/DanielSchuessler/th-expand-syns.git Library - build-depends: base >= 4.3 && < 5 + build-depends: base >= 4.3 && < 5 , containers , syb - , th-abstraction >= 0.4 && < 0.5 - , template-haskell >= 2.5 && < 2.18 + , th-abstraction >= 0.4.3 && < 0.5 + , template-haskell >= 2.5 && < 2.19 ghc-options: -Wall exposed-modules: Language.Haskell.TH.ExpandSyns other-modules: Language.Haskell.TH.ExpandSyns.SemigroupCompat