testsuite: Increase acceptance window of T4801
[ghc.git] / docs / users_guide / 8.6.1-notes.rst
1 .. _release-8-6-1:
2
3 Release notes for version 8.6.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.4.1 release.
9
10
11 Highlights
12 ----------
13
14 The highlights, since the 8.4.1 release, are:
15
16 - Programs are no longer constrained by the Windows ``MAX_PATH`` file path
17   length limit. The file path limit is now approximately 32,767 characters. Note
18   that GHC itself is still somewhat limited due to GCC not supporting file
19   namespaced paths. Paths that are passed directly to the compiler, linker or
20   other GNU tools are currently still constrained. See :ref:`windows-file-paths`
21   for details.
22
23 - Many, many bug fixes.
24
25
26 Full details
27 ------------
28
29 Language
30 ~~~~~~~~
31
32 - Use of quantified type variables in constraints is now allowed via the
33   :extension:`QuantifiedConstraints` language extension. This long-awaited feature
34   enables users to encode significantly more precision in their types. For instance,
35   the common ``MonadTrans`` typeclass could now make the expectation that an
36   applied transformer is must be a ``Monad`` ::
37
38       class (forall m. Monad m => Monad (t m)) => MonadTrans t where {- ... -}
39
40   Additionally, quantification can enable terminating instance resolution
41   where this previously was not possible. See :ref:`quantified-constraints` for
42   details.
43
44 - A new :extension:`DerivingVia` language extension has been added which allows
45   the use of the ``via`` deriving strategy. For instance: ::
46
47     newtype T = MkT Int
48       deriving Monoid via (Sum Int)
49
50   See :ref:`deriving-via` for more information.
51
52 - A new :extension:`StarIsType` language extension has been added which controls
53   whether ``*`` is parsed as ``Data.Kind.Type`` or a regular type operator.
54   :extension:`StarIsType` is enabled by default.
55
56 - GHC now permits the use of a wildcard type as the context of a standalone
57   ``deriving`` declaration with the use of the
58   :extension:`PartialTypeSignatures` language extension. For instance, this
59   declaration: ::
60
61     deriving instance _ => Eq (Foo a)
62
63   Denotes a derived ``Eq (Foo a)`` instance, where the context is inferred in
64   much the same way as ordinary ``deriving`` clauses do.
65   See :ref:`partial-type-signatures`.
66
67 - Data declarations with empty ``where`` clauses are no longer valid without the
68   extension :extension:`GADTSyntax` enabled. For instance, consider the
69   following, ::
70
71       data T where
72
73   The grammar is invalid in Haskell2010. Previously it could be compiled successfully
74   without ``GADTs``. As of GHC 8.6.1, this is a parse error.
75
76 - Incomplete patterns warning :ghc-flag:`-Wincomplete-patterns` is extended to
77   guards in pattern bindings and ``if`` alternatives of :extension:`MultiWayIf`.
78   For instance, consider the following, ::
79
80       foo :: Bool -> Int
81       foo b = if | b -> 1
82
83   In GHC 8.6.1, it will raise the warning: ::
84
85       <interactive>:2:12: warning: [-Wincomplete-patterns]
86           Pattern match(es) are non-exhaustive
87           In a multi-way if alternative:
88               Guards do not cover entire pattern space
89
90   See :ghc-ticket:`14773`.
91
92 - Scoped type variables now work in default methods of class declarations
93   and in pattern synonyms in Template Haskell. See :ghc-ticket:`14885`.
94
95 - ``do`` expressions, lambda expressions, etc. to be directly used as
96   a function argument, enabled with :extension:`BlockArguments`.
97   See :ref:`More liberal syntax for function arguments <block-arguments>`
98   for the full details.
99
100 - Underscores in numeric literals (e.g. ``1_000_000``), enabled with
101   :extension:`NumericUnderscores`.
102   See :ref:`Numeric underscores <numeric-underscores>`
103   for the full details.
104
105 - CUSKs now require all kind variables to be explicitly quantified. This was
106   already the case with :extension:`TypeInType`, but now :extension:`PolyKinds`
107   also exhibits this behavior. This means that the following example is no
108   longer considered to have a CUSK::
109
110    data T1 :: k -> Type       -- No CUSK: `k` is not explicitly quantified
111
112 - Functionality of :extension:`TypeInType` has been subsumed by
113   :extension:`PolyKinds`, and it is now merely a shorthand for
114   :extension:`PolyKinds`, :extension:`DataKinds`, and :extension:`NoStarIsType`.
115   The users are advised to avoid :extension:`TypeInType` due to its misleading
116   name: the ``Type :: Type`` axiom holds regardless of whether it is enabled.
117
118 - GHC has become more diligent about catching illegal uses of kind polymorphism.
119   For instance, GHC 8.4 would accept the following without the use of
120   :extension:`PolyKinds`::
121
122     f :: forall k (a :: k). Proxy a
123     f = Proxy
124
125   This is now an error unless :extension:`PolyKinds` is enabled.
126
127 - The plugin mechanism has been extended to allow plugins to run between frontend
128   phases. Of particular note are the parser and typechecker plugins which run
129   after parsing and typechecking have completed. Collectively, these new extension
130   points are called :ref:`source plugins <source-plugins>`.
131         
132 - Type literals now could be used in type class instances without the extension
133   :extension:`FlexibleInstances`.
134
135   See :ghc-ticket:`13833`.
136
137 - :extension:`MonadFailDesugaring` is now enabled by default. See
138   `MonadFail Proposal (MFP)
139   <https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail>`__
140   for more details.
141
142 Compiler
143 ~~~~~~~~
144
145 - GHC now no longer adds the current file's directory as a general include path
146   calling the C compiler. Instead we use ``-iquote`` to only add it as
147   an include path for `#include ""`. See :ghc-ticket:`14312`.
148
149 - GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.
150
151 - GHC now does significantly more constant folding in its core-to-core optimiser.
152   This will result in significantly better code being generated for some
153   programs. See :ghc-ticket:`9136`.
154
155 - GHC now offers significantly more information about typed holes such as valid
156   hole fits and refinement hole fits. See :ref:`Valid Hole Fits <typed-hole-valid-hole-fits>`
157   for more information.
158
159 - The code-generation effects of :ghc-flag:`-dynamic` can now be
160   enabled independently by the flag
161   :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
162   need this, you don't need it.
163
164 - :ghc-flag:`-Wcompat` now includes :ghc-flag:`-Wimplicit-kind-vars` to
165   provide early detection of breakage that will be caused by implementation of
166   `GHC proposal #24
167   <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst>`__
168   in a future release.
169
170 Plugins
171 ~~~~~~~
172
173 - GHC's plugin mechanism now offers plugin authors control over their plugin's
174   effect on recompilation checking. Specifically the ``Plugin`` record name has
175   a new field ::
176
177     data Plugin = Plugin {
178         pluginRecompile :: [CommandLineOption] -> IO PluginRecompile
179       , {- ... -}
180       }
181
182     data PluginRecompile = ForceRecompile | NoForceRecompile | MaybeRecompile Fingerprint
183
184   Plugin based on ``defaultPlugin`` will have their previous recompilation
185   behavior (``ForceRecompile``) preserved. However, plugins that are "pure" are
186   encouraged to override this to either ``NoForceRecompile`` or ``MaybeRecompile``.
187   See :ref:`plugin_recompilation` for details.
188
189 - GHC now provides a class of new plugins: source plugins. These plugins can
190   inspect and modify a variety of intermediate representations used by the
191   compiler's frontend. These include:
192
193     * The ability to modify the parser output
194     * The ability to inspect the renamer output
195     * The ability to modify the typechecked AST
196     * The ability to modify Template Haskell splices
197     * The ability to modify interface files as they are loaded
198
199   See :ref:`source-plugins` for details.
200
201 GHCi
202 ~~~~
203
204 - Added an experimental :ghci-cmd:`:doc` command that displays the
205   documentation for a declaration.
206
207 Runtime system
208 ~~~~~~~~~~~~~~
209
210 - The GHC runtime linker now prefers user shared libraries above system ones.
211   When extra search directories are specified these are searched before anything
212   else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
213   ``-L/mingw64/lib``).
214
215 - The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
216   searches ``LD_LIBRARY_PATH``.
217
218 - The GHC runtime on Windows is no longer constrained by the ``MAX_PATH`` file path
219   length limitation. See :ref:`windows-file-paths`.
220
221 - The runtime now allows use of the :rts-flag:`-hT` profiling variety on
222   programs built with :ghc-flag:`-prof`.
223
224 - The STM assertions mechanism (namely the ``always`` and ``alwaysSucceeds``
225   functions) has been removed. This happened a bit earlier than proposed in the
226   deprecation pragma included in GHC 8.4, but due to community feedback we
227   decided to move ahead with the early removal.
228
229 Template Haskell
230 ~~~~~~~~~~~~~~~~
231
232 ``ghc`` library
233 ~~~~~~~~~~~~~~~
234
235
236 ``base`` library
237 ~~~~~~~~~~~~~~~~
238
239 - ``($!)`` is now representation-polymorphic like ``($)``.
240
241 - The module ``Data.Functor.Contravariant`` has been moved from the
242   ``contravariant`` package into ``base``. All the other modules in
243   ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
244   have not been moved to ``base``, and they still reside in ``contravariant``.
245
246 ``ghc-prim`` library
247 ~~~~~~~~~~~~~~~~~~~~
248
249 -  Version number 0.5.2.1 (was 0.5.2.0)
250
251 -  Added new ``addWordC#`` operation for unsigned addition with carry.
252
253 Build system
254 ~~~~~~~~~~~~
255
256
257 Included libraries
258 ------------------
259
260 The package database provided with this distribution also contains a number of
261 packages other than GHC itself. See the changelogs provided with these packages
262 for further change information.
263
264 .. ghc-package-list::
265
266     libraries/array/array.cabal:             Dependency of ``ghc`` library
267     libraries/base/base.cabal:               Core library
268     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
269     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
270     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
271     libraries/containers/containers/containers.cabal:   Dependency of ``ghc`` library
272     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
273     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
274     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
275     compiler/ghc.cabal:                      The compiler itself
276     libraries/ghci/ghci.cabal:               The REPL interface
277     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
278     libraries/ghc-compact/ghc-compact.cabal: Core library
279     libraries/ghc-prim/ghc-prim.cabal:       Core library
280     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
281     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
282     libraries/integer-gmp/integer-gmp.cabal: Core library
283     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
284     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
285     libraries/process/process.cabal:         Dependency of ``ghc`` library
286     libraries/template-haskell/template-haskell.cabal:     Core library
287     libraries/text/text.cabal:               Dependency of ``Cabal`` library
288     libraries/time/time.cabal:               Dependency of ``ghc`` library
289     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
290     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
291     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
292     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable