d3cef24c57526809f00c547ba5179f3bc639256f
[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 - Data families have been generalised a bit: a data family declaration can now
25   end with a kind variable ``k`` instead of ``Type``. Additionally, data/newtype
26   instance no longer need to list all the patterns of the family if they don't
27   wish to; this is quite like how regular datatypes with a kind signature can omit
28   some type variables.
29
30 Compiler
31 ~~~~~~~~
32
33 - The ``configure`` script now no longer accepts ``--with-TOOL`` flags (e.g.
34   ``--with-nm``, ``--with-ld``, etc.). Instead, these are taken from environment
35   variables, as is typical in ``autoconf`` scripts. For instance,
36   ``./configure --with-nm=/usr/local/bin/nm`` turns into
37   ``./configure NM=/usr/local/bin/nm``.
38
39 - Derived ``Functor``, ``Foldable``, and ``Traversable`` instances are now
40   optimized when their last type parameters have phantom roles.
41   Specifically, ::
42
43     fmap _ = coerce
44     traverse _ x = pure (coerce x)
45     foldMap _ _ = mempty
46
47   These definitions of ``foldMap`` and ``traverse`` are lazier than the ones we
48   would otherwise derive, as they may produce results without inspecting their
49   arguments at all.
50
51   See also :ref:`deriving-functor`, :ref:`deriving-foldable`, and
52   :ref:`deriving-traversable`.
53
54 - Derived ``Functor``, ``Foldable``, ``Traversable``, ``Generic``, and
55   ``Generic1`` instances now have better, and generally better-documented,
56   behaviors for types with no constructors. In particular, ::
57
58       fmap _ x = case x of
59       foldMap _ _ = mempty
60       traverse _ x = pure (case x of)
61       to x = case x of
62       to1 x = case x of
63       from x = case x of
64       from1 x = case x of
65
66   The new behavior generally leads to more useful error messages than the
67   old did, and lazier semantics for ``foldMap`` and ``traverse``.
68
69 - Derived ``Foldable`` instances now derive custom definitions for ``null``
70   instead of using the default one. This leads to asymptotically better
71   performance for recursive types not shaped like cons-lists, and allows ``null``
72   to terminate for more (but not all) infinitely large structures.
73
74 - Derived instances for types with no constructors now have appropriate
75   arities: they take all their arguments before producing errors. This may not
76   be terribly important in practice, but it seems like the right thing to do.
77   Previously, we generated ::
78
79       (==) = error ...
80
81 Now we generate ::
82
83       _ == _ = error ...
84
85 - `-fsplit-sections` is now supported on x86_64 Windows and is on by default.
86   See :ghc-ticket:`12913`.
87
88 - Configure on Windows now supports ``--enable-distro-toolchain`` which can be
89   used to build a GHC using compilers on your ``PATH`` instead of using the
90   bundled bindist. See :ghc-ticket:`13792`
91
92 - The optional ``instance`` keyword is now usable in type family instance
93   declarations. See :ghc-ticket:`13747`
94
95 - Lots of other bugs. See `Trac <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>`_
96   for a complete list.
97
98 Runtime system
99 ~~~~~~~~~~~~~~
100
101 - Function ``hs_add_root()`` was removed. It was a no-op since GHC-7.2.1
102   where module initialisation stopped requiring a call to ``hs_add_root()``.
103
104 - Proper import library support added to GHC which can handle all of the libraries produced
105   by dlltool. The limitation of them needing to be named with the suffix .dll.a is also removed.
106   See :ghc-ticket:`13606`, :ghc-ticket:`12499`, :ghc-ticket:`12498`
107
108 - The GHCi runtime linker on Windows now supports the `big-obj` file format.
109
110 Template Haskell
111 ~~~~~~~~~~~~~~~~
112
113 ``ghc`` library
114 ~~~~~~~~~~~~~~~
115
116 - hsSyn Abstract Syntax Tree (AST) is now extensible via the mechanism described in `Trees that Grow <http://www.jucs.org/jucs_23_1/trees_that_grow/jucs_23_01_0042_0062_najd.pdf>`_
117
118   The main change for users of the GHC API is that the AST is no longer indexed
119   by the type used as the identifier, but by a specific index type, ::
120
121       type GhcPs   = GhcPass 'Parsed      -- Old 'RdrName' type param
122       type GhcRn   = GhcPass 'Renamed     -- Old 'Name' type param
123       type GhcTc   = GhcPass 'Typechecked -- Old 'Id' type para,
124       type GhcTcId = GhcTc                -- Old 'TcId' type param
125
126   The simplest way to support the current GHC as well as earlier ones is to define ::
127
128       #if MIN_VERSION_ghc(8,3,0)
129       type ParseI     = GhcPs
130       type RenameI    = GhcRn
131       type TypecheckI = GhcTc
132       #else
133       type ParseI     = RdrName
134       type RenameI    = Name
135       type TypecheckI = Var
136       #endif
137
138   and then replace all hardcoded index types accordingly. For polymorphic types,
139   the constraint ::
140
141       #if MIN_VERSION_ghc(8,3,0)
142       -- |bundle up the constraints required for a trees that grow pass
143       type IsPass pass = (DataId pass, OutputableBndrId pass, SourceTextX pass)
144       else
145       type IsPass pass = (DataId pass, OutputableBndrId pass)
146       #endif
147
148   can be used.
149
150 ``base`` library
151 ~~~~~~~~~~~~~~~~
152
153 - Blank strings can now be used as values for environment variables using the
154   System.Environment.Blank module. See :ghc-ticket:`12494`