d7ba6ed5420c206a2fd7cc38caf099d4087106e8
[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 a. 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 - GHC now permits the use of a wildcard type as the context of a standalone
53   ``deriving`` declaration with the use of the
54   :extension:`PartialTypeSignatures` language extension. For instance, this
55   declaration: ::
56
57     deriving instance _ => Eq (Foo a)
58
59   Denotes a derived ``Eq (Foo a)`` instance, where the context is inferred in
60   much the same way as ordinary ``deriving`` clauses do.
61   See :ref:`partial-type-signatures`.
62
63 - Data declarations with empty ``where`` clauses are no longer valid without the
64   extension :extension:`GADTSyntax` enabled. For instance, consider the
65   following, ::
66
67       data T where
68
69   The grammar is invalid in Haskell2010. Previously it could be compiled successfully
70   without ``GADTs``. As of GHC 8.6.1, this is a parse error.
71
72 - Incomplete patterns warning :ghc-flag:`-Wincomplete-patterns` is extended to
73   guards in pattern bindings and ``if`` alternatives of :extension:`MultiWayIf`.
74   For instance, consider the following, ::
75
76       foo :: Bool -> Int
77       foo b = if | b -> 1
78
79   In GHC 8.6.1, it will raise the warning: ::
80
81       <interactive>:2:12: warning: [-Wincomplete-patterns]
82           Pattern match(es) are non-exhaustive
83           In a multi-way if alternative:
84               Guards do not cover entire pattern space
85
86   See :ghc-ticket:`14773`.
87
88 - Scoped type variables now work in default methods of class declarations
89   and in pattern synonyms in Template Haskell. See :ghc-ticket:`14885`.
90
91 - ``do`` expressions, lambda expressions, etc. to be directly used as
92   a function argument, enabled with :extension:`BlockArguments`.
93   See :ref:`More liberal syntax for function arguments <block-arguments>`
94   for the full details.
95
96 - Underscores in numeric literals (e.g. ``1_000_000``), enabled with
97   :extension:`NumericUnderscores`.
98   See :ref:`Numeric underscores <numeric-underscores>`
99   for the full details.
100
101 - GHC is now more diligent about catching illegal uses of kind polymorphism.
102   For instance, this used to be accepted without :extension:`PolyKinds`: ::
103
104     class C a where
105       c :: Proxy (x :: a)
106
107   Despite the fact that ``a`` is used as a kind variable in the type signature
108   for ``c``. This is now an error unless :extension:`PolyKinds` is explicitly
109   enabled.
110
111   Moreover, GHC 8.4 would accept the following without the use of
112   :extension:`TypeInType` (or even :extension:`PolyKinds`!): ::
113
114     f :: forall k (a :: k). Proxy a
115     f = Proxy
116
117   Despite the fact that ``k`` is used as both a type and kind variable. This is
118   now an error unless :extension:`TypeInType` is explicitly enabled.
119
120 Compiler
121 ~~~~~~~~
122
123 - GHC now no longer adds the current file's directory as a general include path
124   calling the C compiler. Instead we use :ghc-flag:`-iquote` to only add it as
125   an include path for `#include ""`. See :ghc-ticket:`14312`.
126
127 - GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.
128
129 - GHC now does significantly more constant folding in its core-to-core optimiser.
130   This will result in significantly better code being generated for some
131   programs. See :ghc-ticket:`9136`.
132
133 - GHC now offers significantly more information about typed holes such as valid
134   hole fits and refinement hole fits. See :ref:`Valid Hole Fits <typed-hole-valid-hole-fits>`
135   for more information.
136
137 - The code-generation effects of :ghc-flag:`-dynamic` can now be
138   enabled independently by the flag
139   :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
140   need this, you don't need it.
141
142 Plugins
143 ~~~~~~~
144
145 - GHC's plugin mechanism now offers plugin authors control over their plugin's
146   effect on recompilation checking. Specifically the ``Plugin`` record name has
147   a new field ::
148
149     data Plugin = Plugin {
150         pluginRecompile :: [CommandLineOption] -> IO PluginRecompile
151       , {- ... -}
152       }
153
154     data PluginRecompile = ForceRecompile | NoForceRecompile | MaybeRecompile Fingerprint
155
156   Plugin based on ``defaultPlugin`` will have their previous recompilation
157   behavior (``ForceRecompile``) preserved. However, plugins that are "pure" are
158   encouraged to override this to either ``NoForceRecompile`` or ``MaybeRecompile``.
159   See :ref:`plugin_recompilation` for details.
160
161 - GHC now provides a class of new plugins: source plugins. These plugins can
162   inspect and modify a variety of intermediate representations used by the
163   compiler's frontend. These include:
164
165     * The ability to modify the parser output
166     * The ability to inspect the renamer output
167     * The ability to modify the typechecked AST
168     * The ability to modify Template Haskell splices
169     * The ability to modify interface files as they are loaded
170
171   See :ref:`source-plugins` for details.
172
173 GHCi
174 ~~~~
175
176 - Added an experimental :ghci-cmd:`:doc` command that displays the
177   documentation for a declaration.
178
179 Runtime system
180 ~~~~~~~~~~~~~~
181
182 - The GHC runtime linker now prefers user shared libraries above system ones.
183   When extra search directories are specified these are searched before anything
184   else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
185   ``-L/mingw64/lib``).
186
187 - The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
188   searches ``LD_LIBRARY_PATH``.
189
190 - The GHC runtime on Windows is no longer constrained by the ``MAX_PATH`` file path
191   length limitation. See :ref:`windows-file-paths`.
192
193 - The runtime now allows use of the :rts-flag:`-hT` profiling variety on
194   programs built with :ghc-flag:`-prof`.
195
196 - The STM assertions mechanism (namely the ``always`` and ``alwaysSucceeds``
197   functions) has been removed. This happened a bit earlier than proposed in the
198   deprecation pragma included in GHC 8.4, but due to community feedback we
199   decided to move ahead with the early removal.
200
201 Template Haskell
202 ~~~~~~~~~~~~~~~~
203
204 ``ghc`` library
205 ~~~~~~~~~~~~~~~
206
207
208 ``base`` library
209 ~~~~~~~~~~~~~~~~
210
211 - ``($!)`` is now representation-polymorphic like ``($)``.
212
213 - The module ``Data.Functor.Contravariant`` has been moved from the
214   ``contravariant`` package into ``base``. All the other modules in
215   ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
216   have not been moved to ``base``, and they still reside in ``contravariant``.
217
218 ``ghc-prim`` library
219 ~~~~~~~~~~~~~~~~~~~~
220
221 -  Version number 0.5.2.1 (was 0.5.2.0)
222
223 -  Added new ``addWordC#`` operation for unsigned addition with carry.
224
225 Build system
226 ~~~~~~~~~~~~
227
228
229 Included libraries
230 ------------------
231
232 The package database provided with this distribution also contains a number of
233 packages other than GHC itself. See the changelogs provided with these packages
234 for further change information.
235
236 .. ghc-package-list::
237
238     libraries/array/array.cabal:             Dependency of ``ghc`` library
239     libraries/base/base.cabal:               Core library
240     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
241     libraries/bytestring/bytestring.cabal:   Deppendency of ``ghc`` library
242     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
243     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
244     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
245     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
246     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
247     compiler/ghc.cabal:                      The compiler itself
248     libraries/ghci/ghci.cabal:               The REPL interface
249     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
250     libraries/ghc-compact/ghc-compact.cabal: Core library
251     libraries/ghc-prim/ghc-prim.cabal:       Core library
252     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
253     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
254     libraries/integer-gmp/integer-gmp.cabal: Core library
255     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
256     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
257     libraries/process/process.cabal:         Dependency of ``ghc`` library
258     libraries/template-haskell/template-haskell.cabal:     Core library
259     libraries/text/text.cabal:               Dependency of ``Cabal`` library
260     libraries/time/time.cabal:               Dependency of ``ghc`` library
261     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
262     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
263     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
264     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable