9928df9ba91a5d84e1a332fd96b497d4c33a2c98
[ghc.git] / libraries / template-haskell / changelog.md
1 # Changelog for [`template-haskell` package](http://hackage.haskell.org/package/template-haskell)
2
3 ## 2.16.0.0 *TBA*
4
5   * Introduce a `liftTyped` method to the `Lift` class and set the default
6     implementations of `lift`/`liftTyped` to be in terms of each other.
7
8   * Add a `ForallVisT` constructor to `Type` to represent visible, dependent
9     quantification.
10
11   * Introduce support for `Bytes` literals (raw bytes embedded into the output
12     binary)
13
14 ## 2.15.0.0 *TBA*
15
16   * In `Language.Haskell.TH.Syntax`, `DataInstD`, `NewTypeInstD`, `TySynEqn`,
17     and `RuleP` now all have a `Maybe [TyVarBndr]` argument, which contains a
18     list of quantified type variables if an explicit `forall` is present, and
19     `Nothing` otherwise. `DataInstD`, `NewTypeInstD`, `TySynEqn` also now use
20     a single `Type` argument to represent the left-hand-side to avoid
21     malformed type family equations and allow visible kind application.
22
23     Correspondingly, in `Language.Haskell.TH.Lib.Internal`, `pragRuleD`,
24     `dataInstD`, `newtypeInstD`, and `tySynEqn` now all have a
25     `Maybe [TyVarBndrQ]` argument. Non-API-breaking versions of these
26     functions can be found in `Language.Haskell.TH.Lib`. The type signature
27     of `tySynEqn` has also changed from `[TypeQ] -> TypeQ -> TySynEqnQ` to
28     `(Maybe [TyVarBndrQ]) -> TypeQ -> TypeQ -> TySynEqnQ`, for the same reason
29     as in `Language.Haskell.TH.Syntax` above. Consequently, `tySynInstD` also
30     changes from `Name -> TySynEqnQ -> DecQ` to `TySynEqnQ -> DecQ`.
31
32   * Add `Lift` instances for `NonEmpty` and `Void`
33
34 ## 2.14.0.0 *TBA*
35
36   * Introduce an `addForeignFilePath` function, as well as a corresponding
37     `qAddForeignFile` class method to `Quasi`. Unlike `addForeignFile`, which
38     takes the contents of the file as an argument, `addForeignFilePath` takes
39     as an argument a path pointing to a foreign file. A new `addForeignSource`
40     function has also been added which takes a file's contents as an argument.
41
42     The old `addForeignFile` function is now deprecated in favor of
43     `addForeignSource`, and the `qAddForeignFile` method of `Quasi` has been
44     removed entirely.
45
46   * Introduce an `addTempFile` function, as well as a corresponding
47     `qAddTempFile` method to `Quasi`, which requests a temporary file of
48     a given suffix.
49
50   * Add a `ViaStrategy` constructor to `DerivStrategy`.
51
52   * Add support for `-XImplicitParams` via `ImplicitParamT`,
53     `ImplicitParamVarE`, and `ImplicitParamBindD`.
54
55   * Add support for `-XRecursiveDo` via `MDoE` and `RecS`.
56
57 ## 2.13.0.0 *March 2018*
58
59   * Bundled with GHC 8.4.1
60
61   * `Language.Haskell.TH.FamFlavour`, which was deprecated in 2.11,
62     has been removed.
63
64   * Add support for overloaded labels. Introduces `labelE :: String -> ExpQ`.
65
66   * Add `KindQ`, `TyVarBndrQ`, and `FamilyResultSigQ` aliases to
67     `Language.Haskell.TH.Lib`.
68
69   * Add `Language.Haskell.TH.Lib.Internal` module, which exposes some
70     additional functionality that is used internally in GHC's integration
71     with Template Haskell. This is not a part of the public API, and as
72     such, there are no API guarantees for this module from version to version.
73
74   * `MonadIO` is now a superclass of `Quasi`, `qRunIO` has a default
75     implementation `qRunIO = liftIO`
76
77   * Add `MonadIO Q` instance
78
79 ## 2.12.0.0 *July 2017*
80
81   * Bundled with GHC 8.2.1
82
83   * Add support for pattern synonyms. This introduces one new constructor to
84     `Info` (`PatSynI`), two new constructors to `Dec` (`PatSynD` and
85     `PatSynSigD`), and two new data types (`PatSynDir` and `PatSynArgs`),
86     among other changes. (#8761)
87
88   * Add support for unboxed sums. (#12478)
89
90   * Add support for visible type applications. (#12530)
91
92   * Add support for attaching deriving strategies to `deriving` statements
93     (#10598)
94
95   * Add support for `COMPLETE` pragmas. (#13098)
96
97   * `unboxedTupleTypeName` and `unboxedTupleDataName` now work for unboxed
98     0-tuples and 1-tuples (#12977)
99
100   * `Language.Haskell.TH` now reexports all of `Language.Haskell.TH.Lib`.
101     (#12992). This causes `Language.Haskell.TH` to export more types and
102     functions that it did before:
103     - `TExp`, `BangQ`, and `FieldExpQ`
104     - `unboxedTupP`, `unboxedTupE` and `unboundVarE`
105     - `infixLD`, `infixRD`, and `infixND`
106     - `unboxedTupleT` and `wildCardT`
107     - `plainTV` and `kindedTV`
108     - `interruptible` and `funDep`
109     - `valueAnnotation`, `typeAnnotation`, and `moduleAnnotation`
110
111   * Add support for overloaded labels.
112
113 ## 2.11.0.0  *May 2016*
114
115   * Bundled with GHC 8.0.1
116
117   * The compiler can now resolve infix operator fixities in types on its own.
118     The `UInfixT` constructor of `Type` is analoguous to `UInfixE` for expressions
119     and can contain a tree of infix type applications which will be reassociated
120     according to the fixities of the operators. The `ParensT` constructor can be
121     used to explicitly group expressions.
122
123   * Add `namePackage` and `nameSpace`
124
125   * Make `dataToQa` and `dataToExpQ` able to handle `Data` instances whose
126     `toConstr` implementation relies on a function instead of a data
127     constructor (#10796)
128
129   * Add `Show` instances for `NameFlavour` and `NameSpace`
130
131   * Remove `FamilyD` and `FamFlavour`.  Add `DataFamilyD` and `OpenTypeFamilyD`
132     as the representation of data families and open type families
133     respectively. (#6018)
134
135   * Add `TypeFamilyHead` for common elements of `OpenTypeFamilyD` and
136     `ClosedTypeFamilyD` (#10902)
137
138   * The `Strict` datatype was split among different datatypes: three for
139     writing the strictness information of data constructors' fields as denoted
140     in Haskell source code (`SourceUnpackedness` and `SourceStrictness`, as
141     well as `Bang`), and one for strictness information after a constructor is
142     compiled (`DecidedStrictness`). `Strict`, `StrictType` and `VarStrictType`
143     have been deprecated in favor of `Bang`, `BangType` and `VarBangType`.
144     (#10697)
145
146   * Add `reifyConStrictness` to query a data constructor's `DecidedStrictness`
147     values for its fields (#10697)
148
149   * The `ClassOpI`, `DataConI`, and `VarI` constructors no longer have a
150     `Fixity` field. Instead, all `Fixity` information for a given `Name` is
151     now determined through the `reifyFixity` function, which returns `Just` the
152     fixity if there is an explicit fixity declaration for that `Name`, and
153     `Nothing` otherwise (#10704 and #11345)
154
155   * Add `MonadFail Q` instance for GHC 8.0 and later (#11661)
156
157   * Add support for OVERLAP(S/PED/PING) pragmas on instances
158
159
160 ## 2.10.0.0  *Mar 2015*
161
162   * Bundled with GHC 7.10.1
163   * Remove build-dependency on `containers` package
164   * Make `Pred` a type synonym of `Type`, and deprecate `classP`/`equalP` (#7021)
165   * Add support for `LINE` pragma via `prageLineD` and `LineP`
166   * Replace `Int#` with `!Int` in `NameFlavour` constructors
167   * Derive `Generic` for TH types (#9527)
168   * Add `standaloneDerivD` (#8100)
169   * Add support for generic default signatures via `defaultSigD` (#9064)
170   * Add `Lift` instances for `()` and `Rational`
171   * Derive new `Show` and `Data` instances for `Loc`
172   * Derive `Eq` instances for `Loc`, `Info`, and `ModuleInfo`
173   * Make calling conventions available in template haskell consistent
174     with those from GHC (#9703)
175   * Add support for `-XStaticValues` via `staticE`
176   * Add `Ord` instances to TH types
177   * Merge some instances from `th-orphans` (`Ppr` instances for `Lit`
178     and `Loc` as well as `Lift` instances for numeric types
179   * Put parens around `(ty :: kind)` when pretty-printing TH syntax