[commit: ghc] master: Improve documentation of syntax for promoted lists (a972bdd)
Simon Peyton Jones
simonpj at microsoft.com
Mon Dec 15 17:39:30 UTC 2014
Ah yes, thanks; TypeOperators is needed for the (':), but DataKinds for everything else.
I'll modify.
Simon
| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of
| Gabor Greif
| Sent: 15 December 2014 17:27
| To: ghc-devs at haskell.org
| Subject: Re: [commit: ghc] master: Improve documentation of syntax for
| promoted lists (a972bdd)
|
| Hmm, shouldn't that be -XDataKinds (instead of -XTypeOperators)?
|
|
| also:
| umambiguous ---> unambiguous
| becuase ---> because
|
| Cheers,
|
| Gabor
|
| On 12/15/14, git at git.haskell.org <git at git.haskell.org> wrote:
| > Repository : ssh://git@git.haskell.org/ghc
| >
| > On branch : master
| > Link :
| >
| http://ghc.haskell.org/trac/ghc/changeset/a972bddfc8115d80d774383a5520
| > 2a293dc68595/ghc
| >
| >>---------------------------------------------------------------
| >
| > commit a972bddfc8115d80d774383a55202a293dc68595
| > Author: Simon Peyton Jones <simonpj at microsoft.com>
| > Date: Mon Dec 15 17:08:29 2014 +0000
| >
| > Improve documentation of syntax for promoted lists
| >
| > THe documentation in 7.9.4 of promoted list and tuple types was
| > misleading, which led to Trac #9882. This patch makes explicit
| > that only type-level with two or more elements can have the
| > quote omitted.
| >
| >
| >>---------------------------------------------------------------
| >
| > a972bddfc8115d80d774383a55202a293dc68595
| > compiler/parser/Parser.y | 8 ++++++--
| > docs/users_guide/glasgow_exts.xml | 19 ++++++++++++++++---
| > 2 files changed, 22 insertions(+), 5 deletions(-)
| >
| > diff --git a/compiler/parser/Parser.y b/compiler/parser/Parser.y
| index
| > bffe6e1..235d34a 100644
| > --- a/compiler/parser/Parser.y
| > +++ b/compiler/parser/Parser.y
| > @@ -1483,6 +1483,10 @@ atype :: { LHsType RdrName }
| > [mo $2,mc
| $4] }
| > | SIMPLEQUOTE var { sLL $1 $> $
| HsTyVar $
| > unLoc $2 }
| >
| > + -- Two or more [ty, ty, ty] must be a promoted list type,
| just as
| > + -- if you had written '[ty, ty, ty]
| > + -- (One means a list type, zero means the list type
| constructor,
| > + -- so you have to quote those.)
| > | '[' ctype ',' comma_types1 ']' {% ams (sLL $1 $> $
| > HsExplicitListTy
| >
| placeHolderKind ($2 :
| > $4))
| > [mo $1, mj
| AnnComma
| > $3,mc $5] } @@ -1503,11 +1507,11 @@ inst_types1 :: { [LHsType
| RdrName]
| > }
| > | inst_type ',' inst_types1 {% addAnnotation (gl $1)
| AnnComma
| > (gl $2)
| > >> return ($1 : $3) }
| >
| > -comma_types0 :: { [LHsType RdrName] }
| > +comma_types0 :: { [LHsType RdrName] } -- Zero or more: ty,ty,ty
| > : comma_types1 { $1 }
| > | {- empty -} { [] }
| >
| > -comma_types1 :: { [LHsType RdrName] }
| > +comma_types1 :: { [LHsType RdrName] } -- One or more: ty,ty,ty
| > : ctype { [$1] }
| > | ctype ',' comma_types1 {% addAnnotation (gl $1)
| AnnComma
| > (gl $2)
| > >> return ($1 : $3) }
| diff
| > --git a/docs/users_guide/glasgow_exts.xml
| > b/docs/users_guide/glasgow_exts.xml
| > index e12703f..7edca07 100644
| > --- a/docs/users_guide/glasgow_exts.xml
| > +++ b/docs/users_guide/glasgow_exts.xml
| > @@ -6882,9 +6882,9 @@ is a single quote.</para> </sect2>
| >
| > <sect2 id="promoted-lists-and-tuples"> -<title>Promoted lists and
| > tuples types</title>
| > +<title>Promoted list and tuple types</title>
| > <para>
| > -Haskell's list and tuple types are natively promoted to kinds, and
| > enjoy the
| > +With <option>-XTypeOperators</option>, Haskell's list and tuple
| types
| > +are
| > natively promoted to kinds, and enjoy the same convenient syntax at
| > the type level, albeit prefixed with a quote:
| > <programlisting>
| > data HList :: [*] -> * where
| > @@ -6893,8 +6893,21 @@ data HList :: [*] -> * where
| >
| > data Tuple :: (*,*) -> * where
| > Tuple :: a -> b -> Tuple '(a,b)
| > +
| > +foo0 :: HList '[]
| > +foo0 = HNil
| > +
| > +foo1 :: HList '[Int]
| > +foo1 = HCons (3::Int) HNil
| > +
| > +foo2 :: HList [Int, Bool]
| > +foo2 = ...
| > </programlisting>
| > -Note that this requires <option>-XTypeOperators</option>.
| > +For type-level lists of <emphasis>two or more elements</emphasis>,
| > +such as the signature of <literal>foo2</literal> above, the quote
| may
| > +be
| > omitted because the meaning is
| > +umambiguous. But for lists of one or zero elements (as in
| > <literal>foo0</literal>
| > +and <literal>foo1</literal>), the quote is required, becuase the
| > +types
| > <literal>[]</literal>
| > +and <literal>[Int]</literal> have existing meanings in Haskell.
| > </para>
| > </sect2>
| >
| >
| > _______________________________________________
| > ghc-commits mailing list
| > ghc-commits at haskell.org
| > http://www.haskell.org/mailman/listinfo/ghc-commits
| >
| _______________________________________________
| ghc-devs mailing list
| ghc-devs at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-devs
More information about the ghc-devs
mailing list