37bad13b5b7b51cb0f7893c915e4c5ad76ffec95
[ghc.git] / docs / users_guide / 8.8.1-notes.rst
1 .. _release-8-8-1:
2
3 Release notes for version 8.8.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.6.1 release.
9
10
11 Highlights
12 ----------
13
14 The highlights, since the 8.6.1 release, are:
15
16 - Many, many bug fixes.
17
18
19 Full details
20 ------------
21
22 Language
23 ~~~~~~~~
24
25 - :extension:`ScopedTypeVariables`: The type variable that a type signature on
26   a pattern can bring into scope can now stand for arbitrary types. Previously,
27   they could only stand in for other type variables, but this restriction was deemed
28   unnecessary in `GHC proposal #29 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0029-scoped-type-variables-types.rst>`__. Also see :ghc-ticket:`15050`.
29
30 - The pattern-match coverage checker now checks for cases that are unreachable
31   due to constructors have strict argument types. For instance, in the
32   following example: ::
33
34     data K = K1 | K2 !Void
35
36     f :: K -> ()
37     f K1 = ()
38
39   ``K2`` cannot be matched on in ``f``, since it is impossible to construct a
40   terminating value of type ``Void``. Accordingly, GHC will not warn about
41   ``K2`` (whereas previous versions of GHC would).
42
43 - ``(!)`` is now a valid type operator: ::
44
45       type family a ! b
46
47 - An existential context no longer requires parenthesization: ::
48
49     class a + b
50     data D1 = forall a b. (a + b) => D1 a b
51     data D2 = forall a b.  a + b  => D2 a b -- now allowed
52
53 - The requirement that kind signatures always be parenthesized has been relaxed.
54   For instance, it is now permissible to write ``Proxy '(a :: A, b :: B)``
55   (previous GHC versions required extra parens: ``Proxy '((a :: A), (b :: B))``).
56
57 Compiler
58 ~~~~~~~~
59
60 - New :ghc-flag:`-keep-hscpp-files` to keep the output of the CPP pre-processor.
61
62 - The :ghc-flag:`-Wcompat` warning group now includes :ghc-flag:`-Wstar-is-type`.
63
64 - The :ghc-flag:`-fllvm-pass-vectors-in-regs` flag is now deprecated as vector
65   arguments are now passed in registers by default.
66
67 Runtime system
68 ~~~~~~~~~~~~~~
69
70 - Add and document new FFI functions ``hs_lock_stable_ptr_table``
71   and ``hs_unlock_stable_ptr_table``. These replace the undocumented
72   functions ``hs_lock_stable_tables`` and ``hs_unlock_stable_tables``,
73   respectively. The latter should now be considered deprecated.
74
75 - Document the heretofore undocumented FFI function
76   ``hs_free_stable_ptr_unsafe``, used in conjunction with manual
77   locking and unlocking.
78
79 - The runtime linker on Windows has been overhauled to properly handle section
80   alignment, lower the amount of wasted memory and lower the amount of in use memory.
81   See :ghc-ticket:`13617`. Note that committed memory may be slightly higher.
82
83
84 Template Haskell
85 ~~~~~~~~~~~~~~~~
86
87 - Reifying type classes no longer shows redundant class type variables and
88   contexts in the type signature of each class method. For instance,
89   reifying the following class: ::
90
91     class C a where
92       method :: a
93
94   Used to produce the following: ::
95
96     class C a where
97       method :: forall a. C a => a
98
99   Where the ``forall a. C a =>`` part is entirely redundant. This part is no
100   longer included when reifying ``C``. It's possible that this may break some
101   code which assumes the existence of ``forall a. C a =>``.
102
103 - Template Haskell now supports implicit parameters and recursive do.
104
105 ``ghc-prim`` library
106 ~~~~~~~~~~~~~~~~~~~~
107
108 - GHC now exposes a new primop, ``traceBinaryEvent#``. This primop writes
109   eventlog events similar to ``traceBinaryEvent#`` but allows the user to pass
110   the event payload as a binary blob instead of a ``String``.
111
112 - The ``StableName#`` type parameter now has a phantom role instead of
113   a representational one. There is really no reason to care about the
114   type of the underlying object.
115
116 ``ghc`` library
117 ~~~~~~~~~~~~~~~
118
119
120 ``base`` library
121 ~~~~~~~~~~~~~~~~
122
123 - Support the characters from recent versions of Unicode (up to v. 12) in literals
124     (see :ghc-ticket:`5518`).
125
126 - The ``StableName`` type parameter now has a phantom role instead of
127   a representational one. There is really no reason to care about the
128   type of the underlying object.
129
130 Build system
131 ~~~~~~~~~~~~
132
133
134 Included libraries
135 ------------------
136
137 The package database provided with this distribution also contains a number of
138 packages other than GHC itself. See the changelogs provided with these packages
139 for further change information.
140
141 .. ghc-package-list::
142
143     libraries/array/array.cabal:             Dependency of ``ghc`` library
144     libraries/base/base.cabal:               Core library
145     libraries/binary/binary.cabal:           Dependency of ``ghc`` library
146     libraries/bytestring/bytestring.cabal:   Dependency of ``ghc`` library
147     libraries/Cabal/Cabal/Cabal.cabal:       Dependency of ``ghc-pkg`` utility
148     libraries/containers/containers.cabal:   Dependency of ``ghc`` library
149     libraries/deepseq/deepseq.cabal:         Dependency of ``ghc`` library
150     libraries/directory/directory.cabal:     Dependency of ``ghc`` library
151     libraries/filepath/filepath.cabal:       Dependency of ``ghc`` library
152     compiler/ghc.cabal:                      The compiler itself
153     libraries/ghci/ghci.cabal:               The REPL interface
154     libraries/ghc-boot/ghc-boot.cabal:       Internal compiler library
155     libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library
156     libraries/ghc-compact/ghc-compact.cabal: Core library
157     libraries/ghc-heap/ghc-heap.cabal:       GHC heap-walking library
158     libraries/ghc-prim/ghc-prim.cabal:       Core library
159     libraries/haskeline/haskeline.cabal:     Dependency of ``ghci`` executable
160     libraries/hpc/hpc.cabal:                 Dependency of ``hpc`` executable
161     libraries/integer-gmp/integer-gmp.cabal: Core library
162     libraries/mtl/mtl.cabal:                 Dependency of ``Cabal`` library
163     libraries/parsec/parsec.cabal:           Dependency of ``Cabal`` library
164     libraries/process/process.cabal:         Dependency of ``ghc`` library
165     libraries/stm/stm.cabal:                 Dependency of ``haskeline`` library
166     libraries/template-haskell/template-haskell.cabal:     Core library
167     libraries/terminfo/terminfo.cabal:       Dependency of ``haskeline`` library
168     libraries/text/text.cabal:               Dependency of ``Cabal`` library
169     libraries/time/time.cabal:               Dependency of ``ghc`` library
170     libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
171     libraries/unix/unix.cabal:               Dependency of ``ghc`` library
172     libraries/Win32/Win32.cabal:             Dependency of ``ghc`` library
173     libraries/xhtml/xhtml.cabal:             Dependency of ``haddock`` executable