Prohibit RULES changing constructors
[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 - GHC now ignores ``RULES`` for data constructors (:ghc-ticket:`13290`).
161   Previously, it accepted::
162
163     "NotAllowed" forall x. Just x = e
164
165   That rule will no longer take effect, and a warning will be issued. ``RULES``
166   may still mention data constructors, but not in the outermost position::
167
168     "StillWorks" forall x. f (Just x) = e
169
170 GHCi
171 ~~~~
172
173 -  TODO FIXME.
174
175 - Added :ghc-flag:`-flocal-ghci-history` which uses current directory for `.ghci-history`.
176
177 - Added support for :ghc-flag:`-XStaticPointers` in interpreted modules. Note, however,
178   that ``static`` expressions are still not allowed in expressions evaluated in the REPL.
179
180 Template Haskell
181 ~~~~~~~~~~~~~~~~
182
183 -  TODO FIXME.
184
185 -  Reifying types that contain unboxed tuples now works correctly. (Previously,
186    Template Haskell reified unboxed tuples as boxed tuples with twice their
187    appropriate arity.)
188
189 -  Splicing singleton unboxed tuple types (e.g., ``(# Int #)``) now works
190    correctly. Previously, Template Haskell would implicitly remove the
191    parentheses when splicing, which would turn ``(# Int #)`` into ``Int``.
192
193 -  Add support for type signatures in patterns. (:ghc-ticket:`12164`)
194
195 -  Make quoting and reification return the same types.  (:ghc-ticket:`11629`)
196
197 -  More kind annotations appear in the left-hand sides of reified closed
198    type family equations, in order to disambiguate types that would otherwise
199    be ambiguous in the presence of :ghc-flag:`-XPolyKinds`.
200    (:ghc-ticket:`12646`)
201
202 -  Quoted type signatures are more accurate with respect to implicitly
203    quantified type variables. Before, if you quoted this: ::
204
205      [d| id :: a -> a
206          id x = x
207        |]
208
209    then the code that Template Haskell would give back to you would actually be
210    this instead: ::
211
212      id :: forall a. a -> a
213      id x = x
214
215    That is, quoting would explicitly quantify all type variables, even ones
216    that were implicitly quantified in the source. This could be especially
217    harmful if a kind variable was implicitly quantified. For example, if
218    you took this quoted declaration: ::
219
220      [d| idProxy :: forall proxy (b :: k). proxy b -> proxy b
221          idProxy x = x
222        |]
223
224    and tried to splice it back in, you'd get this instead: ::
225
226      idProxy :: forall k proxy (b :: k). proxy b -> proxy b
227      idProxy x = x
228
229    Now ``k`` is explicitly quantified, and that requires turning on
230    :ghc-flag:`-XTypeInType`, whereas the original declaration did not!
231
232    Template Haskell quoting now respects implicit quantification in type
233    signatures, so the quoted declarations above now correctly leave the
234    type variables ``a`` and ``k`` as implicitly quantified.
235    (:ghc-ticket:`13018` and :ghc-ticket:`13123`)
236
237 - Looking up type constructors with symbol names (e.g., ``+``) now works
238   as expected (:ghc-ticket:`11046`)
239
240
241 Runtime system
242 ~~~~~~~~~~~~~~
243
244 - TODO FIXME.
245
246 - Added support for *Compact Regions*, which offer a way to manually
247   move long-lived data outside of the heap so that the garbage
248   collector does not have to trace it repeatedly.  Compacted data can
249   also be serialized, stored, and deserialized again later by the same
250   program.  For more details see the :compact-ref:`Data.Compact
251   <Data-Compact.html>` module.
252
253 - There is new support for improving performance on machines with a
254   Non-Uniform Memory Architecture (NUMA).  See :rts-flag:`--numa`.
255   This is supported on Linux and Windows systems.
256
257 - The garbage collector can be told to use fewer threads than the
258   global number of capabilities set by :rts-flag:`-N`.  See
259   :rts-flag:`-qn`, and a `blog post
260   <http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html>`_
261   that describes this.
262
263 - The :ref:`heap profiler <prof-heap>` can now emit heap census data to the GHC
264   event log, allowing heap profiles to be correlated with other tracing events
265   (see :ghc-ticket:`11094`).
266
267 - Some bugs have been fixed in the stack-trace implementation in the
268   profiler that sometimes resulted in incorrect stack traces and
269   costs attributed to the wrong cost centre stack (see :ghc-ticket:`5654`).
270
271 - Added processor group support for Windows. This allows the runtime to allocate
272   threads to all cores in systems which have multiple processor groups.
273   (e.g. > 64 cores, see :ghc-ticket:`11054`)
274
275 - Output of :ref:`Event log <rts-eventlog>` data can now be configured.
276   Enabling external tools to collect and analyze the event log data while the
277   application is still running.
278
279 - advapi32, shell32 and user32 are now automatically loaded in GHCi. libGCC is also
280   loaded when a depencency requires it. See :ghc-ticket:`13189`.
281
282 Build system
283 ~~~~~~~~~~~~
284
285 -  TODO FIXME.
286
287 Package system
288 ~~~~~~~~~~~~~~
289
290 -  TODO FIXME.
291
292 hsc2hs
293 ~~~~~~
294
295 -  TODO FIXME.
296
297 Libraries
298 ---------
299
300 array
301 ~~~~~
302
303 -  Version number XXXXX (was 0.5.0.0)
304
305
306 .. _lib-base:
307
308 base
309 ~~~~
310
311 See ``changelog.md`` in the ``base`` package for full release notes.
312
313 -  Version number 4.10.0.0 (was 4.9.0.0)
314
315 - ``Data.Either`` now provides ``fromLeft`` and ``fromRight``
316
317 - ``Data.Type.Coercion`` now provides ``gcoerceWith``, which is analogous to
318   ``gcastWith`` from ``Data.Type.Equality``.
319
320 - The ``Read1`` and ``Read2`` classes in ``Data.Functor.Classes`` have new
321   methods, ``liftReadList(2)`` and ``liftReadListPrec(2)``, that are defined in
322   terms of ``ReadPrec`` instead of ``ReadS``. This matches the interface
323   provided in GHC's version of the ``Read`` class, and allows users to write
324   more efficient ``Read1`` and ``Read2`` instances.
325
326 - Add ``type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol`` to
327   ``GHC.TypeLits``
328
329 - Add ``GHC.TypeNats`` module with ``Natural``-based ``KnownNat``. The ``Nat``
330   operations in ``GHC.TypeLits`` are a thin compatibility layer on top.
331   Note: the ``KnownNat`` evidence is changed from an ``Integer`` to a ``Natural``.
332
333 - ``liftA2`` is now a method of the ``Applicative`` class. ``Traversable``
334   deriving has been modified to use ``liftA2`` for the first two elements
335   traversed in each constructor. ``liftA2`` is not yet in the ``Prelude``,
336   and must currently be imported from ``Control.Applicative``. It is likely
337   to be added to the ``Prelude`` in the future.
338
339 binary
340 ~~~~~~
341
342 -  Version number XXXXX (was 0.7.1.0)
343
344 bytestring
345 ~~~~~~~~~~
346
347 -  Version number XXXXX (was 0.10.4.0)
348
349 Cabal
350 ~~~~~
351
352 -  Version number XXXXX (was 1.18.1.3)
353
354 containers
355 ~~~~~~~~~~
356
357 -  Version number XXXXX (was 0.5.4.0)
358
359 compact
360 ~~~~~~~
361
362 The ``compact`` library provides an experimental API for placing immutable
363 data structures into a contiguous memory region.  Data in these regions
364 is not traced during garbage collection and can be serialized to disk or
365 over the network.
366
367 - Version number 1.0.0.0 (newly added)
368
369 deepseq
370 ~~~~~~~
371
372 -  Version number XXXXX (was 1.3.0.2)
373
374 directory
375 ~~~~~~~~~
376
377 -  Version number XXXXX (was 1.2.0.2)
378
379 filepath
380 ~~~~~~~~
381
382 -  Version number XXXXX (was 1.3.0.2)
383
384 ghc
385 ~~~
386
387 -
388 ghc-boot
389 ~~~~~~~~
390
391 -  This is an internal package. Use with caution.
392
393 -  TODO FIXME.
394
395 ghc-prim
396 ~~~~~~~~
397
398 -  Version number XXXXX (was 0.3.1.0)
399
400 -  Added new ``isByteArrayPinned#`` and ``isMutableByteArrayPinned#`` operation.
401
402 -  New function ``noinline`` in ``GHC.Magic`` lets you mark that a function
403    should not be inlined.  It is optimized away after the simplifier runs.
404
405 haskell98
406 ~~~~~~~~~
407
408 -  Version number XXXXX (was 2.0.0.3)
409
410 haskell2010
411 ~~~~~~~~~~~
412
413 -  Version number XXXXX (was 1.1.1.1)
414
415 hoopl
416 ~~~~~
417
418 -  Version number XXXXX (was 3.10.0.0)
419
420 hpc
421 ~~~
422
423 -  Version number XXXXX (was 0.6.0.1)
424
425 integer-gmp
426 ~~~~~~~~~~~
427
428 -  Version number XXXXX (was 0.5.1.0)
429
430 old-locale
431 ~~~~~~~~~~
432
433 -  Version number XXXXX (was 1.0.0.6)
434
435 old-time
436 ~~~~~~~~
437
438 -  Version number XXXXX (was 1.1.0.2)
439
440 process
441 ~~~~~~~
442
443 -  Version number XXXXX (was 1.2.0.0)
444
445 template-haskell
446 ~~~~~~~~~~~~~~~~
447
448 -  Version number XXXXX (was 2.9.0.0)
449
450 -  Added support for unboxed sums :ghc-ticket:`12478`.
451
452 -  Added support for visible type applications :ghc-ticket:`12530`.
453
454 time
455 ~~~~
456
457 -  Version number XXXXX (was 1.4.1)
458
459 unix
460 ~~~~
461
462 -  Version number XXXXX (was 2.7.0.0)
463
464 Win32
465 ~~~~~
466
467 -  Version number XXXXX (was 2.3.0.1)
468
469 Known bugs
470 ----------
471
472 -  TODO FIXME