New syntax for GADT-style record declarations, and associated refactoring
authorsimonpj@microsoft.com <unknown>
Thu, 2 Jul 2009 09:46:57 +0000 (09:46 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 2 Jul 2009 09:46:57 +0000 (09:46 +0000)
commit432b9c9322181a3644083e3c19b7e240d90659e7
treeaffb919c8731145d0353f2ec828f11304ff40ca0
parent25cead299c5857b9142a82c917080a654be44b83
New syntax for GADT-style record declarations, and associated refactoring

The main purpose of this patch is to fix Trac #3306, by fleshing out the
syntax for GADT-style record declraations so that you have a context in
the type.  The new form is
   data T a where
     MkT :: forall a. Eq a => { x,y :: !a } -> T a
See discussion on the Trac ticket.

The old form is still allowed, but give a deprecation warning.

When we remove the old form we'll also get rid of the one reduce/reduce
error in the grammar. Hurrah!

While I was at it, I failed as usual to resist the temptation to do lots of
refactoring.  The parsing of data/type declarations is now much simpler and
more uniform.  Less code, less chance of errors, and more functionality.
Took longer than I planned, though.

ConDecl has record syntax, but it was not being used consistently, so I
pushed that through the compiler.
14 files changed:
compiler/deSugar/DsMeta.hs
compiler/hsSyn/Convert.lhs
compiler/hsSyn/HsDecls.lhs
compiler/hsSyn/HsTypes.lhs
compiler/parser/HaddockUtils.hs
compiler/parser/Parser.y.pp
compiler/parser/ParserCore.y
compiler/parser/RdrHsSyn.lhs
compiler/rename/RnHsSyn.lhs
compiler/rename/RnSource.lhs
compiler/rename/RnTypes.lhs
compiler/typecheck/TcHsType.lhs
compiler/typecheck/TcTyClsDecls.lhs
docs/users_guide/glasgow_exts.xml