blob: 04b44dd0e651c472913e84474d3bcb2766fa62bf (
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
|
.. _release-9-4-1:
Version 9.4.1
==============
``base`` library
~~~~~~~~~~~~~~~~
- ``GHC.Exts.magicDict`` has been renamed to ``withDict`` and given a more
specific type: ::
withDict :: forall {rr :: RuntimeRep} st dt (r :: TYPE rr). st -> (dt => r) -> r
Unlike ``magicDict``, ``withDict`` can be used without defining an
intermediate data type. For example, the ``withTypeable`` function from the
``Data.Typeable`` module can now be defined as: ::
withTypeable :: forall k (a :: k) rep (r :: TYPE rep). ()
=> TypeRep a -> (Typeable a => r) -> r
withTypeable rep k = withDict @(TypeRep a) @(Typeable a) rep k
Note that the explicit type applications are required, as the call to
``withDict`` would be ambiguous otherwise.
``ghc-prim`` library
~~~~~~~~~~~~~~~~~~~~
- ``GHC.Exts.mkWeak#``, ``GHC.Exts.mkWeakNoFinalizer#``, ``GHC.Exts.touch#``
and ``GHC.Exts.keepAlive#`` are now levity-polymorphic instead of
representation-polymorphic. For instance: ::
mkWeakNoFinalizer#
:: forall {l :: Levity} (a :: TYPE (BoxedRep l)) (b :: Type)
. a -> b -> State# RealWorld -> (# State# RealWorld, Weak# b #)
That is, the type signature now quantifies over a variable of type ``GHC.Exts.Levity``
instead of ``GHC.Exts.RuntimeRep``. In addition, this variable is now inferred,
instead of specified, meaning that it is no longer eligible for visible type application.
- The ``GHC.Exts.RuntimeRep`` parameter to ``GHC.Exts.raise#`` is now inferred: ::
raise# :: forall (a :: Type) {r :: RuntimeRep} (b :: TYPE r). a -> b
- ``GHC.Exts.reallyUnsafePtrEquality#`` is now levity-polymorphic: ::
reallyUnsafePtrEquality# :: forall {l :: Levity} (a :: TYPE (BoxedRep l)). a -> a -> Int#
This means that ``GHC.Exts.reallyUnsafePtrEquality#`` now works on primitive arrays,
such as ``GHC.Exts.Array#`` and ``GHC.Exts.ByteArray#``.
``ghc`` library
~~~~~~~~~~~~~~~
- A new ``GHC.Hs.Syn.Type`` module has been introduced which defines functions
for computing the ``Type`` of an ``HsExpr GhcTc`` in a pure fashion.
The ``hsLitType`` and ``hsPatType`` functions that previously lived in
``GHC.Tc.Utils.Zonk`` have been moved to this module.
|