summaryrefslogtreecommitdiff
path: root/docs/users_guide/8.6.1-notes.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/users_guide/8.6.1-notes.rst')
-rw-r--r--docs/users_guide/8.6.1-notes.rst292
1 files changed, 292 insertions, 0 deletions
diff --git a/docs/users_guide/8.6.1-notes.rst b/docs/users_guide/8.6.1-notes.rst
new file mode 100644
index 0000000000..cfa28806eb
--- /dev/null
+++ b/docs/users_guide/8.6.1-notes.rst
@@ -0,0 +1,292 @@
+.. _release-8-6-1:
+
+Release notes for version 8.6.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.4.1 release.
+
+
+Highlights
+----------
+
+The highlights, since the 8.4.1 release, are:
+
+- Programs are no longer constrained by the Windows ``MAX_PATH`` file path
+ length limit. The file path limit is now approximately 32,767 characters. Note
+ that GHC itself is still somewhat limited due to GCC not supporting file
+ namespaced paths. Paths that are passed directly to the compiler, linker or
+ other GNU tools are currently still constrained. See :ref:`windows-file-paths`
+ for details.
+
+- Many, many bug fixes.
+
+
+Full details
+------------
+
+Language
+~~~~~~~~
+
+- Use of quantified type variables in constraints is now allowed via the
+ :extension:`QuantifiedConstraints` language extension. This long-awaited feature
+ enables users to encode significantly more precision in their types. For instance,
+ the common ``MonadTrans`` typeclass could now make the expectation that an
+ applied transformer is must be a ``Monad`` ::
+
+ class (forall m. Monad m => Monad (t m)) => MonadTrans t where {- ... -}
+
+ Additionally, quantification can enable terminating instance resolution
+ where this previously was not possible. See :ref:`quantified-constraints` for
+ details.
+
+- A new :extension:`DerivingVia` language extension has been added which allows
+ the use of the ``via`` deriving strategy. For instance: ::
+
+ newtype T = MkT Int
+ deriving Monoid via (Sum Int)
+
+ See :ref:`deriving-via` for more information.
+
+- A new :extension:`StarIsType` language extension has been added which controls
+ whether ``*`` is parsed as ``Data.Kind.Type`` or a regular type operator.
+ :extension:`StarIsType` is enabled by default.
+
+- GHC now permits the use of a wildcard type as the context of a standalone
+ ``deriving`` declaration with the use of the
+ :extension:`PartialTypeSignatures` language extension. For instance, this
+ declaration: ::
+
+ deriving instance _ => Eq (Foo a)
+
+ Denotes a derived ``Eq (Foo a)`` instance, where the context is inferred in
+ much the same way as ordinary ``deriving`` clauses do.
+ See :ref:`partial-type-signatures`.
+
+- Data declarations with empty ``where`` clauses are no longer valid without the
+ extension :extension:`GADTSyntax` enabled. For instance, consider the
+ following, ::
+
+ data T where
+
+ The grammar is invalid in Haskell2010. Previously it could be compiled successfully
+ without ``GADTs``. As of GHC 8.6.1, this is a parse error.
+
+- Incomplete patterns warning :ghc-flag:`-Wincomplete-patterns` is extended to
+ guards in pattern bindings and ``if`` alternatives of :extension:`MultiWayIf`.
+ For instance, consider the following, ::
+
+ foo :: Bool -> Int
+ foo b = if | b -> 1
+
+ In GHC 8.6.1, it will raise the warning: ::
+
+ <interactive>:2:12: warning: [-Wincomplete-patterns]
+ Pattern match(es) are non-exhaustive
+ In a multi-way if alternative:
+ Guards do not cover entire pattern space
+
+ See :ghc-ticket:`14773`.
+
+- Scoped type variables now work in default methods of class declarations
+ and in pattern synonyms in Template Haskell. See :ghc-ticket:`14885`.
+
+- ``do`` expressions, lambda expressions, etc. to be directly used as
+ a function argument, enabled with :extension:`BlockArguments`.
+ See :ref:`More liberal syntax for function arguments <block-arguments>`
+ for the full details.
+
+- Underscores in numeric literals (e.g. ``1_000_000``), enabled with
+ :extension:`NumericUnderscores`.
+ See :ref:`Numeric underscores <numeric-underscores>`
+ for the full details.
+
+- CUSKs now require all kind variables to be explicitly quantified. This was
+ already the case with :extension:`TypeInType`, but now :extension:`PolyKinds`
+ also exhibits this behavior. This means that the following example is no
+ longer considered to have a CUSK::
+
+ data T1 :: k -> Type -- No CUSK: `k` is not explicitly quantified
+
+- Functionality of :extension:`TypeInType` has been subsumed by
+ :extension:`PolyKinds`, and it is now merely a shorthand for
+ :extension:`PolyKinds`, :extension:`DataKinds`, and :extension:`NoStarIsType`.
+ The users are advised to avoid :extension:`TypeInType` due to its misleading
+ name: the ``Type :: Type`` axiom holds regardless of whether it is enabled.
+
+- GHC has become more diligent about catching illegal uses of kind polymorphism.
+ For instance, GHC 8.4 would accept the following without the use of
+ :extension:`PolyKinds`::
+
+ f :: forall k (a :: k). Proxy a
+ f = Proxy
+
+ This is now an error unless :extension:`PolyKinds` is enabled.
+
+- The plugin mechanism has been extended to allow plugins to run between frontend
+ phases. Of particular note are the parser and typechecker plugins which run
+ after parsing and typechecking have completed. Collectively, these new extension
+ points are called :ref:`source plugins <source-plugins>`.
+
+- Type literals now could be used in type class instances without the extension
+ :extension:`FlexibleInstances`.
+
+ See :ghc-ticket:`13833`.
+
+- :extension:`MonadFailDesugaring` is now enabled by default. See
+ `MonadFail Proposal (MFP)
+ <https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail>`__
+ for more details.
+
+Compiler
+~~~~~~~~
+
+- GHC now no longer adds the current file's directory as a general include path
+ calling the C compiler. Instead we use :ghc-flag:`-iquote` to only add it as
+ an include path for `#include ""`. See :ghc-ticket:`14312`.
+
+- GHC now supports British spelling of :extension:`GeneralizedNewtypeDeriving`.
+
+- GHC now does significantly more constant folding in its core-to-core optimiser.
+ This will result in significantly better code being generated for some
+ programs. See :ghc-ticket:`9136`.
+
+- GHC now offers significantly more information about typed holes such as valid
+ hole fits and refinement hole fits. See :ref:`Valid Hole Fits <typed-hole-valid-hole-fits>`
+ for more information.
+
+- The code-generation effects of :ghc-flag:`-dynamic` can now be
+ enabled independently by the flag
+ :ghc-flag:`-fexternal-dynamic-refs`. If you don't know why you might
+ need this, you don't need it.
+
+- :ghc-flag:`-Wcompat` now includes :ghc-flag:`-Wimplicit-kind-vars` to
+ provide early detection of breakage that will be caused by implementation of
+ `GHC proposal #24
+ <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst>`__
+ in a future release.
+
+Plugins
+~~~~~~~
+
+- GHC's plugin mechanism now offers plugin authors control over their plugin's
+ effect on recompilation checking. Specifically the ``Plugin`` record name has
+ a new field ::
+
+ data Plugin = Plugin {
+ pluginRecompile :: [CommandLineOption] -> IO PluginRecompile
+ , {- ... -}
+ }
+
+ data PluginRecompile = ForceRecompile | NoForceRecompile | MaybeRecompile Fingerprint
+
+ Plugin based on ``defaultPlugin`` will have their previous recompilation
+ behavior (``ForceRecompile``) preserved. However, plugins that are "pure" are
+ encouraged to override this to either ``NoForceRecompile`` or ``MaybeRecompile``.
+ See :ref:`plugin_recompilation` for details.
+
+- GHC now provides a class of new plugins: source plugins. These plugins can
+ inspect and modify a variety of intermediate representations used by the
+ compiler's frontend. These include:
+
+ * The ability to modify the parser output
+ * The ability to inspect the renamer output
+ * The ability to modify the typechecked AST
+ * The ability to modify Template Haskell splices
+ * The ability to modify interface files as they are loaded
+
+ See :ref:`source-plugins` for details.
+
+GHCi
+~~~~
+
+- Added an experimental :ghci-cmd:`:doc` command that displays the
+ documentation for a declaration.
+
+Runtime system
+~~~~~~~~~~~~~~
+
+- The GHC runtime linker now prefers user shared libraries above system ones.
+ When extra search directories are specified these are searched before anything
+ else. This fixes ``iuuc`` on Windows given the proper search directories (e.g
+ ``-L/mingw64/lib``).
+
+- The GHC runtime linker now uses ``LIBRARY_PATH`` and the runtime loader now also
+ searches ``LD_LIBRARY_PATH``.
+
+- The GHC runtime on Windows is no longer constrained by the ``MAX_PATH`` file path
+ length limitation. See :ref:`windows-file-paths`.
+
+- The runtime now allows use of the :rts-flag:`-hT` profiling variety on
+ programs built with :ghc-flag:`-prof`.
+
+- The STM assertions mechanism (namely the ``always`` and ``alwaysSucceeds``
+ functions) has been removed. This happened a bit earlier than proposed in the
+ deprecation pragma included in GHC 8.4, but due to community feedback we
+ decided to move ahead with the early removal.
+
+Template Haskell
+~~~~~~~~~~~~~~~~
+
+``ghc`` library
+~~~~~~~~~~~~~~~
+
+
+``base`` library
+~~~~~~~~~~~~~~~~
+
+- ``($!)`` is now representation-polymorphic like ``($)``.
+
+- The module ``Data.Functor.Contravariant`` has been moved from the
+ ``contravariant`` package into ``base``. All the other modules in
+ ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
+ have not been moved to ``base``, and they still reside in ``contravariant``.
+
+``ghc-prim`` library
+~~~~~~~~~~~~~~~~~~~~
+
+- Version number 0.5.2.1 (was 0.5.2.0)
+
+- Added new ``addWordC#`` operation for unsigned addition with carry.
+
+Build system
+~~~~~~~~~~~~
+
+
+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: Deppendency 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-compact/ghc-compact.cabal: Core 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/mtl/mtl.cabal: Dependency of ``Cabal`` library
+ libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library
+ libraries/process/process.cabal: Dependency of ``ghc`` library
+ libraries/template-haskell/template-haskell.cabal: Core 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