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