users-guide: Update release notes and language extensions
[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 Compiler
74 ~~~~~~~~
75
76 - GHC now no longer adds the current file's directory as a general include path
77   calling the C compiler. Instead we use :ghc-flag:`-iquote` to only add it as
78   an include path for `#include ""`. See :ghc-ticket:`14312`.
79
80 - GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.
81
82 - The code-generation effects of :ghc-flag:`-dynamic` can now be
83   enabled independently by the flag
84   :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
85   need this, you don't need it.
86
87 Runtime system
88 ~~~~~~~~~~~~~~
89
90 - The GHC runtime linker now prefers user shared libraries above system ones.
91   When extra search directories are specified these are searched before anything
92   else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
93   ``-L/mingw64/lib``).
94
95 - The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
96   searches ``LD_LIBRARY_PATH``.
97
98 - The GHC runtime on Windows is no longer constrained by MAX_PATH.
99
100 Template Haskell
101 ~~~~~~~~~~~~~~~~
102
103
104 ``ghc`` library
105 ~~~~~~~~~~~~~~~
106
107
108 ``base`` library
109 ~~~~~~~~~~~~~~~~
110
111 - ``($!)`` is now representation-polymorphic like ``($)``.
112
113 - The module ``Data.Functor.Contravariant`` has been moved from the
114   ``contravariant`` package into base. All the other modules in
115   ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
116   have not been moved to ``base``, and they still reside in ``contravariant``.
117
118
119 Build system
120 ~~~~~~~~~~~~
121
122 Windows Paths
123 ~~~~~~~~~~~~~
124
125 Windows paths are not all the same. The different kinds of paths each have
126 different meanings. The MAX_PATH limitation is not a limitation of the Operating
127 System nor the File System. It is a limitation of the default namespace enforced
128 by the Win32 API for backwards compatibility.
129
130 The NT Kernel however allows you ways to opt out of this path preprocessing by
131 the Win32 APIs. This is done by explicitly using the desired namespace in the
132 PATH.
133
134 The namespaces are:
135
136  - file namespace: \\?\
137  - device namespace: \\.\
138  - nt namespace: \
139
140 Each of these turn off Path processing completely by the Win32 API and the paths
141 are passed untouched to the filesystem.
142
143 Paths with a drive letter are `legacy` paths. The drive letters are actually
144 meaningless to the kernel. Just like Unix operating systems, drive letters are
145 just a mount point. You can view your mount points by using the `mountvol`
146 command.
147
148 The Haskell I/O manager will now automatically promote paths in the legacy
149 format to Win32 file namespace. By default the I/O manager will do two things to
150 your paths:
151
152   - replace / with \\
153   - expand relative paths to absolute paths
154
155 If you want to opt out of all preprocessing just expliticly use namespaces in
156 your paths. Due to this change, if you need to open raw devices (e.g. COM ports)
157 you need to use the device namespace explicitly. (e.g. `\\.\COM1`). GHC and
158 Haskell programs in general no longer support opening devices in the `legacy`
159 format.
160
161 See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx for
162 more details.
163
164
165 Included libraries
166 ------------------
167
168 The package database provided with this distribution also contains a number of
169 packages other than GHC itself. See the changelogs provided with these packages
170 for further change information.
171
172 .. ghc-package-list::
173
174     libraries/array/array.cabal:             Dependency of ``ghc`` library
175     libraries/base/base.cabal:               Core library
176     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
177     libraries/bytestring/bytestring.cabal:   Deppendency of ``ghc`` library
178     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
179     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
180     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
181     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
182     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
183     compiler/ghc.cabal:                      The compiler itself
184     libraries/ghci/ghci.cabal:               The REPL interface
185     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
186     libraries/ghc-compact/ghc-compact.cabal: Core library
187     libraries/ghc-prim/ghc-prim.cabal:       Core library
188     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
189     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
190     libraries/integer-gmp/integer-gmp.cabal: Core library
191     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
192     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
193     libraries/process/process.cabal:         Dependency of ``ghc`` library
194     libraries/template-haskell/template-haskell.cabal:     Core library
195     libraries/text/text.cabal:               Dependency of ``Cabal`` library
196     libraries/time/time.cabal:               Dependency of ``ghc`` library
197     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
198     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
199     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
200     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable