.. _release-8-8-1: Release notes for version 8.8.1 =============================== The significant changes to the various parts of the compiler are listed in the following sections. There have also been numerous bug fixes and performance improvements over the 8.6.1 release. Highlights ---------- The highlights, since the 8.6.1 release, are: - Many, many bug fixes. - A new code layout algorithm for x86. Full details ------------ Language ~~~~~~~~ - :extension:`ScopedTypeVariables`: The type variable that a type signature on a pattern can bring into scope can now stand for arbitrary types. Previously, they could only stand in for other type variables, but this restriction was deemed unnecessary in `GHC proposal #29 `__. Also see :ghc-ticket:`15050`. - The pattern-match coverage checker now checks for cases that are unreachable due to constructors have strict argument types. For instance, in the following example: :: data K = K1 | K2 !Void f :: K -> () f K1 = () ``K2`` cannot be matched on in ``f``, since it is impossible to construct a terminating value of type ``Void``. Accordingly, GHC will not warn about ``K2`` (whereas previous versions of GHC would). - ``(!)`` is now a valid type operator: :: type family a ! b - An existential context no longer requires parenthesization: :: class a + b data D1 = forall a b. (a + b) => D1 a b data D2 = forall a b. a + b => D2 a b -- now allowed - ``{-# UNPACK #-}`` annotation no longer requires parenthesization: :: data T = MkT1 { a :: {-# UNPACK #-} (Maybe Int && Bool) } | MkT2 { a :: {-# UNPACK #-} Maybe Int && Bool } -- now allowed data G where MkG1 :: {-# UNPACK #-} (Maybe Int && Bool) -> G MkG2 :: {-# UNPACK #-} Maybe Int && Bool -> G -- now allowed - The requirement that kind signatures always be parenthesized has been relaxed. For instance, it is now permissible to write ``Proxy '(a :: A, b :: B)`` (previous GHC versions required extra parens: ``Proxy '((a :: A), (b :: B))``). - :ghc-flag:`-Woverflowed-literals` checks all literals. Previously, it would only inspect boxed expression literals. - :ghc-flag:`-Wempty-enumerations` now also works for ``Numeric.Natural``. Compiler ~~~~~~~~ - New :ghc-flag:`-keep-hscpp-files` to keep the output of the CPP pre-processor. - The :ghc-flag:`-Wcompat` warning group now includes :ghc-flag:`-Wstar-is-type`. - The :ghc-flag:`-fllvm-pass-vectors-in-regs` flag is now deprecated as vector arguments are now passed in registers by default. - The :ghc-flag:`-fblock-layout-cfg` flag enables a new code layout algorithm on x86. This is enabled by default at :ghc-flag:`-O` and :ghc-flag:`-O2`. - The deprecated ghc-flag ``-Wamp`` has been removed. - Add new :ghc-flag:`-Wmissing-deriving-strategies` flag that warns users when they are not taking advantage of :extension:`DerivingStrategies`. The warning is supplied at each ``deriving`` site. Runtime system ~~~~~~~~~~~~~~ - Add and document new FFI functions ``hs_lock_stable_ptr_table`` and ``hs_unlock_stable_ptr_table``. These replace the undocumented functions ``hs_lock_stable_tables`` and ``hs_unlock_stable_tables``, respectively. The latter should now be considered deprecated. - Document the heretofore undocumented FFI function ``hs_free_stable_ptr_unsafe``, used in conjunction with manual locking and unlocking. - The runtime linker on Windows has been overhauled to properly handle section alignment, lower the amount of wasted memory and lower the amount of in use memory. See :ghc-ticket:`13617`. Note that committed memory may be slightly higher. - The output filename used for :ref:`eventlog output ` can now be specified with the :rts-flag:`-ol` flag. - Add support for generating a new type of output: extended interfaces files. Generation of these files, which sport a ``.hie`` suffix, is enabled via the ``-fwrite-ide-info`` flag. See :ref:`hie-options` for more information. Template Haskell ~~~~~~~~~~~~~~~~ - Reifying type classes no longer shows redundant class type variables and contexts in the type signature of each class method. For instance, reifying the following class: :: class C a where method :: a Used to produce the following: :: class C a where method :: forall a. C a => a Where the ``forall a. C a =>`` part is entirely redundant. This part is no longer included when reifying ``C``. It's possible that this may break some code which assumes the existence of ``forall a. C a =>``. - Template Haskell now supports implicit parameters and recursive do. - Template Haskell splices can now embed assembler source (:ghc-ticket:`16180`) ``ghc-prim`` library ~~~~~~~~~~~~~~~~~~~~ - GHC now exposes a new primop, ``traceBinaryEvent#``. This primop writes eventlog events similar to ``traceBinaryEvent#`` but allows the user to pass the event payload as a binary blob instead of a ``String``. - The ``StableName#`` type parameter now has a phantom role instead of a representational one. There is really no reason to care about the type of the underlying object. ``ghc`` library ~~~~~~~~~~~~~~~ ``base`` library ~~~~~~~~~~~~~~~~ - Support the characters from recent versions of Unicode (up to v. 12) in literals (see :ghc-ticket:`5518`). - The ``StableName`` type parameter now has a phantom role instead of a representational one. There is really no reason to care about the type of the underlying object. - The functions ``zipWith3`` and ``zip3`` in ``Prelude`` can now fuse, together with ``zipWith4`` to ``zipWith7`` as well as their tuple counterparts in ``Data.List``. Build system ~~~~~~~~~~~~ - Configure: Add ALEX and HAPPY variables to explicitly set the alex and happy programs to use. - Configure: Deprecate --with-ghc=ARG in favour of the GHC variable. Included libraries ------------------ The package database provided with this distribution also contains a number of packages other than GHC itself. See the changelogs provided with these packages for further change information. .. ghc-package-list:: libraries/array/array.cabal: Dependency of ``ghc`` library libraries/base/base.cabal: Core library libraries/binary/binary.cabal: Dependency of ``ghc`` library libraries/bytestring/bytestring.cabal: Dependency of ``ghc`` library libraries/Cabal/Cabal/Cabal.cabal: Dependency of ``ghc-pkg`` utility libraries/containers/containers.cabal: Dependency of ``ghc`` library libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library libraries/directory/directory.cabal: Dependency of ``ghc`` library libraries/filepath/filepath.cabal: Dependency of ``ghc`` library compiler/ghc.cabal: The compiler itself libraries/ghci/ghci.cabal: The REPL interface libraries/ghc-boot/ghc-boot.cabal: Internal compiler library libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library libraries/ghc-compact/ghc-compact.cabal: Core library libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library libraries/ghc-prim/ghc-prim.cabal: Core library libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable libraries/integer-gmp/integer-gmp.cabal: Core library libraries/libiserv/libiserv.cabal: Internal compiler library libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library libraries/process/process.cabal: Dependency of ``ghc`` library libraries/stm/stm.cabal: Dependency of ``haskeline`` library libraries/template-haskell/template-haskell.cabal: Core library libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library libraries/text/text.cabal: Dependency of ``Cabal`` library libraries/time/time.cabal: Dependency of ``ghc`` library libraries/transformers/transformers.cabal: Dependency of ``ghc`` library libraries/unix/unix.cabal: Dependency of ``ghc`` library libraries/Win32/Win32.cabal: Dependency of ``ghc`` library libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable