TH: make `Lift` and `TExp` levity-polymorphic
[ghc.git] / docs / users_guide / 8.10.1-notes.rst
1 .. _release-8-10-1:
2
3 Release notes for version 8.10.1
4 ===============================
5
6 The significant changes to the various parts of the compiler are listed in the
7 following sections.
8
9
10 Highlights
11 ----------
12
13 Full details
14 ------------
15
16 Language
17 ~~~~~~~~
18
19 - Kind variables are no longer implicitly quantified when an explicit ``forall`` is used, see
20   `GHC proposal #24
21   <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst>`__.
22   :ghc-flag:`-Wimplicit-kind-vars` is now obsolete.
23
24 - Kind variables are no longer implicitly quantified in constructor declarations: ::
25
26     data T a        = T1 (S (a :: k) | forall (b::k). T2 (S b)  -- no longer accepted
27     data T (a :: k) = T1 (S (a :: k) | forall (b::k). T2 (S b)  -- still accepted
28
29 - Implicitly quantified kind variables are no longer put in front of other variables: ::
30
31     f :: Proxy (a :: k) -> Proxy (b :: j)
32
33     ghci> :t +v f   -- old order:
34     f :: forall k j (a :: k) (b :: j). Proxy a -> Proxy b
35
36     ghci> :t +v f   -- new order:
37     f :: forall k (a :: k) j (b :: j). Proxy a -> Proxy b
38
39   This is a breaking change for users of :extension:`TypeApplications`.
40
41 - In type synonyms and type family equations, free variables on the RHS are no longer
42   implicitly quantified unless used in an outermost kind annotation: ::
43
44     type T = Just (Nothing :: Maybe a)         -- no longer accepted
45     type T = Just Nothing :: Maybe (Maybe a)   -- still accepted
46
47 - GHC now parses visible, dependent quantifiers (as proposed in
48   `GHC proposal 35
49   <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0035-forall-arrow.rst>`__),
50   such as the following: ::
51
52     data Proxy :: forall k -> k -> Type
53
54   See the `section on explicit kind quantification
55   <#explicit-kind-quantification>`__ for more details.
56
57 Compiler
58 ~~~~~~~~
59
60 - Add new flags :ghc-flag:`-Wunused-record-wildcards` and
61   :ghc-flag:`-Wredundant-record-wildcards`  which warn users when they have
62   redundant or unused uses of a record wildcard match.
63
64 - Calls to `memset` and `memcpy` are now unrolled more aggressively
65   and the produced code is more efficient on `x86_64` with added
66   support for 64-bit `MOV`s. In particular, `setByteArray#` and
67   `copyByteArray#` calls that were not optimized before, now will
68   be. See :ghc-ticket:`16052`.
69
70 Runtime system
71 ~~~~~~~~~~~~~~
72
73 Template Haskell
74 ~~~~~~~~~~~~~~~~
75
76 - The ``Lift`` typeclass is now levity-polymorphic and has a ``liftTyped``
77   method. Previously disallowed instances for unboxed tuples, unboxed sums, an
78   primitive unboxed types have also been added. Finally, the code generated by
79   :ghc-flags:`-XDeriveLift` has been simplified to take advantage of expression
80   quotations.
81
82 ``ghc-prim`` library
83 ~~~~~~~~~~~~~~~~~~~~
84
85 - Add new `bitReverse#` primops that, for a `Word` of 8, 16, 32 or 64 bits,
86   reverse the order of its bits e.g. `0b110001` becomes `0b100011`.
87   These primitives use optimized machine instructions when available.
88
89 ``ghc`` library
90 ~~~~~~~~~~~~~~~
91
92 ``base`` library
93 ~~~~~~~~~~~~~~~~
94
95 Build system
96 ~~~~~~~~~~~~
97
98 Included libraries
99 ------------------