8920ea81328886c94efca0d6e54e5014299a225c
[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 - Many, many bug fixes.
17
18
19 Full details
20 ------------
21
22 Language
23 ~~~~~~~~
24 - GHC now permits the use of a wildcard type as the context of a standalone
25   ``deriving`` declaration with the use of the
26   :extension:`PartialTypeSignatures` language extension. For instance, this
27   declaration: ::
28
29     deriving instance _ => Eq (Foo a)
30
31   Denotes a derived ``Eq (Foo a)`` instance, where the context is inferred in
32   much the same way as ordinary ``deriving`` clauses do.
33   See :ref:`partial-type-signatures`.
34
35 - Data declarations with empty ``where`` clauses are no longer valid without the
36   extension :extension:`GADTSyntax` enabled. For instance, consider the
37   following, ::
38
39       data T where
40
41   The grammar is invalid in Haskell2010. Previously it could be compiled successfully
42   without ``GADTs``. As of GHC 8.6.1, this is a parse error.
43
44 - Incomplete patterns warning :ghc-flag:`-Wincomplete-patterns` is extended to
45   guards in pattern bindings and ``if`` alternatives of :extension:`MultiWayIf`.
46   For instance, consider the following, ::
47
48       foo :: Bool -> Int
49       foo b = if | b -> 1
50
51   In GHC 8.6.1, it will raise the warning: ::
52
53       <interactive>:2:12: warning: [-Wincomplete-patterns]
54           Pattern match(es) are non-exhaustive
55           In a multi-way if alternative:
56               Guards do not cover entire pattern space
57
58   See :ghc-ticket:`14773`.
59
60 - Scoped type variables now work in default methods of class declarations
61   and in pattern synonyms in Template Haskell. See :ghc-ticket:`14885`.
62
63 - ``do`` expressions, lambda expressions, etc. to be directly used as
64   a function argument, enabled with :extension:`BlockArguments`.
65   See :ref:`More liberal syntax for function arguments <block-arguments>`
66   for the full details.
67
68 - Underscores in numeric literals (e.g. ``1_000_000``), enabled with
69   :extension:`NumericUnderscores`.
70   See :ref:`Numeric underscores <numeric-underscores>`
71   for the full details.
72
73 - GHC is now more diligent about catching illegal uses of kind polymorphism.
74   For instance, this used to be accepted without :extension:`PolyKinds`: ::
75
76     class C a where
77       c :: Proxy (x :: a)
78
79   Despite the fact that ``a`` is used as a kind variable in the type signature
80   for ``c``. This is now an error unless :extension:`PolyKinds` is explicitly
81   enabled.
82
83   Moreover, GHC 8.4 would accept the following without the use of
84   :extension:`TypeInType` (or even :extension:`PolyKinds`!): ::
85
86     f :: forall k (a :: k). Proxy a
87     f = Proxy
88
89   Despite the fact that ``k`` is used as both a type and kind variable. This is
90   now an error unless :extension:`TypeInType` is explicitly enabled.
91
92 Compiler
93 ~~~~~~~~
94
95 - GHC now no longer adds the current file's directory as a general include path
96   calling the C compiler. Instead we use :ghc-flag:`-iquote` to only add it as
97   an include path for `#include ""`. See :ghc-ticket:`14312`.
98
99 - GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.
100
101 - GHC now does significantly more constant folding in its core-to-core optimiser.
102   This will result in significantly better code being generated for some
103   programs. See :ghc-ticket:`9136`.
104
105 - The code-generation effects of :ghc-flag:`-dynamic` can now be
106   enabled independently by the flag
107   :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
108   need this, you don't need it.
109
110 Runtime system
111 ~~~~~~~~~~~~~~
112
113 - The GHC runtime linker now prefers user shared libraries above system ones.
114   When extra search directories are specified these are searched before anything
115   else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
116   ``-L/mingw64/lib``).
117
118 - The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
119   searches ``LD_LIBRARY_PATH``.
120
121 - The GHC runtime on Windows is no longer constrained by ``MAX_PATH``.
122
123 - The runtime now allows use of the :rts-flag:`-hT` profiling variety on
124   programs built with :ghc-flag:`-prof`.
125
126 Template Haskell
127 ~~~~~~~~~~~~~~~~
128
129
130 ``ghc`` library
131 ~~~~~~~~~~~~~~~
132
133
134 ``base`` library
135 ~~~~~~~~~~~~~~~~
136
137 - ``($!)`` is now representation-polymorphic like ``($)``.
138
139 - The module ``Data.Functor.Contravariant`` has been moved from the
140   ``contravariant`` package into ``base``. All the other modules in
141   ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
142   have not been moved to ``base``, and they still reside in ``contravariant``.
143
144
145 Build system
146 ~~~~~~~~~~~~
147
148 Windows Paths
149 ~~~~~~~~~~~~~
150
151 Windows paths are not all the same. The different kinds of paths each have
152 different meanings. The ``MAX_PATH`` limitation is not a limitation of the Operating
153 System nor the File System. It is a limitation of the default namespace enforced
154 by the Win32 API for backwards compatibility.
155
156 The NT Kernel however allows you ways to opt out of this path preprocessing by
157 the Win32 APIs. This is done by explicitly using the desired namespace in the
158 PATH.
159
160 The namespaces are:
161
162  - file namespace: ``\\?\``
163  - device namespace: ``\\.\``
164  - nt namespace: ``\``
165
166 Each of these turn off Path processing completely by the Win32 API and the paths
167 are passed untouched to the filesystem.
168
169 Paths with a drive letter are `legacy` paths. The drive letters are actually
170 meaningless to the kernel. Just like Unix operating systems, drive letters are
171 just a mount point. You can view your mount points by using the `mountvol`
172 command.
173
174 The Haskell I/O manager will now automatically promote paths in the legacy
175 format to Win32 file namespace. By default the I/O manager will do two things to
176 your paths:
177
178   - replace ``/`` with ``\\``
179   - expand relative paths to absolute paths
180
181 If you want to opt out of all preprocessing just expliticly use namespaces in
182 your paths. Due to this change, if you need to open raw devices (e.g. COM ports)
183 you need to use the device namespace explicitly. (e.g. `\\.\COM1`). GHC and
184 Haskell programs in general no longer support opening devices in the `legacy`
185 format.
186
187 See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx for
188 more details.
189
190
191 Included libraries
192 ------------------
193
194 The package database provided with this distribution also contains a number of
195 packages other than GHC itself. See the changelogs provided with these packages
196 for further change information.
197
198 .. ghc-package-list::
199
200     libraries/array/array.cabal:             Dependency of ``ghc`` library
201     libraries/base/base.cabal:               Core library
202     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
203     libraries/bytestring/bytestring.cabal:   Deppendency of ``ghc`` library
204     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
205     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
206     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
207     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
208     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
209     compiler/ghc.cabal:                      The compiler itself
210     libraries/ghci/ghci.cabal:               The REPL interface
211     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
212     libraries/ghc-compact/ghc-compact.cabal: Core library
213     libraries/ghc-prim/ghc-prim.cabal:       Core library
214     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
215     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
216     libraries/integer-gmp/integer-gmp.cabal: Core library
217     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
218     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
219     libraries/process/process.cabal:         Dependency of ``ghc`` library
220     libraries/template-haskell/template-haskell.cabal:     Core library
221     libraries/text/text.cabal:               Dependency of ``Cabal`` library
222     libraries/time/time.cabal:               Dependency of ``ghc`` library
223     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
224     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
225     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
226     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable