hs_add_root() RTS API removal
[ghc.git] / docs / users_guide / 8.4.1-notes.rst
1 .. _release-8-4-1:
2
3 Release notes for version 8.4.1
4 ===============================
5
6 The significant changes to the various parts of the compiler are listed in the
7 following sections. There have also been numerous bug fixes and performance
8 improvements over the 8.2.1 release.
9
10
11 Highlights
12 ----------
13
14 The highlights, since the 8.2.1 release, are:
15
16 -  Many, many bug fixes.
17
18 Full details
19 ------------
20
21 Language
22 ~~~~~~~~
23
24 Compiler
25 ~~~~~~~~
26
27 - Derived ``Functor``, ``Foldable``, and ``Traversable`` instances are now
28   optimized when their last type parameters have phantom roles.
29   Specifically, ::
30
31     fmap _ = coerce
32     traverse _ x = pure (coerce x)
33     foldMap _ _ = mempty
34
35   These definitions of ``foldMap`` and ``traverse`` are lazier than the ones we
36   would otherwise derive, as they may produce results without inspecting their
37   arguments at all.
38
39   See also :ref:`deriving-functor`, :ref:`deriving-foldable`, and
40   :ref:`deriving-traversable`.
41
42 - Derived ``Functor``, ``Foldable``, ``Traversable``, ``Generic``, and
43   ``Generic1`` instances now have better, and generally better-documented,
44   behaviors for types with no constructors. In particular, ::
45
46       fmap _ x = case x of
47       foldMap _ _ = mempty
48       traverse _ x = pure (case x of)
49       to x = case x of
50       to1 x = case x of
51       from x = case x of
52       from1 x = case x of
53
54   The new behavior generally leads to more useful error messages than the
55   old did, and lazier semantics for ``foldMap`` and ``traverse``.
56
57 - Derived ``Foldable`` instances now derive custom definitions for ``null``
58   instead of using the default one. This leads to asymptotically better
59   performance for recursive types not shaped like cons-lists, and allows ``null``
60   to terminate for more (but not all) infinitely large structures.
61
62 - Derived instances for types with no constructors now have appropriate
63   arities: they take all their arguments before producing errors. This may not
64   be terribly important in practice, but it seems like the right thing to do.
65   Previously, we generated ::
66
67       (==) = error ...
68
69 Now we generate ::
70
71       _ == _ = error ...
72
73 - Lots of other bugs. See `Trac
74    <https://ghc.haskell.org/trac/ghc/query?status=closed&milestone=8.4.1&col=id&col=summary&col=status&col=type&col=priority&col=milestone&col=component&order=priority>`_
75    for a complete list.
76
77 Runtime system
78 ~~~~~~~~~~~~~~
79
80 - Function ``hs_add_root()`` was removed. It was a no-op since GHC-7.2.1
81   where module initialisation stopped requiring a call to ``hs_add_root()``.
82
83 Template Haskell
84 ~~~~~~~~~~~~~~~~
85
86 ``ghc`` library
87 ~~~~~~~~~~~~~~~