# Version 0.18.2.1 (2026-04-28)
- Add support for GHC 10.0.
# Version 0.18.2.0 (2025-01-14)
- Add a new function `ctsSubst` which computes a fix-point substitution from
a collection of constraints which define a terminating generalised
substitution. Mainly for use with the set of inert Given constraints.
- Re-export several functions to deal with substitutions: `substTy`,
`substTys`, `extendTvSubst` and `mkTvSubstPrs`. Also re-export the `Subst`
type (alias for `TCvSubst` on GHC <= 9.6).
# Version 0.18.1.0 (2025-10-09)
- Bugfix for v0.18.0.0: deal with constraints generated by unflattening
in `splitTyConApp_upTo`. Fixes #19.
# Version 0.18.0.0 (2025-09-15)
- On GHC 9.0 and below, `ghc-tcplugin-api` will now automatically unflatten all
Given constraints. That is, all flattening skolems `[G] fsk ~ F tys` will be
substituted away, both in Givens and in Wanteds/Deriveds.
No change for GHC 9.2 and above, as GHC stopped producing flattening variables
from 9.2 onwards.
# Version 0.17.2.0 (2025-09-08)
- Fix the package failing to build on GHC 9.6.1 through 9.6.6 and
on GHC 9.8.1 through 9.8.3. GHC versions 9.6.7 and 9.8.4 are unaffected.
# Version 0.17.1.0 (2025-08-27)
- Fix a regression, introduced in `0.17.0.0`, in which `splitTyConApp_upTo` would
fail to take into account equalities of the form `tv1 ~ tv2`.
# Version 0.17.0.0 (2025-08-25)
- `splitTyConApp_upTo` now additionally returns a `[Coercion]` for tracking
Given dependencies (which should be passed to functions such as `mkPluginUnivCo`,
`mkPluginUnivEvTerm` and `mkTyFamAppReduction`).
# Version 0.16.2.0 (2025-08-22)
- `splitTyConApp_upTo` now correctly splits apart type families. This ensures
it is a valid drop-in replacement for `splitTyConApp_maybe` (fixes issue #13).
# Version 0.16.1.0 (2025-07-18)
- Correctness fix for the `GHC.TcPlugin.API.TyConSubst` module: ensure that
the `TyConSubst` does not mistake representational Given equalities for
nominal equalities. For the time being, the `splitTyConApp_upTo` functionality
only works at nominal role.
# Version 0.16.0.0 (2025-07-18)
- Re-export `tyConDataCons`, `tyConSingleDataCon_maybe`,
`tyConSingleDataCon`, `dataConTyCon`, `isNewTyCon` and `isNewDataCon`
from GHC.
- The `isWanted` function now correctly returns `False` for derived
constraints. This is only relevant for GHC 9.2 and below.
- Add `GHC.TcPlugin.API.TyConSubst` module, which implements logic for
recognising when a type is a `TyConApp` up to Given constraints.
# Version 0.15.0.0 (2025-06-03)
- Remove `tcPluginIO` in favour of new `MonadIO` instance.
To migrate, use `liftIO` instead of `tcPluginIO`.
- Add `lookupTHName` function, which allows looking up Template Haskell names
in typechecker plugins. Useful in conjunction with `TemplateHaskellQuotes`.
- Helper functions to construct evidence terms have been adjusted to return
values of type `EvExpr`, rather than `EvTerm`. This makes the functions more
composable, and allows typechecker plugin to provide evidence for quantified
constraints more easily.
Affected functions: `evDFunApp`, `evDataConApp`, `evCast`.
To migrate, you will need to manually wrap evidence terms with the
`EvExpr` constructor in places that expect an `EvTerm`.
- Added `natKind`, `symbolKind` and `charKind` for the kinds of type-level
`Nat`, `Symbol` and `Char`.
- Added several re-exports from the `ghc` library:
- `isGiven` & `isWanted`.
- `ctEvPred`, `ctEvId`, `ctEvExpr` and `ctEvLoc`.
- `className` & `tyConName`.
- `isEqPred` (unboxed equality) and `isEqClassPred` (boxed equality).
- `evId` & `ctEvId`.
- `typeKind`.
- `nonDetCmpType`.
- Removed re-exports of `ctev_pred`, `ctev_loc`, `ctev_evar`, and `ctev_dest`.
Migration: use `ctEvPred` instead of `ctev_pred` and `ctEvLoc` instead of `ctev_loc`.
Uses of `ctev_evar` and `ctev_dest` should be covered by `ctEvEvId` and/or
`ctEvExpr`.
# Version 0.14.0.0 (2024-11-28)
- Rename `mkPrimEqPredRole` to `mkEqPredRole`. This is a re-exported function
from GHC, and the renaming adapts to the renaming in GHC-9.13.
# Version 0.13.0.0 (2024-10-30)
- Update to changes in the type of GHC's `mkUnivCo`
in order to (properly) add support for GHC 9.12.
- Change `mkPluginUnivCo`, `mkPluginUnivEvTerm` and `mkTyFamAppReduction`
to take a `[Coercion]` rather than a `DVarSet` for specifying dependencies.
- Stop re-exporting `DVarSet`, `emptyDVarSet`, `extendDVarSet`, `unionDVarSet`,
`unitDVarSet`, and `mkDVarSet`.
- Update documentation to suggest using `ctEvCoercion`
rather than `ctEvId` to specify coercions that a `UnivCo` depends on.
- Re-export `ctEvCoercion`, and stop re-exporting `ctEvId`.
# Version 0.12.0.0 (2024-10-22)
- Add preliminary support for GHC 9.12.
- `mkPluginUnivCo`, `mkPluginUnivEvTerm` and `mkTyFamAppReduction` now all take
an additional `DVarSet` argument which allows specifying evidence that we
depend on. This stops evidence terms being floated out past used enclosing
Givens (see [GHC issue #23923](https://gitlab.haskell.org/ghc/ghc/-/issues/23923)).
- Re-export `DVarSet`, `emptyDVarSet`, `extendDVarSet`, `unionDVarSet`,
`unitDVarSet`, and `mkDVarSet`, as well as `ctEvId`, in order to facilitate
construction and manipulation of `DVarSet`s.
- Re-export `GHC.Types.Unique.Set`, `GHC.Types.Unique.DSet`.
# Version 0.11.0.0 (2023-08-29)
- Add support for GHC 9.8.
- Re-export functionality relating to GHC's constraint solving `TcS` monad,
such as `{get,set}InertSet`, `{get,set}TcEvBindsMap`.
- Re-export `readTcRef` and `writeTcRef`.
# Version 0.10.0.0 (2023-02-28)
- Introduce `resolveImport`, and make `PkgQual` opaque.
- Rename `tcRewriterWanteds` to `tcRewriterNewWanteds`
(bringing it in line with nomenclature in GHC 9.4).
# Version 0.9.0.0 (2023-01-24)
- Add support for GHC 9.6 and `transformers` 0.6.
- The `One` and `Many` pattern synonyms are now `OneTy` and `ManyTy`.
- Use `mkInvisFunTy`/`mkInvisFunTys` instead of `mkInvisFunTyMany`/`mkInvisFunTysMany`.
# Version 0.8.3.0 (2022-10-05)
- Bugfix for the GHC 9.0 rewriter plugin compatibility shim:
fix coercion orientations in family application cache
# Version 0.8.2.0 (2022-10-05)
- Bugfix for the GHC 9.0 rewriter plugin compatibility shim:
fix coercion orientations in family rewriting.
# Version 0.8.1.0 (2022-10-05)
- Bugfix for the GHC 9.2 rewriter plugin compatibility shim:
fix coercion orientations in family rewriting.
# Version 0.8.0.0 (2022-07-07)
- Compatibility for GHC 9.4.
- Change API for `lookupImportedModule` to use `PkgQual` and `UnitId`
instead of `Maybe FastString`, with back-compatibility function `pkgQual_pkg`
for use with older module lookup functions.
- Re-export `splitAppTys` and `unpackFS`.
# Version 0.7.1.0 (2022-01-04)
- `newWanted` now always uses the `CtLoc` information that it is provided with,
as opposed to obtaining some information from the monadic environment.
This means you no longer need to wrap calls to `newWanted` in `setCtLocM`
to ensure that GHC reports the correct source span when reporting unsolved
Wanteds in error messages.
- Remove the `newDerived` function, as Derived constraints are going to be
removed from GHC.
# Version 0.7.0.0 (2021-12-31)
- Re-export functions for dealing with type-level literals,
such as `mkNumLitTy` and `isStrLitTy`.
- Re-export functions for splitting apart type applications, such as
`splitAppTy_maybe` and `tyConAppTyCon_maybe`.
- Redefine and re-export `mkUncheckedIntExpr` for GHC versions prior to 9.0.
- Re-export some basic types from `GHC.Types.Basic` such as `Arity`,
`PromotionFlag` and `Boxity`.
- Re-export `GHC.Builtin.Names` and `GHC.Builin.Types.Prim`.
- Provide `MonadThings` instances for `TcPluginM` monads.
# Version 0.6.1.0 (2021-12-13)
- Re-export various useful types and functions to deal with type and coercion variables.
- Re-export a few types and functions to deal with source locations.
- Remove some re-exports for constructing function types, as not all functions make sense
across all GHC versions supported by the library.
- Re-export `panic` and `pprPanic`.
# Version 0.6.0.0 (2021-12-13)
- Add support for GHC 8.8.
- Re-export `evDataConApp`, which is useful for constructing typeclass dictionaries.
# Version 0.5.1.0 (2021-08-31)
- Fix a bug in the type-family rewriting compatibility layer (GHC 8.10, 9.0, 9.2)
by correctly downgrading the coercion used to cast the evidence, when necessary.
# Version 0.5.0.0 (2021-08-30)
- Re-export some additional types and functions that are useful for inspecting
and constructing evidence terms, such as `mkTyVar`, `newName`, `mkLocalId`, `lookupEvBind`...
# Version 0.4.1.0 (2021-08-24)
- Re-export a few GHC modules, such as GHC.Core.Make and GHC.Plugins.
These re-exports might be changed to be more selective in the future
to aid cross-version compatibility.
# Version 0.4.0.0 (2021-08-24)
- Adapt to GHC 9.4 changes in the `TcPluginSolveResult` datatype:
are now able to solve and emit constraints even when reporting
a contradiction. This can help with error messages.
Unfortunately these extra constraints will be dropped in versions
of GHC prior to 9.4.
- Add a utility module for name resolution using constrained traversals.
- Add compatibility for GHC 8.10.
# Version 0.3.1.0 (2021-08-09)
Ensure that the coercions stored in `Reduction`s are always
oriented left-to-right, by making the internal rewriting compatibility layer
also use left-to-right coercions.
# Version 0.3.0.0 (2021-08-04)
Account for changes in rewriting in GHC 9.4:
- rewriter plugins can no longer emit new Wanted constraints
if they don't rewrite the type family application;
- coercions in the rewriter are now oriented left-to-right,
requiring `mkTyFamAppReduction` to be adapted.
# Version 0.2.0.0 (2021-07-22)
Initial release on Hackage.