Allow type defaulting for multi-param type classes with ExtendedDefaultRules
[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 - GHC is now much more particular about :ghc-flag:`-XDefaultSignatures`. The
49   type signature for a default method of a type class must now be the same as
50   the corresponding main method's type signature modulo differences in the
51   signatures' contexts. Otherwise, the typechecker will reject that class's
52   definition. See :ref:`class-default-signatures` for further details.
53
54 - It is now possible to explicitly pick a strategy to use when deriving a
55   class instance using the :ghc-flag:`-XDerivingStrategies` language extension
56   (see :ref:`deriving-strategies`).
57
58 - :ghc-flag:`-XDeriveAnyClass` is no longer limited to type classes whose
59   argument is of kind ``*`` or ``* -> *``.
60
61 - The means by which :ghc-flag:`-XDeriveAnyClass` infers instance contexts has
62   been completely overhauled. The instance context is now inferred using the
63   type signatures (and default type signatures) of the derived class's methods
64   instead of using the datatype's definition, which often led to
65   overconstrained instances or instances that didn't typecheck (or worse,
66   triggered GHC panics). See the section on
67   :ref:`DeriveAnyClass <derive-any-class>` for more details.
68
69 - GHC now allows standalone deriving using :ghc-flag:`-XDeriveAnyClass` on
70   any data type, even if its data constructors are not in scope. This is
71   consistent with the fact that this code (in the presence of
72   :ghc-flag:`-XDeriveAnyClass`): ::
73
74       deriving instance C T
75
76   is exactly equivalent to: ::
77
78       instance C T
79
80   and the latter code has no restrictions about whether the data constructors
81   of ``T`` are in scope.
82
83 - :ghc-flag:`-XGeneralizedNewtypeDeriving` now supports deriving type classes
84   with associated type families. See the section on
85   :ref:`GeneralizedNewtypeDeriving and associated type families
86   <gnd-and-associated-types>`.
87
88 - :ghc-flag:`-XGeneralizedNewtypeDeriving` will no longer infer constraints
89   when deriving a class with no methods. That is, this code: ::
90
91       class Throws e
92       newtype Id a = MkId a
93         deriving Throws
94
95   will now generate this instance: ::
96
97       instance Throws (Id a)
98
99   instead of this instance: ::
100
101       instance Throws a => Throws (Id a)
102
103   This change was motivated by the fact that the latter code has a strictly
104   redundant ``Throws a`` constraint, so it would emit a warning when compiled
105   with :ghc-flag:`-Wredundant-constraints`. The latter instance could still
106   be derived if so desired using :ghc-flag:`-XStandaloneDeriving`: ::
107
108       deriving instance Throws a => Throws (Id a)
109
110 - Add warning flag :ghc-flag:`-Wcpp-undef` which passes ``-Wundef`` to the C
111   pre-processor causing the pre-processor to warn on uses of the ``#if``
112   directive on undefined identifiers.
113
114 - GHC will no longer automatically infer the kind of higher-rank type synonyms;
115   you must explicitly explicitly annotate the synonym with a kind signature.
116   For example, given::
117
118     data T :: (forall k. k -> Type) -> Type
119
120   to define a synonym of ``T``, you must write::
121
122     type TSyn = (T :: (forall k. k -> Type) -> Type)
123
124 - The Mingw-w64 toolchain for the Windows version of GHC has been updated. GHC now uses
125   `GCC 6.2.0` and `binutils 2.27`.
126
127 - Previously, :ghc-flag:`-Wmissing-methods` would not warn whenever a type
128   class method beginning with an underscore was not implemented in an instance.
129   For instance, this code would compile without any warnings: ::
130
131      class Foo a where
132        _Bar :: a -> Int
133
134      instance Foo Int
135
136   :ghc-flag:`-Wmissing-methods` will now warn that ``_Bar`` is not implemented
137   in the ``Foo Int`` instance.
138
139 - A new flag :ghc-flag:`-ddump-json` has been added. This flag dumps compiler
140   output as JSON documents. It is experimental and will be refined depending
141   on feedback from tooling authors for the next release.
142
143 - GHC is now able to better optimize polymorphic expressions by using known
144   superclass dictionaries where possible. Some examples:
145
146     -- uses of `Monad IO` or `Applicative IO` here are improved
147     foo :: MonadBaseControl IO m => ...
148
149     -- uses of `Monoid MyMonoid` here are improved
150     bar :: MonadWriter MyMonoid m => ...
151
152 - GHC now derives the definition of ``<$`` when using ``DeriveFunctor``
153   rather than using the default definition. This prevents unnecessary
154   allocation and a potential space leak when deriving ``Functor`` for
155   a recursive type.
156
157 - The :ghc-flag:`-XExtendedDefaultRules` extension now defaults multi-parameter
158   typeclasses. See :ghc-ticket:`12923`.
159
160 GHCi
161 ~~~~
162
163 -  TODO FIXME.
164
165 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
166
167 - Added support for :ghc-flag:`-XStaticPointers` in interpreted modules. Note, however,
168   that ``static`` expressions are still not allowed in expressions evaluated in the REPL.
169
170 Template Haskell
171 ~~~~~~~~~~~~~~~~
172
173 -  TODO FIXME.
174
175 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
176    Template Haskell reified unboxed tuples as boxed tuples with twice their
177    appropriate arity.)
178
179 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
180    correctly. Previously, Template Haskell would implicitly remove the
181    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
182
183 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
184
185 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
186
187 -  More kind annotations appear in the left-hand sides of reified closed
188    type family equations, in order to disambiguate types that would otherwise
189    be ambiguous in the presence of :ghc-flag:`-XPolyKinds`.
190    (:ghc-ticket:`12646`)
191
192 -  Quoted type signatures are more accurate with respect to implicitly
193    quantified type variables. Before, if you quoted this: ::
194
195      [d| id :: a -> a
196          id x = x
197        |]
198
199    then the code that Template Haskell would give back to you would actually be
200    this instead: ::
201
202      id :: forall a. a -> a
203      id x = x
204
205    That is, quoting would explicitly quantify all type variables, even ones
206    that were implicitly quantified in the source. This could be especially
207    harmful if a kind variable was implicitly quantified. For example, if
208    you took this quoted declaration: ::
209
210      [d| idProxy :: forall proxy (b :: k). proxy b -> proxy b
211          idProxy x = x
212        |]
213
214    and tried to splice it back in, you'd get this instead: ::
215
216      idProxy :: forall k proxy (b :: k). proxy b -> proxy b
217      idProxy x = x
218
219    Now ``k`` is explicitly quantified, and that requires turning on
220    :ghc-flag:`-XTypeInType`, whereas the original declaration did not!
221
222    Template Haskell quoting now respects implicit quantification in type
223    signatures, so the quoted declarations above now correctly leave the
224    type variables ``a`` and ``k`` as implicitly quantified.
225    (:ghc-ticket:`13018` and :ghc-ticket:`13123`)
226
227 - Looking up type constructors with symbol names (e.g., ``+``) now works
228   as expected (:ghc-ticket:`11046`)
229
230
231 Runtime system
232 ~~~~~~~~~~~~~~
233
234 - TODO FIXME.
235
236 - Added support for *Compact Regions*, which offer a way to manually
237   move long-lived data outside of the heap so that the garbage
238   collector does not have to trace it repeatedly.  Compacted data can
239   also be serialized, stored, and deserialized again later by the same
240   program.  For more details see the :compact-ref:`Data.Compact
241   <Data-Compact.html>` module.
242
243 - There is new support for improving performance on machines with a
244   Non-Uniform Memory Architecture (NUMA).  See :rts-flag:`--numa`.
245   This is supported on Linux and Windows systems.
246
247 - The garbage collector can be told to use fewer threads than the
248   global number of capabilities set by :rts-flag:`-N`.  See
249   :rts-flag:`-qn`, and a `blog post
250   <http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html>`_
251   that describes this.
252
253 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
254   event log, allowing heap profiles to be correlated with other tracing events
255   (see :ghc-ticket:`11094`).
256
257 - Some bugs have been fixed in the stack-trace implementation in the
258   profiler that sometimes resulted in incorrect stack traces and
259   costs attributed to the wrong cost centre stack (see :ghc-ticket:`5654`).
260
261 - Added processor group support for Windows. This allows the runtime to allocate
262   threads to all cores in systems which have multiple processor groups.
263   (e.g. > 64 cores, see :ghc-ticket:`11054`)
264
265 - Output of :ref:`Event log <rts-eventlog>` data can now be configured.
266   Enabling external tools to collect and analyze the event log data while the
267   application is still running.
268
269 - advapi32, shell32 and user32 are now automatically loaded in GHCi. libGCC is also
270   loaded when a depencency requires it. See :ghc-ticket:`13189`.
271
272 Build system
273 ~~~~~~~~~~~~
274
275 -  TODO FIXME.
276
277 Package system
278 ~~~~~~~~~~~~~~
279
280 -  TODO FIXME.
281
282 hsc2hs
283 ~~~~~~
284
285 -  TODO FIXME.
286
287 Libraries
288 ---------
289
290 array
291 ~~~~~
292
293 -  Version number XXXXX (was 0.5.0.0)
294
295
296 .. _lib-base:
297
298 base
299 ~~~~
300
301 See ``changelog.md`` in the ``base`` package for full release notes.
302
303 -  Version number 4.10.0.0 (was 4.9.0.0)
304
305 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
306
307 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
308   ``gcastWith`` from ``Data.Type.Equality``.
309
310 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
311   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
312   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
313   provided in GHC's version of the ``Read`` class, and allows users to write
314   more efficient ``Read1`` and ``Read2`` instances.
315
316 - Add ``type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol`` to
317   ``GHC.TypeLits``
318
319 - Add ``GHC.TypeNats`` module with ``Natural``-based ``KnownNat``. The ``Nat``
320   operations in ``GHC.TypeLits`` are a thin compatibility layer on top.
321   Note: the ``KnownNat`` evidence is changed from an ``Integer`` to a ``Natural``.
322
323 - ``liftA2`` is now a method of the ``Applicative`` class. ``Traversable``
324   deriving has been modified to use ``liftA2`` for the first two elements
325   traversed in each constructor. ``liftA2`` is not yet in the ``Prelude``,
326   and must currently be imported from ``Control.Applicative``. It is likely
327   to be added to the ``Prelude`` in the future.
328
329 binary
330 ~~~~~~
331
332 -  Version number XXXXX (was 0.7.1.0)
333
334 bytestring
335 ~~~~~~~~~~
336
337 -  Version number XXXXX (was 0.10.4.0)
338
339 Cabal
340 ~~~~~
341
342 -  Version number XXXXX (was 1.18.1.3)
343
344 containers
345 ~~~~~~~~~~
346
347 -  Version number XXXXX (was 0.5.4.0)
348
349 deepseq
350 ~~~~~~~
351
352 -  Version number XXXXX (was 1.3.0.2)
353
354 directory
355 ~~~~~~~~~
356
357 -  Version number XXXXX (was 1.2.0.2)
358
359 filepath
360 ~~~~~~~~
361
362 -  Version number XXXXX (was 1.3.0.2)
363
364 ghc
365 ~~~
366
367 -
368 ghc-boot
369 ~~~~~~~~
370
371 -  This is an internal package. Use with caution.
372
373 -  TODO FIXME.
374
375 ghc-prim
376 ~~~~~~~~
377
378 -  Version number XXXXX (was 0.3.1.0)
379
380 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
381
382 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
383    should not be inlined.  It is optimized away after the simplifier runs.
384
385 haskell98
386 ~~~~~~~~~
387
388 -  Version number XXXXX (was 2.0.0.3)
389
390 haskell2010
391 ~~~~~~~~~~~
392
393 -  Version number XXXXX (was 1.1.1.1)
394
395 hoopl
396 ~~~~~
397
398 -  Version number XXXXX (was 3.10.0.0)
399
400 hpc
401 ~~~
402
403 -  Version number XXXXX (was 0.6.0.1)
404
405 integer-gmp
406 ~~~~~~~~~~~
407
408 -  Version number XXXXX (was 0.5.1.0)
409
410 old-locale
411 ~~~~~~~~~~
412
413 -  Version number XXXXX (was 1.0.0.6)
414
415 old-time
416 ~~~~~~~~
417
418 -  Version number XXXXX (was 1.1.0.2)
419
420 process
421 ~~~~~~~
422
423 -  Version number XXXXX (was 1.2.0.0)
424
425 template-haskell
426 ~~~~~~~~~~~~~~~~
427
428 -  Version number XXXXX (was 2.9.0.0)
429
430 -  Added support for unboxed sums :ghc-ticket:`12478`.
431
432 -  Added support for visible type applications :ghc-ticket:`12530`.
433
434 time
435 ~~~~
436
437 -  Version number XXXXX (was 1.4.1)
438
439 unix
440 ~~~~
441
442 -  Version number XXXXX (was 2.7.0.0)
443
444 Win32
445 ~~~~~
446
447 -  Version number XXXXX (was 2.3.0.1)
448
449 Known bugs
450 ----------
451
452 -  TODO FIXME