diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/users_guide/8.6.1-notes.rst | 3 | ||||
| -rw-r--r-- | docs/users_guide/glasgow_exts.rst | 8 | ||||
| -rw-r--r-- | docs/users_guide/using-warnings.rst | 31 | 
3 files changed, 35 insertions, 7 deletions
| diff --git a/docs/users_guide/8.6.1-notes.rst b/docs/users_guide/8.6.1-notes.rst index 72a3790bfd..3a24384493 100644 --- a/docs/users_guide/8.6.1-notes.rst +++ b/docs/users_guide/8.6.1-notes.rst @@ -51,8 +51,7 @@ Language  - 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 and disabled by -  :extension:`TypeOperators`. +  :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 diff --git a/docs/users_guide/glasgow_exts.rst b/docs/users_guide/glasgow_exts.rst index 14d01f6123..5cf5c583ad 100644 --- a/docs/users_guide/glasgow_exts.rst +++ b/docs/users_guide/glasgow_exts.rst @@ -8712,8 +8712,7 @@ Kind polymorphism  .. extension:: TypeInType      :shortdesc: Deprecated. Enable kind polymorphism and datatype promotion. -    :implies: :extension:`PolyKinds`, :extension:`DataKinds`, :extension:`KindSignatures`, -              :extension:`NoStarIsType` +    :implies: :extension:`PolyKinds`, :extension:`DataKinds`, :extension:`KindSignatures`      :since: 8.0.1      In the past this extension used to enable advanced type-level programming @@ -9160,13 +9159,12 @@ The kind ``Type``  -----------------  .. extension:: StarIsType -    :shortdesc: Desugar ``*`` to ``Data.Kind.Type``. +    :shortdesc: Treat ``*`` as ``Data.Kind.Type``.      :since: 8.6.1      Treat the unqualified uses of the ``*`` type operator as nullary and desugar -    to ``Data.Kind.Type``. Disabled by :extension:`TypeOperators` and -    :extension:`TypeInType`. +    to ``Data.Kind.Type``.  The kind ``Type`` (imported from ``Data.Kind``) classifies ordinary types. With  :extension:`StarIsType` (currently enabled by default), ``*`` is desugared to diff --git a/docs/users_guide/using-warnings.rst b/docs/users_guide/using-warnings.rst index 575e28119f..8d09b4488b 100644 --- a/docs/users_guide/using-warnings.rst +++ b/docs/users_guide/using-warnings.rst @@ -34,6 +34,7 @@ generally likely to indicate bugs in your program. These are:      * :ghc-flag:`-Wtabs`      * :ghc-flag:`-Wunrecognised-warning-flags`      * :ghc-flag:`-Winaccessible-code` +    * :ghc-flag:`-Wstar-binder`  The following flags are simple ways to select standard "packages" of warnings: @@ -1169,6 +1170,36 @@ of ``-W(no-)*``.      since we're passing ``Foo1`` and ``Foo2`` here, it follows that ``t ~      Char``, and ``u ~ Int``, and thus ``t ~ u`` cannot hold. +.. ghc-flag:: -Wstar-binder +     :shortdesc: warn about binding the ``(*)`` type operator despite +         :ghc-flag:`-XStarIsType` +     :type: dynamic +     :reverse: -Wno-star-binder + +     Under :ghc-flag:`-XStarIsType`, a ``*`` in types is not an operator nor +     even a name, it is special syntax that stands for ``Data.Kind.Type``. This +     means that an expression like ``Either * Char`` is parsed as ``Either (*) +     Char`` and not ``(*) Either Char``. + +     In binding positions, we have similar parsing rules. Consider the following +     example :: + +         {-# LANGUAGE TypeOperators, TypeFamilies, StarIsType #-} + +         type family a + b +         type family a * b + +     While ``a + b`` is parsed as ``(+) a b`` and becomes a binding position for +     the ``(+)`` type operator, ``a * b`` is parsed as ``a (*) b`` and is rejected. + +     As a workaround, we allow to bind ``(*)`` in prefix form:: + +         type family (*) a b + +     This is a rather fragile arrangement, as generally a programmer expects +     ``(*) a b`` to be equivalent to ``a * b``. With :ghc-flag:`-Wstar-binder` +     we warn when this special treatment of ``(*)`` takes place. +  .. ghc-flag:: -Wsimplifiable-class-constraints      :shortdesc: 2arn about class constraints in a type signature that can          be simplified using a top-level instance declaration. | 
