summaryrefslogtreecommitdiff
path: root/docs/users_guide/using-warnings.rst
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2019-02-13 17:15:49 +0300
committerVladislav Zavialov <vlad.z.4096@gmail.com>2019-02-13 22:44:03 +0300
commit0b7f6a6c0aa9d145a244d95b417b41e006eac154 (patch)
tree21bff8f342fc2846b44bd833cfbdef220390efb4 /docs/users_guide/using-warnings.rst
parent4af0a2d609651c4bae45d84d2bf7ce9fe8cca350 (diff)
downloadhaskell-wip/no-kind-vars.tar.gz
Treat kind/type variables identically in 'forall'wip/no-kind-vars
Diffstat (limited to 'docs/users_guide/using-warnings.rst')
-rw-r--r--docs/users_guide/using-warnings.rst53
1 files changed, 0 insertions, 53 deletions
diff --git a/docs/users_guide/using-warnings.rst b/docs/users_guide/using-warnings.rst
index 03ca184531..27efd9f899 100644
--- a/docs/users_guide/using-warnings.rst
+++ b/docs/users_guide/using-warnings.rst
@@ -123,7 +123,6 @@ The following flags are simple ways to select standard "packages" of warnings:
* :ghc-flag:`-Wmissing-monadfail-instances`
* :ghc-flag:`-Wsemigroup`
* :ghc-flag:`-Wnoncanonical-monoid-instances`
- * :ghc-flag:`-Wimplicit-kind-vars`
* :ghc-flag:`-Wstar-is-type`
.. ghc-flag:: -Wno-compat
@@ -776,58 +775,6 @@ of ``-W(no-)*``.
This warning is off by default.
-.. ghc-flag:: -Wimplicit-kind-vars
- :shortdesc: warn when kind variables are brought into scope implicitly despite
- the "forall-or-nothing" rule
- :type: dynamic
- :reverse: -Wno-implicit-kind-vars
- :category:
-
- :since: 8.6
-
- `GHC proposal #24
- <https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst>`__
- prescribes to treat kind variables and type variables identically in
- ``forall``, removing the legacy distinction between them.
-
- Consider the following examples: ::
-
- f :: Proxy a -> Proxy b -> ()
- g :: forall a b. Proxy a -> Proxy b -> ()
-
- ``f`` does not use an explicit ``forall``, so type variables ``a`` and ``b``
- are brought into scope implicitly. ``g`` quantifies both ``a`` and ``b``
- explicitly. Both ``f`` and ``g`` work today and will continue to work in the
- future because they adhere to the "forall-or-nothing" rule: either all type
- variables in a function definition are introduced explicitly or implicitly,
- there is no middle ground.
-
- A violation of the "forall-or-nothing" rule looks like this: ::
-
- m :: forall a. Proxy a -> Proxy b -> ()
-
- ``m`` does not introduce one of the variables, ``b``, and thus is rejected.
-
- However, consider the following example: ::
-
- n :: forall a. Proxy (a :: k) -> ()
-
- While ``n`` uses ``k`` without introducing it and thus violates the rule, it
- is currently accepted. This is because ``k`` in ``n`` is considered a kind
- variable, as it occurs in a kind signature. In reality, the line between
- type variables and kind variables is blurry, as the following example
- demonstrates: ::
-
- kindOf :: forall a. Proxy (a :: k) -> Proxy k
-
- In ``kindOf``, the ``k`` variable is used both in a kind position and a type
- position. Currently, ``kindOf`` happens to be accepted as well.
-
- In a future release of GHC, both ``n`` and ``kindOf`` will be rejected per
- the "forall-or-nothing" rule. This warning, being part of the
- :ghc-flag:`-Wcompat` option group, allows to detect this before the actual
- breaking change takes place.
-
.. ghc-flag:: -Wincomplete-patterns
:shortdesc: warn when a pattern match could fail
:type: dynamic