summaryrefslogtreecommitdiff
path: root/docs/users_guide/8.6.1-notes.rst
blob: 6300a3f3e4185664cc157b164f1f89b915907550 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
.. _release-8-6-1:

Release notes for version 8.6.1
===============================

The significant changes to the various parts of the compiler are listed in the
following sections. There have also been numerous bug fixes and performance
improvements over the 8.4.1 release.


Highlights
----------

The highlights, since the 8.4.1 release, are:

- Many, many bug fixes.


Full details
------------

Language
~~~~~~~~
- GHC now permits the use of a wildcard type as the context of a standalone
  ``deriving`` declaration with the use of the
  :extension:`PartialTypeSignatures` language extension. For instance, this
  declaration: ::

    deriving instance _ => Eq (Foo a)

  Denotes a derived ``Eq (Foo a)`` instance, where the context is inferred in
  much the same way as ordinary ``deriving`` clauses do.
  See :ref:`partial-type-signatures`.

- Data declarations with empty ``where`` clauses are no longer valid without the
  extension :extension:`GADTSyntax` enabled. For instance, consider the
  following, ::

      data T where

  The grammar is invalid in Haskell2010. Previously it could be compiled successfully
  without ``GADTs``. As of GHC 8.6.1, this is a parse error.

- Incomplete patterns warning :ghc-flag:`-Wincomplete-patterns` is extended to
  guards in pattern bindings and ``if`` alternatives of :extension:`MultiWayIf`.
  For instance, consider the following, ::

      foo :: Bool -> Int
      foo b = if | b -> 1

  In GHC 8.6.1, it will raise the warning: ::

      <interactive>:2:12: warning: [-Wincomplete-patterns]
          Pattern match(es) are non-exhaustive
          In a multi-way if alternative:
              Guards do not cover entire pattern space

  See :ghc-ticket:`14773`.

- Scoped type variables now work in default methods of class declarations
  and in pattern synonyms in Template Haskell. See :ghc-ticket:`14885`.

Compiler
~~~~~~~~

- GHC now no longer adds the current file's directory as a general include path
  calling the C compiler. Instead we use :ghc-flag:`-iquote` to only add it as
  an include path for `#include ""`. See :ghc-ticket:`14312`.

- GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.

- The code-generation effects of :ghc-flag:`-dynamic` can now be
  enabled independently by the flag
  :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
  need this, you don't need it.

Runtime system
~~~~~~~~~~~~~~

- The GHC runtime linker now prefers user shared libraries above system ones.
  When extra search directories are specified these are searched before anything
  else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
  ``-L/mingw64/lib``).

- The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
  searches ``LD_LIBRARY_PATH``.

- The GHC runtime on Windows is no longer constrained by MAX_PATH.

Template Haskell
~~~~~~~~~~~~~~~~


``ghc`` library
~~~~~~~~~~~~~~~


``base`` library
~~~~~~~~~~~~~~~~

- ``($!)`` is now representation-polymorphic like ``($)``.

- The module ``Data.Functor.Contravariant`` has been moved from the
  ``contravariant`` package into base. All the other modules in
  ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
  have not been moved to ``base``, and they still reside in ``contravariant``.


Build system
~~~~~~~~~~~~

Windows Paths
~~~~~~~~~~~~~

Windows paths are not all the same. The different kinds of paths each have
different meanings. The MAX_PATH limitation is not a limitation of the Operating
System nor the File System. It is a limitation of the default namespace enforced
by the Win32 API for backwards compatibility.

The NT Kernel however allows you ways to opt out of this path preprocessing by
the Win32 APIs. This is done by explicitly using the desired namespace in the
PATH.

The namespaces are:

 - file namespace: \\?\
 - device namespace: \\.\
 - nt namespace: \

Each of these turn off Path processing completely by the Win32 API and the paths
are passed untouched to the filesystem.

Paths with a drive letter are `legacy` paths. The drive letters are actually
meaningless to the kernel. Just like Unix operating systems, drive letters are
just a mount point. You can view your mount points by using the `mountvol`
command.

The Haskell I/O manager will now automatically promote paths in the legacy
format to Win32 file namespace. By default the I/O manager will do two things to
your paths:

  - replace / with \\
  - expand relative paths to absolute paths

If you want to opt out of all preprocessing just expliticly use namespaces in
your paths. Due to this change, if you need to open raw devices (e.g. COM ports)
you need to use the device namespace explicitly. (e.g. `\\.\COM1`). GHC and
Haskell programs in general no longer support opening devices in the `legacy`
format.

See https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx for
more details.


Included libraries
------------------

The package database provided with this distribution also contains a number of
packages other than GHC itself. See the changelogs provided with these packages
for further change information.

.. ghc-package-list::

    libraries/array/array.cabal:             Dependency of ``ghc`` library
    libraries/base/base.cabal:               Core library
    libraries/binary/binary.cabal:           Dependency of ``ghc`` library
    libraries/bytestring/bytestring.cabal:   Deppendency of ``ghc`` library
    libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
    libraries/containers/containers.cabal:   Dependency of ``ghc`` library
    libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
    libraries/directory/directory.cabal:     Dependency of ``ghc`` library
    libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
    compiler/ghc.cabal:                      The compiler itself
    libraries/ghci/ghci.cabal:               The REPL interface
    libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
    libraries/ghc-compact/ghc-compact.cabal: Core library
    libraries/ghc-prim/ghc-prim.cabal:       Core library
    libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
    libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
    libraries/integer-gmp/integer-gmp.cabal: Core library
    libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
    libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
    libraries/process/process.cabal:         Dependency of ``ghc`` library
    libraries/template-haskell/template-haskell.cabal:     Core library
    libraries/text/text.cabal:               Dependency of ``Cabal`` library
    libraries/time/time.cabal:               Dependency of ``ghc`` library
    libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
    libraries/unix/unix.cabal:               Dependency of ``ghc`` library
    libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
    libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable