configure: Kill off FP_ARG_WITH_*
[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 - The ``configure`` script now no longer accepts ``--with-TOOL`` flags (e.g.
28   ``--with-nm``, ``--with-ld``, etc.). Instead, these are taken from environment
29   variables, as is typical in ``autoconf`` scripts. For instance,
30   ``./configure --with-nm=/usr/local/bin/nm`` turns into
31   ``./configure NM=/usr/local/bin/nm``.
32
33 - Derived ``Functor``, ``Foldable``, and ``Traversable`` instances are now
34   optimized when their last type parameters have phantom roles.
35   Specifically, ::
36
37     fmap _ = coerce
38     traverse _ x = pure (coerce x)
39     foldMap _ _ = mempty
40
41   These definitions of ``foldMap`` and ``traverse`` are lazier than the ones we
42   would otherwise derive, as they may produce results without inspecting their
43   arguments at all.
44
45   See also :ref:`deriving-functor`, :ref:`deriving-foldable`, and
46   :ref:`deriving-traversable`.
47
48 - Derived ``Functor``, ``Foldable``, ``Traversable``, ``Generic``, and
49   ``Generic1`` instances now have better, and generally better-documented,
50   behaviors for types with no constructors. In particular, ::
51
52       fmap _ x = case x of
53       foldMap _ _ = mempty
54       traverse _ x = pure (case x of)
55       to x = case x of
56       to1 x = case x of
57       from x = case x of
58       from1 x = case x of
59
60   The new behavior generally leads to more useful error messages than the
61   old did, and lazier semantics for ``foldMap`` and ``traverse``.
62
63 - Derived ``Foldable`` instances now derive custom definitions for ``null``
64   instead of using the default one. This leads to asymptotically better
65   performance for recursive types not shaped like cons-lists, and allows ``null``
66   to terminate for more (but not all) infinitely large structures.
67
68 - Derived instances for types with no constructors now have appropriate
69   arities: they take all their arguments before producing errors. This may not
70   be terribly important in practice, but it seems like the right thing to do.
71   Previously, we generated ::
72
73       (==) = error ...
74
75 Now we generate ::
76
77       _ == _ = error ...
78
79 - Lots of other bugs. See `Trac
80    <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>`_
81    for a complete list.
82
83 Runtime system
84 ~~~~~~~~~~~~~~
85
86 - Function ``hs_add_root()`` was removed. It was a no-op since GHC-7.2.1
87   where module initialisation stopped requiring a call to ``hs_add_root()``.
88
89 Template Haskell
90 ~~~~~~~~~~~~~~~~
91
92 ``ghc`` library
93 ~~~~~~~~~~~~~~~