Add 'type family (m :: Symbol) <> (n :: Symbol)'
[ghc.git] / docs / users_guide / 8.2.1-notes.rst
1 .. _release-8-2-1:
2
3 Release notes for version 8.2.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 8.0 branch.
9
10 Highlights
11 ----------
12
13 The highlights since the 8.0 branch are:
14
15 - TODO FIXME
16 - SCC annotations can now be used for declarations.
17 - Heap overflow throws an exception in certain circumstances.
18
19 Full details
20 ------------
21
22 - Heap overflow throws a catchable exception, provided that it was detected
23   by the RTS during a GC cycle due to the program exceeding a limit set by
24   ``+RTS -M``, and not due to an allocation being refused by the operating
25   system.  This exception is thrown to the same thread that receives
26   ``UserInterrupt`` exceptions, and may be caught by user programs.
27
28 Language
29 ~~~~~~~~
30
31 -  TODO FIXME.
32
33 - Pattern synonym signatures can now be applied to multiple patterns, just like
34   value-level binding signatures. See :ref:`patsyn-typing` for details.
35
36 Compiler
37 ~~~~~~~~
38
39 -  TODO FIXME.
40
41 - Old profiling flags ``-auto-all``, ``-auto``, and ``-caf-all`` are deprecated
42   and their usage provokes a compile-time warning.
43
44 - Support for adding cost centres to declarations is added. The same `SCC`
45   syntax can be used, in addition to a new form for specifying the cost centre
46   name. See :ref:`scc-pragma` for examples.
47
48 - It is now possible to explicitly pick a strategy to use when deriving a
49   class instance using the :ghc-flag:`-XDerivingStrategies` language extension
50   (see :ref:`deriving-strategies`).
51
52 - GHC now allows standalone deriving using :ghc-flag:`-XDeriveAnyClass` on
53   any data type, even if its data constructors are not in scope. This is
54   consistent with the fact that this code (in the presence of
55   :ghc-flag:`-XDeriveAnyClass`): ::
56
57       deriving instance C T
58
59   is exactly equivalent to: ::
60
61       instance C T
62
63   and the latter code has no restrictions about whether the data constructors
64   of ``T`` are in scope.
65
66 - :ghc-flag:`-XGeneralizedNewtypeDeriving` now supports deriving type classes
67   with associated type families. See the section on
68   :ref:`GeneralizedNewtypeDeriving and associated type families
69   <gnd-and-associated-types>`.
70
71 - :ghc-flag:`-XGeneralizedNewtypeDeriving` will no longer infer constraints
72   when deriving a class with no methods. That is, this code: ::
73
74       class Throws e
75       newtype Id a = MkId a
76         deriving Throws
77
78   will now generate this instance: ::
79
80       instance Throws (Id a)
81
82   instead of this instance: ::
83
84       instance Throws a => Throws (Id a)
85
86   This change was motivated by the fact that the latter code has a strictly
87   redundant ``Throws a`` constraint, so it would emit a warning when compiled
88   with :ghc-flag:`-Wredundant-constraints`. The latter instance could still
89   be derived if so desired using :ghc-flag:`-XStandaloneDeriving`: ::
90
91       deriving instance Throws a => Throws (Id a)
92
93 - Add warning flag :ghc-flag:`-Wcpp-undef` which passes ``-Wundef`` to the C
94   pre-processor causing the pre-processor to warn on uses of the ``#if``
95   directive on undefined identifiers.
96
97 - GHC will no longer automatically infer the kind of higher-rank type synonyms;
98   you must explicitly explicitly annotate the synonym with a kind signature.
99   For example, given::
100
101     data T :: (forall k. k -> Type) -> Type
102
103   to define a synonym of ``T``, you must write::
104
105     type TSyn = (T :: (forall k. k -> Type) -> Type)
106
107 - The Mingw-w64 toolchain for the Windows version of GHC has been updated. GHC now uses
108   `GCC 6.2.0` and `binutils 2.27`.
109
110 - Previously, :ghc-flag:`-Wmissing-methods` would not warn whenever a type
111   class method beginning with an underscore was not implemented in an instance.
112   For instance, this code would compile without any warnings: ::
113
114      class Foo a where
115        _Bar :: a -> Int
116
117      instance Foo Int
118
119   :ghc-flag:`-Wmissing-methods` will now warn that ``_Bar`` is not implemented
120   in the ``Foo Int`` instance.
121
122 GHCi
123 ~~~~
124
125 -  TODO FIXME.
126
127 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
128
129 Template Haskell
130 ~~~~~~~~~~~~~~~~
131
132 -  TODO FIXME.
133
134 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
135    Template Haskell reified unboxed tuples as boxed tuples with twice their
136    appropriate arity.)
137
138 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
139    correctly. Previously, Template Haskell would implicitly remove the
140    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
141
142 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
143
144 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
145
146 -  More kind annotations appear in the left-hand sides of reified closed
147    type family equations, in order to disambiguate types that would otherwise
148    be ambiguous in the presence of :ghc-flag:`-XPolyKinds`.
149    (:ghc-ticket:`12646`)
150
151 Runtime system
152 ~~~~~~~~~~~~~~
153
154 - TODO FIXME.
155
156 - Added support for *Compact Regions*, which offer a way to manually
157   move long-lived data outside of the heap so that the garbage
158   collector does not have to trace it repeatedly.  Compacted data can
159   also be serialized, stored, and deserialized again later by the same
160   program.  For more details see the :compact-ref:`Data.Compact
161   <Data-Compact.html>` module.
162
163 - There is new support for improving performance on machines with a
164   Non-Uniform Memory Architecture (NUMA).  See :rts-flag:`--numa`.
165   This is supported on Linux and Windows systems.
166
167 - The garbage collector can be told to use fewer threads than the
168   global number of capabilities set by :rts-flag:`-N`.  See
169   :rts-flag:`-qn`, and a `blog post
170   <http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html>`_
171   that describes this.
172
173 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
174   event log, allowing heap profiles to be correlated with other tracing events
175   (see :ghc-ticket:`11094`).
176
177 - Some bugs have been fixed in the stack-trace implementation in the
178   profiler that sometimes resulted in incorrect stack traces and
179   costs attributed to the wrong cost centre stack (see :ghc-ticket:`5654`).
180
181 - Added processor group support for Windows. This allows the runtime to allocate
182   threads to all cores in systems which have multiple processor groups.
183   (e.g. > 64 cores, see :ghc-ticket:`11054`)
184
185 Build system
186 ~~~~~~~~~~~~
187
188 -  TODO FIXME.
189
190 Package system
191 ~~~~~~~~~~~~~~
192
193 -  TODO FIXME.
194
195 hsc2hs
196 ~~~~~~
197
198 -  TODO FIXME.
199
200 Libraries
201 ---------
202
203 array
204 ~~~~~
205
206 -  Version number XXXXX (was 0.5.0.0)
207
208
209 .. _lib-base:
210
211 base
212 ~~~~
213
214 See ``changelog.md`` in the ``base`` package for full release notes.
215
216 -  Version number 4.10.0.0 (was 4.9.0.0)
217
218 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
219
220 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
221   ``gcastWith`` from ``Data.Type.Equality``.
222
223 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
224   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
225   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
226   provided in GHC's version of the ``Read`` class, and allows users to write
227   more efficient ``Read1`` and ``Read2`` instances.
228
229 - Add ``type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol`` to
230   ``GHC.TypeLits``
231
232 binary
233 ~~~~~~
234
235 -  Version number XXXXX (was 0.7.1.0)
236
237 bytestring
238 ~~~~~~~~~~
239
240 -  Version number XXXXX (was 0.10.4.0)
241
242 Cabal
243 ~~~~~
244
245 -  Version number XXXXX (was 1.18.1.3)
246
247 containers
248 ~~~~~~~~~~
249
250 -  Version number XXXXX (was 0.5.4.0)
251
252 deepseq
253 ~~~~~~~
254
255 -  Version number XXXXX (was 1.3.0.2)
256
257 directory
258 ~~~~~~~~~
259
260 -  Version number XXXXX (was 1.2.0.2)
261
262 filepath
263 ~~~~~~~~
264
265 -  Version number XXXXX (was 1.3.0.2)
266
267 ghc
268 ~~~
269
270 -
271 ghc-boot
272 ~~~~~~~~
273
274 -  This is an internal package. Use with caution.
275
276 -  TODO FIXME.
277
278 ghc-prim
279 ~~~~~~~~
280
281 -  Version number XXXXX (was 0.3.1.0)
282
283 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
284
285 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
286    should not be inlined.  It is optimized away after the simplifier runs.
287
288 haskell98
289 ~~~~~~~~~
290
291 -  Version number XXXXX (was 2.0.0.3)
292
293 haskell2010
294 ~~~~~~~~~~~
295
296 -  Version number XXXXX (was 1.1.1.1)
297
298 hoopl
299 ~~~~~
300
301 -  Version number XXXXX (was 3.10.0.0)
302
303 hpc
304 ~~~
305
306 -  Version number XXXXX (was 0.6.0.1)
307
308 integer-gmp
309 ~~~~~~~~~~~
310
311 -  Version number XXXXX (was 0.5.1.0)
312
313 old-locale
314 ~~~~~~~~~~
315
316 -  Version number XXXXX (was 1.0.0.6)
317
318 old-time
319 ~~~~~~~~
320
321 -  Version number XXXXX (was 1.1.0.2)
322
323 process
324 ~~~~~~~
325
326 -  Version number XXXXX (was 1.2.0.0)
327
328 template-haskell
329 ~~~~~~~~~~~~~~~~
330
331 -  Version number XXXXX (was 2.9.0.0)
332
333 -  Added support for unboxed sums :ghc-ticket:`12478`.
334
335 -  Added support for visible type applications :ghc-ticket:`12530`.
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