summaryrefslogtreecommitdiff
path: root/docs/users_guide/8.10.1-notes.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/users_guide/8.10.1-notes.rst')
-rw-r--r--docs/users_guide/8.10.1-notes.rst388
1 files changed, 0 insertions, 388 deletions
diff --git a/docs/users_guide/8.10.1-notes.rst b/docs/users_guide/8.10.1-notes.rst
deleted file mode 100644
index a1bf31519b..0000000000
--- a/docs/users_guide/8.10.1-notes.rst
+++ /dev/null
@@ -1,388 +0,0 @@
-.. _release-8-10-1:
-
-Version 8.10.1
-==============
-
-The significant changes to the various parts of the compiler are listed in the
-following sections.
-
-
-Highlights
-----------
-
-- The :extension:`UnliftedNewtypes` extension.
-
-Full details
-------------
-
-Language
-~~~~~~~~
-
-- Kind variables are no longer implicitly quantified when an explicit ``forall`` is used, see
- `GHC proposal #24
- <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst>`__.
- :ghc-flag:`-Wimplicit-kind-vars` is now obsolete.
-
-- Kind variables are no longer implicitly quantified in constructor declarations: ::
-
- data T a = T1 (S (a :: k)) | forall (b::k). T2 (S b) -- no longer accepted
- data T (a :: k) = T1 (S (a :: k)) | forall (b::k). T2 (S b) -- still accepted
-
-- Implicitly quantified kind variables are no longer put in front of other variables: ::
-
- f :: Proxy (a :: k) -> Proxy (b :: j)
-
- ghci> :t +v f -- old order:
- f :: forall k j (a :: k) (b :: j). Proxy a -> Proxy b
-
- ghci> :t +v f -- new order:
- f :: forall k (a :: k) j (b :: j). Proxy a -> Proxy b
-
- This is a breaking change for users of :extension:`TypeApplications`.
-
-- In type synonyms and type family equations, free variables on the RHS are no longer
- implicitly quantified unless used in an outermost kind annotation: ::
-
- type T = Just (Nothing :: Maybe a) -- no longer accepted
- type T = Just Nothing :: Maybe (Maybe a) -- still accepted
-
-- A new extension :extension:`StandaloneKindSignatures` allows one to explicitly
- specify the kind of a type constructor, as proposed in `GHC proposal #54
- <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0054-kind-signatures.rst>`__: ::
-
- type TypeRep :: forall k. k -> Type
- data TypeRep a where
- TyInt :: TypeRep Int
- TyMaybe :: TypeRep Maybe
- TyApp :: TypeRep a -> TypeRep b -> TypeRep (a b)
-
- Analogous to function type signatures, a :ref:`standalone kind signature
- <standalone-kind-signatures>` enables polymorphic recursion. This feature is
- a replacement for :extension:`CUSKs`.
-
-- GHC now parses visible, dependent quantifiers (as proposed in
- `GHC proposal 35
- <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0035-forall-arrow.rst>`__),
- such as the following: ::
-
- data Proxy :: forall k -> k -> Type
-
- See the :ref:`section on explicit kind quantification
- <explicit-kind-quantification>` for more details.
-
-- Type variables in associated type family default declarations can now be
- explicitly bound with a ``forall`` when :extension:`ExplicitForAll` is
- enabled, as in the following example: ::
-
- class C a where
- type T a b
- type forall a b. T a b = Either a b
-
- This has a couple of knock-on consequences:
-
- - Wildcard patterns are now permitted on the left-hand sides of default
- declarations, whereas they were rejected by previous versions of GHC.
-
- - It used to be the case that default declarations supported occurrences of
- left-hand side arguments with higher-rank kinds, such as in the following
- example: ::
-
- class C a where
- type T a (f :: forall k. k -> Type)
- type T a (f :: forall k. k -> Type) = f Int
-
- This will no longer work unless ``f`` is explicitly quantified with a
- ``forall``, like so: ::
-
- class C a where
- type T a (f :: forall k. k -> Type)
- type forall a (f :: forall k. k -> Type).
- T a f = f Int
-
-- A new extension :extension:`UnliftedNewtypes` that relaxes restrictions
- around what kinds of types can appear inside of the data constructor
- for a ``newtype``. This was proposed in
- `GHC proposal #13 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0013-unlifted-newtypes.rst>`__.
-
-- A new extension :extension:`ImportQualifiedPost` allows the syntax
- ``import M qualified``, that is, to annotate a module as qualified by
- writing ``qualified`` after the module name.
- This was proposed in `GHC proposal #49 <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0049-module-qualified-syntax.rst>`__.
-
-- New flag :ghc-flag:`-Wderiving-defaults` that controls a warning
- message when both :extension:`DeriveAnyClass` and
- :extension:`GeneralizedNewtypeDeriving` are enabled and no explicit
- deriving strategy is in use. The warning is enabled by default and
- has been present in earlier GHC versions but without the option of
- disabling it. For example, this code would trigger the warning: ::
-
- class C a
- newtype T a = MkT a deriving C
-
-- GHC now performs more validity checks on inferred type signatures. One
- consequence of this change is that some programs that used to be accepted
- will no longer compile without enabling the required language extensions.
- For example, in these two modules: ::
-
- {-# LANGUAGE RankNTypes #-}
- module A where
-
- foo :: (forall a. a -> a) -> b -> b
- foo f x = f x
-
- module B where
-
- import A
-
- bar = foo
-
- Notice that ``A`` enables :ghc-flag:`-XRankNTypes`, but ``B`` does not.
- Previous versions of GHC would allow ``bar`` to typecheck, even though its
- inferred type is higher-rank. GHC 8.10 will now reject this, as one must now
- enable :ghc-flag:`-XRankNTypes` in ``B`` to accept the inferred type signature.
-
-- Type family dependencies (also known as injective type families)
- sometimes now need ``-XUndecidableInstances`` in order to be
- accepted. Here is an example::
-
- type family F1 a = r | r -> a
- type family F2 a = r | r -> a
- type instance F2 [a] = Maybe (F1 a)
-
- Because GHC needs to look under a type family to see that ``a`` is determined
- by the right-hand side of ``F2``\'s equation, this now needs ``-XUndecidableInstances``.
- The problem is very much akin to its need to detect some functional dependencies.
-
-- The pattern-match coverage checker received a number of improvements wrt.
- correctness and performance.
-
- Checking against user-defined COMPLETE pragmas
- "just works" now, so that we could move away from the
- `complicated procedure for disambiguation <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#disambiguating-between-multiple-complete-pragmas>`__
- we had in place before.
-
- Previously, the checker performed really badly on some inputs and had no
- good story for graceful degradation in these situations. These situations
- should occur much less frequently now and degradation happens much more
- smoothly, while still producing useful, sound results (see
- :ghc-flag:`-fmax-pmcheck-models=⟨n⟩`).
-
-Compiler
-~~~~~~~~
-
-- Add new flags :ghc-flag:`-Wunused-record-wildcards` and
- :ghc-flag:`-Wredundant-record-wildcards` which warn users when they have
- redundant or unused uses of a record wildcard match.
-
-- Calls to ``memset`` and ``memcpy`` are now unrolled more aggressively
- and the produced code is more efficient on `x86_64` with added
- support for 64-bit ``MOV``\s. In particular, ``setByteArray#`` and
- ``copyByteArray#`` calls that were not optimized before, now will
- be. See :ghc-ticket:`16052`.
-- GHC's runtime linker no longer uses global state. This allows programs
- that use the GHC API to safely use multiple GHC sessions in a single
- process, as long as there are no native dependencies that rely on
- global state.
-
-- When loading modules that use :extension:`UnboxedTuples` or
- :extension:`UnboxedSums` into GHCi, it will now automatically enable
- :ghc-flag:`-fobject-code` for these modules and all modules they depend on.
- Before this change, attempting to load these modules into the interpreter
- would just fail, and the only convenient workaround was to enable
- :ghc-flag:`-fobject-code` for all modules. See the
- :ref:`GHCi FAQ <ghci-faq>` for further details.
-
-- The eventlog now contains events for biographical and retainer profiling.
- The biographical profiling events all appear at the end of the eventlog but
- the sample start event contains a timestamp of when the census occurred.
- The retainer profiling events are emitted using the standard events.
-
-- The eventlog now logs the cost centre stack on each sample. This enables
- the ``.prof`` file to be partially reconstructed from the eventlog.
-
-- Add new flag :ghc-flag:`-fkeep-going` which makes the compiler
- continue as far as it can despite errors.
-
-- Deprecated flag ``-fwarn-hi-shadowing`` because it was not
- implemented correctly, and appears to be largely unused. This flag
- will be removed in a later version of GHC.
-
-- Windows bindist has been updated to GCC 9.2 and binutils 2.32. These binaries have
- been patched to no longer have have the MAX_PATH limit. Windows users should no longer
- have any issues with long path names.
-
-- Introduce ``DynFlags`` plugins, that allow users to modidy the ``DynFlags``
- that GHC is going to use when processing a set of files, from plugins.
- They can be used for applying tiny configuration changes, registering hooks
- and much more. See the :ref:`user guide <dynflags_plugins>` for
- more details as well as an example.
-
-- Deprecated flag ``-fmax-pmcheck-iterations`` in favor of
- :ghc-flag:`-fmax-pmcheck-models=⟨n⟩`, which uses a completely different mechanism.
-
-- GHC now writes ``.o`` files atomically, resulting in reduced chances
- of truncated files when a build is cancelled or the computer crashes.
-
- This fixes numerous bug reports in Stack and Cabal where GHC was not
- able to recover from such situations by itself and users reported having
- to clean the build directory.
-
- Other file types are not yet written atomically.
- Users that observe related problems should report them on
- `GHC issue #14533 <https://gitlab.haskell.org/ghc/ghc/issues/14533>`__.
- This fix is part of the
- `Stack initiative to get rid of persistent build errors due to non-atomic
- file writes across the Haskell tooling ecosystem
- <https://github.com/commercialhaskell/stack/issues/4559>`__.
-
-
-GHCi
-~~~~
-
-- Added a command :ghci-cmd:`:instances` to show the class instances available for a type.
-
-- Added new debugger commands :ghci-cmd:`:disable` and :ghci-cmd:`:enable` to
- disable and re-enable breakpoints.
-
-- Improved command name resolution with option ``!``. For example, ``:k!``
- resolves to ``:kind!``.
-
-Runtime system
-~~~~~~~~~~~~~~
-
-- The runtime system linker now marks loaded code as non-writable (see
- :ghc-ticket:`14069`) on all tier-1 platforms. This is necesaary for
- out-of-the-box compatibility with OpenBSD and macOS Catalina (see
- :ghc-ticket:`17353`)
-
-- The RTS API now exposes :ref:`an interface <event_log_output_api>` to
- configure ``EventLogWriters``, allowing eventlog data to fed to sinks other
- than ``.eventlog`` files.
-
-- A new ``+RTS`` flag ``--disable-delayed-os-memory-return`` was added to make
- for accurate resident memory usage of the program as shown in memory
- usage reporting tools (e.g. the ``RSS`` column in ``top`` and ``htop``).
-
- This makes it easier to check the real memory usage of Haskell programs.
-
- Using this new flag is expected to make the program slightly slower.
-
- Without this flag, the (Linux) RTS returns unused memory "lazily" to the OS.
- This has making the memory available to other processes while also allowing
- the RTS to re-use the memory very efficiently (without zeroing pages) in case
- it needs it again, but common tools will incorrectly show such memory as
- occupied by the RTS (because they do not process the ``LazyFree`` field in
- ``/proc/PID/smaps``).
-
-Template Haskell
-~~~~~~~~~~~~~~~~
-
-- The ``Lift`` typeclass is now levity-polymorphic and has a ``liftTyped``
- method. Previously disallowed instances for unboxed tuples, unboxed sums, an
- primitive unboxed types have also been added. Finally, the code generated by
- :extension:`DeriveLift` has been simplified to take advantage of expression
- quotations.
-
-- Using ``TupleT 1``, ``TupE [exp]``, or ``TupP [pat]`` will now produce unary
- tuples (i.e., involving the ``Unit`` type from ``GHC.Tuple``) instead of
- silently dropping the parentheses. This brings Template Haskell's treatment
- of boxed tuples in line with that of unboxed tuples, as ``UnboxedTupleT`,
- ``UnboxedTupE``, and ``UnboxedTupP`` also produce unary unboxed tuples
- (i.e., ``Unit#``) when applied to only one argument.
-
-- GHC's constraint solver now solves constraints in each top-level group
- sooner. This has practical consequences for Template Haskell, as TH splices
- necessarily separate top-level groups. For example, the following program
- would compile in previous versions of GHC, but not in GHC 8.10: ::
-
- data T = MkT
-
- tStr :: String
- tStr = show MkT
-
- $(return [])
-
- instance Show T where
- show MkT = "MkT"
-
- This is because each top-level group's constraints are solved before moving
- on to the next, and since the top-level group for ``tStr`` appears before the
- top-level group that defines a ``Show T`` instance, GHC 8.10 will throw an
- error about a missing ``Show T`` instance in the expression ``show MkT``. The
- issue can be fixed by rearranging the order of declarations. For instance,
- the following will compile: ::
-
- data T = MkT
-
- instance Show T where
- show MkT = "MkT"
-
- $(return [])
-
- tStr :: String
- tStr = show MkT
-
-- TH splices by default don't generate warnings anymore. For example,
- ``$([d| f :: Int -> void; f x = case x of {} |])`` used to generate a
- pattern-match exhaustivity warning, which now it doesn't. The user can
- activate warnings for TH splices with :ghc-flag:`-fenable-th-splice-warnings`.
- The reason for opt-in is that the offending code might not have been generated
- by code the user has control over, for example the ``singletons`` or ``lens``
- library.
-
-``ghc-prim`` library
-~~~~~~~~~~~~~~~~~~~~
-
-- Add new ``bitReverse#`` primops that, for a ``Word`` of 8, 16, 32 or 64 bits,
- reverse the order of its bits e.g. ``0b110001`` becomes ``0b100011``.
- These primitives use optimized machine instructions when available.
-
-``ghc`` library
-~~~~~~~~~~~~~~~
-
-``base`` library
-~~~~~~~~~~~~~~~~
-
-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/containers.cabal: Dependency of ``ghc`` library
- libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library
- libraries/directory/directory.cabal: Dependency of ``ghc`` library
- libraries/exceptions/exceptions.cabal: Dependency of ``haskeline`` 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/pretty/pretty.cabal: Dependency of ``ghc`` 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