Add typed holes support in Template Haskell.
[ghc.git] / docs / users_guide / 7.12.1-notes.rst
1 .. _release-7-12-1:
2
3 Release notes for version 7.12.1
4 ================================
5
6 The significant changes to the various parts of the compiler are listed
7 in the following sections. There have also been numerous bug fixes and
8 performance improvements over the 7.10 branch.
9
10 Highlights
11 ----------
12
13 The highlights, since the 7.10 branch, are:
14
15 -  TODO FIXME
16
17 Full details
18 ------------
19
20 Language
21 ~~~~~~~~
22
23 -  TODO FIXME.
24
25 -  The parser now supports Haddock comments on GADT data constructors.
26    For example,
27
28    ::
29
30                              data Expr a where
31                                -- | Just a normal sum
32                                Sum :: Int -> Int -> Expr Int
33
34 -  Implicit parameters of the new ghc-prim type ``GHC.Types.CallStack``
35    are treated specially, and automatically solved for the current
36    source location. For example
37
38    ::
39
40                              f = print (?stk :: CallStack)
41
42    will print the singleton stack containing the occurrence of ``?stk``.
43    If there is another ``CallStack`` implicit in-scope, the new location
44    will be appended to the existing stack, e.g.
45
46    ::
47
48                              f :: (?stk :: CallStack) => IO ()
49                              f = print (?stk :: CallStack)
50
51    will print the occurrence of ``?stk`` and the call-site of ``f``. The
52    name of the implicit parameter does not matter.
53
54    See the release notes for ghc-prim for a description of the
55    ``CallStack`` type.
56
57 -  To conform to the common case, the default role assigned to
58    parameters of datatypes declared in ``hs-boot`` files is
59    ``representational``. However, if the constructor(s) for the datatype
60    are given, it makes sense to do normal role inference. This is now
61    implemented, effectively making the default role for non-abstract
62    datatypes in ``hs-boot`` files to be ``phantom``, like it is in
63    regular Haskell code.
64
65 -  Wildcards can be used in the type arguments of type/data family
66    instance declarations to indicate that the name of a type variable
67    doesn't matter. They will be replaced with new unique type variables.
68    See :ref:`data-instance-declarations` for more details.
69
70 -  GHC now allows to declare type families as injective. Injectivity
71    information can then be used by the typechecker. See
72    :ref:`injective-ty-fams` for details.
73
74 -  Due to a :ghc-ticket:`security issue <10826>`, Safe Haskell now forbids
75    annotations in programs marked as ``-XSafe``.
76
77 -  Generic instances can be derived for data types whose constructors have
78    arguments with certain unlifted types. See :ref:`generic-programming` for
79    more details.
80
81 -  The ``-XDeriveAnyClass`` extension now fills in associated type family
82    default instances when deriving a class that contains them.
83
84 Compiler
85 ~~~~~~~~
86
87 -  Added the option ``-dth-dec-file``. This dumps out a .th.hs file of
88    all Template Haskell declarations in a corresponding .hs file. The
89    idea is that application developers can check this into their
90    repository so that they can grep for identifiers used elsewhere that
91    were defined in Template Haskell. This is similar to using
92    ``-ddump-to-file`` with ``-ddump-splices`` but it always generates a
93    file instead of being coupled to ``-ddump-to-file`` and only outputs
94    code that does not exist in the .hs file and a comment for the splice
95    location in the original file.
96
97 -  Added the option ``-fprint-expanded-types``. When enabled, GHC also
98    prints type-synonym-expanded types in type errors.
99
100 -  Added the option ``-fcpr-anal``. When enabled, the demand analyser
101    performs CPR analysis. It is implied by ``-O``. Consequently,
102    ``-fcpr-off`` is now removed, run with ``-fno-cpr-anal`` to get the
103    old ``-fcpr-off`` behaviour.
104
105 GHCi
106 ~~~~
107
108 -  ``Main`` with an explicit module header but without ``main`` is now
109    an error (#7765).
110
111    The ``:back`` and ``:forward`` commands now take an optional count
112    allowing the user to move forward or backward in history several
113    steps at a time.
114
115    Added commands ``:load!`` and ``:reload!``, effectively setting
116    "-fdefer-type-errors" before loading a module and unsetting it after
117    loading if it has not been set before (#8353).
118
119 Template Haskell
120 ~~~~~~~~~~~~~~~~
121
122 -  The ``TemplateHaskell`` now no longer automatically errors when used
123    with a stage 1 compiler (i.e. GHC without interpreter support); in
124    particular, plain Haskell quotes (not quasi-quotes) can now be
125    compiled without erroring. Splices and quasi-quotes continue to only
126    be supported by a stage 2 compiler.
127
128 -  Partial type signatures can now be used in splices, see
129    :ref:`pts-where`.
130
131 -  ``Template Haskell`` now fully supports typed holes and quoting unbound
132    variables.  This means it is now possible to use pattern splices nested
133    inside quotation brackets.
134
135 -  ``Template Haskell`` now supports the use of ``UInfixT`` in types to
136    resolve infix operator fixities, in the same vein as ``UInfixP`` and
137    ``UInfixE`` in patterns and expressions. ``ParensT`` and ``InfixT``
138    have also been introduced, serving the same functions as their
139    pattern and expression counterparts.
140
141 -  Primitive chars (e.g., ``[| 'a'# |]``) and primitive strings (e.g.,
142    ``[| "abc"# |]``) can now be quoted with Template Haskell. The
143    ``Lit`` data type also has a new constructor, ``CharPrimL``, for
144    primitive char literals.
145
146 -  ``addTopDecls`` now accepts annotation pragmas.
147
148 -  Internally, the implementation of quasi-quotes has been unified with
149    that of normal Template Haskell splices. Under the previous
150    implementation, top-level declaration quasi-quotes did not cause a
151    break in the declaration groups, unlike splices of the form
152    ``$(...)``. This behavior has been preserved under the new
153    implementation, and is now recognized and documented in
154    :ref:`th-syntax`.
155
156 -  The ``Lift`` class is now derivable via the ``-XDeriveLift`` extension. See
157    :ref:`deriving-lift` for more information.
158
159
160 Runtime system
161 ~~~~~~~~~~~~~~
162
163 -  TODO FIXME.
164
165 Build system
166 ~~~~~~~~~~~~
167
168 -  TODO FIXME.
169
170 Package system
171 ~~~~~~~~~~~~~~
172
173 -  TODO FIXME.
174
175 Libraries
176 ---------
177
178 array
179 ~~~~~
180
181 -  Version number XXXXX (was 0.5.0.0)
182
183 base
184 ~~~~
185
186 -  Version number XXXXX (was 4.7.0.0)
187
188 -  A new module ``GHC.SrcLoc`` was added, exporting a new type
189    ``SrcLoc``. A ``SrcLoc`` contains package, module, and file names, as
190    well as start and end positions.
191
192 -  A new type ``CallStack`` was added for use with the new implicit
193    callstack parameters. A ``CallStack`` is a ``[(String, SrcLoc)]``,
194    sorted by most-recent call.
195
196 -  A new function, ``interruptible``, was added to ``GHC.IO`` allowing
197    an ``IO`` action to be run such that it can be interrupted by an
198    asynchronous exception, even if exceptions are masked (except if
199    masked with ``interruptibleMask``).
200
201    This was introduced to fix the behavior of ``allowInterrupt``, which
202    would previously incorrectly allow exceptions in uninterruptible
203    regions (see :ghc-ticket:`9516`).
204
205 -  Per-thread allocation counters (``setAllocationCounter`` and
206    ``getAllocationCounter``) and limits (``enableAllocationLimit``,
207    ``disableAllocationLimit`` are now available from ``System.Mem``. Previously
208    this functionality was only available from ``GHC.Conc``.
209
210
211 binary
212 ~~~~~~
213
214 -  Version number XXXXX (was 0.7.1.0)
215
216 bytestring
217 ~~~~~~~~~~
218
219 -  Version number XXXXX (was 0.10.4.0)
220
221 Cabal
222 ~~~~~
223
224 -  Version number XXXXX (was 1.18.1.3)
225
226 containers
227 ~~~~~~~~~~
228
229 -  Version number XXXXX (was 0.5.4.0)
230
231 deepseq
232 ~~~~~~~
233
234 -  Version number XXXXX (was 1.3.0.2)
235
236 directory
237 ~~~~~~~~~
238
239 -  Version number XXXXX (was 1.2.0.2)
240
241 filepath
242 ~~~~~~~~
243
244 -  Version number XXXXX (was 1.3.0.2)
245
246 ghc
247 ~~~
248
249 -  TODO FIXME.
250
251 -  The ``HsBang`` type has been removed in favour of ``HsSrcBang`` and
252    ``HsImplBang``. Data constructors now always carry around their
253    strictness annotations as the user wrote them, whether from an
254    imported module or not.
255
256 -  Moved `startsVarSym`, `startsVarId`, `startsConSym`, `startsConId`,
257    `startsVarSymASCII`, and `isVarSymChar` from `Lexeme` to the `GHC.Lemexe`
258    module of the `ghc-boot` library.
259
260 ghc-boot
261 ~~~~~~~~
262
263 -  This is an internal package. Use with caution.
264
265 -  This package was renamed from `bin-package-db` to reflect its new purpose
266    of containing intra-GHC functionality that needs to be shared across
267    multiple GHC boot libraries.
268
269 -  Added `GHC.Lexeme`, which contains functions for determining if a
270    character can be the first letter of a variable or data constructor in
271    Haskell, as defined by GHC. (These functions were moved from `Lexeme`
272    in `ghc`.)
273
274 ghc-prim
275 ~~~~~~~~
276
277 -  Version number XXXXX (was 0.3.1.0)
278
279 haskell98
280 ~~~~~~~~~
281
282 -  Version number XXXXX (was 2.0.0.3)
283
284 haskell2010
285 ~~~~~~~~~~~
286
287 -  Version number XXXXX (was 1.1.1.1)
288
289 hoopl
290 ~~~~~
291
292 -  Version number XXXXX (was 3.10.0.0)
293
294 hpc
295 ~~~
296
297 -  Version number XXXXX (was 0.6.0.1)
298
299 integer-gmp
300 ~~~~~~~~~~~
301
302 -  Version number XXXXX (was 0.5.1.0)
303
304 old-locale
305 ~~~~~~~~~~
306
307 -  Version number XXXXX (was 1.0.0.6)
308
309 old-time
310 ~~~~~~~~
311
312 -  Version number XXXXX (was 1.1.0.2)
313
314 process
315 ~~~~~~~
316
317 -  Version number XXXXX (was 1.2.0.0)
318
319 template-haskell
320 ~~~~~~~~~~~~~~~~
321
322 -  Version number XXXXX (was 2.9.0.0)
323
324 -  The ``Lift`` type class for lifting values into Template Haskell
325    splices now has a default signature ``lift :: Data a => a -> Q Exp``,
326    which means that you do not have to provide an explicit
327    implementation of ``lift`` for types which have a ``Data`` instance.
328    To manually use this default implementation, you can use the
329    ``liftData`` function which is now exported from
330    ``Language.Haskell.TH.Syntax``.
331
332 -  ``Info``'s constructors no longer have ``Fixity`` fields. A
333    ``qReifyFixity`` function was added to the ``Quasi`` type class (as
334    well as the ``reifyFixity`` function, specialized for ``Q``) to allow
335    lookup of fixity information for any given ``Name``.
336
337 time
338 ~~~~
339
340 -  Version number XXXXX (was 1.4.1)
341
342 unix
343 ~~~~
344
345 -  Version number XXXXX (was 2.7.0.0)
346
347 Win32
348 ~~~~~
349
350 -  Version number XXXXX (was 2.3.0.1)
351
352 Known bugs
353 ----------
354
355 -  TODO FIXME