984889f99136cef989ebfd3db596354826c1f86d
[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
18 Full details
19 ------------
20
21 Language
22 ~~~~~~~~
23
24 -  TODO FIXME.
25
26 - Pattern synonym signatures can now be applied to multiple patterns, just like
27   value-level binding signatures. See :ref:`patsyn-typing` for details.
28
29 Compiler
30 ~~~~~~~~
31
32 -  TODO FIXME.
33
34 - Old profiling flags ``-auto-all``, ``-auto``, and ``-caf-all`` are deprecated
35   and their usage provokes a compile-time warning.
36
37 - Support for adding cost centres to declarations is added. The same `SCC`
38   syntax can be used, in addition to a new form for specifying the cost centre
39   name. See :ref:`scc-pragma` for examples.
40
41 - It is now possible to explicitly pick a strategy to use when deriving a
42   class instance using the :ghc-flag:`-XDerivingStrategies` language extension
43   (see :ref:`deriving-strategies`).
44
45 - GHC now allows standalone deriving using :ghc-flag:`-XDeriveAnyClass` on
46   any data type, even if its data constructors are not in scope. This is
47   consistent with the fact that this code (in the presence of
48   :ghc-flag:`-XDeriveAnyClass`): ::
49
50       deriving instance C T
51
52   is exactly equivalent to: ::
53
54       instance C T
55
56   and the latter code has no restrictions about whether the data constructors
57   of ``T`` are in scope.
58
59 - :ghc-flag:`-XGeneralizedNewtypeDeriving` now supports deriving type classes
60   with associated type families. See the section on
61   :ref:`GeneralizedNewtypeDeriving and associated type families
62   <gnd-and-associated-types>`.
63
64 - :ghc-flag:`-XGeneralizedNewtypeDeriving` will no longer infer constraints
65   when deriving a class with no methods. That is, this code: ::
66
67       class Throws e
68       newtype Id a = MkId a
69         deriving Throws
70
71   will now generate this instance: ::
72
73       instance Throws (Id a)
74
75   instead of this instance: ::
76
77       instance Throws a => Throws (Id a)
78
79   This change was motivated by the fact that the latter code has a strictly
80   redundant ``Throws a`` constraint, so it would emit a warning when compiled
81   with :ghc-flag:`-Wredundant-constraints`. The latter instance could still
82   be derived if so desired using :ghc-flag:`-XStandaloneDeriving`: ::
83
84       deriving instance Throws a => Throws (Id a)
85
86 - Add warning flag :ghc-flag:`-Wcpp-undef` which passes ``-Wundef`` to the C
87   pre-processor causing the pre-processor to warn on uses of the ``#if``
88   directive on undefined identifiers.
89
90 - GHC will no longer automatically infer the kind of higher-rank type synonyms;
91   you must explicitly explicitly annotate the synonym with a kind signature.
92   For example, given::
93
94     data T :: (forall k. k -> Type) -> Type
95
96   to define a synonym of ``T``, you must write::
97
98     data TSyn = (T :: (forall k. k -> Type) -> Type)
99
100 GHCi
101 ~~~~
102
103 -  TODO FIXME.
104
105 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
106
107 Template Haskell
108 ~~~~~~~~~~~~~~~~
109
110 -  TODO FIXME.
111
112 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
113    Template Haskell reified unboxed tuples as boxed tuples with twice their
114    appropriate arity.)
115
116 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
117    correctly. Previously, Template Haskell would implicitly remove the
118    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
119
120 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
121
122 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
123
124 Runtime system
125 ~~~~~~~~~~~~~~
126
127 -  TODO FIXME.
128
129 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
130   event log, allowing heap profiles to be correlated with other tracing events
131   (see :ghc-ticket:`11094`).
132
133 - Added NUMA support to Windows.
134
135 - Added processor group support for Windows. This allows the runtime to allocate
136   threads to all cores in systems which have multiple processor groups.
137   (e.g. > 64 cores, see :ghc-ticket:`11054`)
138
139 Build system
140 ~~~~~~~~~~~~
141
142 -  TODO FIXME.
143
144 Package system
145 ~~~~~~~~~~~~~~
146
147 -  TODO FIXME.
148
149 hsc2hs
150 ~~~~~~
151
152 -  TODO FIXME.
153
154 Libraries
155 ---------
156
157 array
158 ~~~~~
159
160 -  Version number XXXXX (was 0.5.0.0)
161
162
163 .. _lib-base:
164
165 base
166 ~~~~
167
168 See ``changelog.md`` in the ``base`` package for full release notes.
169
170 -  Version number 4.10.0.0 (was 4.9.0.0)
171
172 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
173
174 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
175   ``gcastWith`` from ``Data.Type.Equality``.
176
177 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
178   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
179   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
180   provided in GHC's version of the ``Read`` class, and allows users to write
181   more efficient ``Read1`` and ``Read2`` instances.
182
183 binary
184 ~~~~~~
185
186 -  Version number XXXXX (was 0.7.1.0)
187
188 bytestring
189 ~~~~~~~~~~
190
191 -  Version number XXXXX (was 0.10.4.0)
192
193 Cabal
194 ~~~~~
195
196 -  Version number XXXXX (was 1.18.1.3)
197
198 containers
199 ~~~~~~~~~~
200
201 -  Version number XXXXX (was 0.5.4.0)
202
203 deepseq
204 ~~~~~~~
205
206 -  Version number XXXXX (was 1.3.0.2)
207
208 directory
209 ~~~~~~~~~
210
211 -  Version number XXXXX (was 1.2.0.2)
212
213 filepath
214 ~~~~~~~~
215
216 -  Version number XXXXX (was 1.3.0.2)
217
218 ghc
219 ~~~
220
221 -
222 ghc-boot
223 ~~~~~~~~
224
225 -  This is an internal package. Use with caution.
226
227 -  TODO FIXME.
228
229 ghc-prim
230 ~~~~~~~~
231
232 -  Version number XXXXX (was 0.3.1.0)
233
234 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
235
236 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
237    should not be inlined.  It is optimized away after the simplifier runs.
238
239 haskell98
240 ~~~~~~~~~
241
242 -  Version number XXXXX (was 2.0.0.3)
243
244 haskell2010
245 ~~~~~~~~~~~
246
247 -  Version number XXXXX (was 1.1.1.1)
248
249 hoopl
250 ~~~~~
251
252 -  Version number XXXXX (was 3.10.0.0)
253
254 hpc
255 ~~~
256
257 -  Version number XXXXX (was 0.6.0.1)
258
259 integer-gmp
260 ~~~~~~~~~~~
261
262 -  Version number XXXXX (was 0.5.1.0)
263
264 old-locale
265 ~~~~~~~~~~
266
267 -  Version number XXXXX (was 1.0.0.6)
268
269 old-time
270 ~~~~~~~~
271
272 -  Version number XXXXX (was 1.1.0.2)
273
274 process
275 ~~~~~~~
276
277 -  Version number XXXXX (was 1.2.0.0)
278
279 template-haskell
280 ~~~~~~~~~~~~~~~~
281
282 -  Version number XXXXX (was 2.9.0.0)
283
284 -  Added support for unboxed sums :ghc-ticket:`12478`.
285
286 -  Added support for visible type applications :ghc-ticket:`12530`.
287
288 time
289 ~~~~
290
291 -  Version number XXXXX (was 1.4.1)
292
293 unix
294 ~~~~
295
296 -  Version number XXXXX (was 2.7.0.0)
297
298 Win32
299 ~~~~~
300
301 -  Version number XXXXX (was 2.3.0.1)
302
303 Known bugs
304 ----------
305
306 -  TODO FIXME