.. _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`` 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.