Remove the distinction between data and newtype families
[ghc-hetmet.git] / compiler / parser / Parser.y.pp
1 --                                                              -*-haskell-*-
2 -- ---------------------------------------------------------------------------
3 -- (c) The University of Glasgow 1997-2003
4 ---
5 -- The GHC grammar.
6 --
7 -- Author(s): Simon Marlow, Sven Panne 1997, 1998, 1999
8 -- ---------------------------------------------------------------------------
9
10 {
11 module Parser ( parseModule, parseStmt, parseIdentifier, parseType,
12                 parseHeader ) where
13
14 #define INCLUDE #include 
15 INCLUDE "HsVersions.h"
16
17 import HsSyn
18 import RdrHsSyn
19 import HscTypes         ( IsBootInterface, DeprecTxt )
20 import Lexer
21 import RdrName
22 import TysWiredIn       ( unitTyCon, unitDataCon, tupleTyCon, tupleCon, nilDataCon,
23                           listTyCon_RDR, parrTyCon_RDR, consDataCon_RDR )
24 import Type             ( funTyCon )
25 import ForeignCall      ( Safety(..), CExportSpec(..), CLabelString,
26                           CCallConv(..), CCallTarget(..), defaultCCallConv
27                         )
28 import OccName          ( varName, dataName, tcClsName, tvName )
29 import DataCon          ( DataCon, dataConName )
30 import SrcLoc           ( Located(..), unLoc, getLoc, noLoc, combineSrcSpans,
31                           SrcSpan, combineLocs, srcLocFile, 
32                           mkSrcLoc, mkSrcSpan )
33 import Module
34 import StaticFlags      ( opt_SccProfilingOn, opt_Hpc )
35 import Type             ( Kind, mkArrowKind, liftedTypeKind, unliftedTypeKind )
36 import BasicTypes       ( Boxity(..), Fixity(..), FixityDirection(..), IPName(..),
37                           Activation(..), defaultInlineSpec )
38 import OrdList
39 import HaddockParse
40 import {-# SOURCE #-} HaddockLex hiding ( Token )
41 import HaddockUtils
42
43 import FastString
44 import Maybes           ( orElse )
45 import Outputable
46
47 import Control.Monad    ( unless )
48 import GHC.Exts
49 import Data.Char
50 import Control.Monad    ( mplus )
51 }
52
53 {-
54 -----------------------------------------------------------------------------
55 24 Februar 2006
56
57 Conflicts: 33 shift/reduce
58            1 reduce/reduce
59
60 The reduce/reduce conflict is weird.  It's between tyconsym and consym, and I
61 would think the two should never occur in the same context.
62
63   -=chak
64
65 -----------------------------------------------------------------------------
66 31 December 2006
67
68 Conflicts: 34 shift/reduce
69            1 reduce/reduce
70
71 The reduce/reduce conflict is weird.  It's between tyconsym and consym, and I
72 would think the two should never occur in the same context.
73
74   -=chak
75
76 -----------------------------------------------------------------------------
77 6 December 2006
78
79 Conflicts: 32 shift/reduce
80            1 reduce/reduce
81
82 The reduce/reduce conflict is weird.  It's between tyconsym and consym, and I
83 would think the two should never occur in the same context.
84
85   -=chak
86
87 -----------------------------------------------------------------------------
88 26 July 2006
89
90 Conflicts: 37 shift/reduce
91            1 reduce/reduce
92
93 The reduce/reduce conflict is weird.  It's between tyconsym and consym, and I
94 would think the two should never occur in the same context.
95
96   -=chak
97
98 -----------------------------------------------------------------------------
99 Conflicts: 38 shift/reduce (1.25)
100
101 10 for abiguity in 'if x then y else z + 1'             [State 178]
102         (shift parses as 'if x then y else (z + 1)', as per longest-parse rule)
103         10 because op might be: : - ! * . `x` VARSYM CONSYM QVARSYM QCONSYM
104
105 1 for ambiguity in 'if x then y else z :: T'            [State 178]
106         (shift parses as 'if x then y else (z :: T)', as per longest-parse rule)
107
108 4 for ambiguity in 'if x then y else z -< e'            [State 178]
109         (shift parses as 'if x then y else (z -< T)', as per longest-parse rule)
110         There are four such operators: -<, >-, -<<, >>-
111
112
113 2 for ambiguity in 'case v of { x :: T -> T ... } '     [States 11, 253]
114         Which of these two is intended?
115           case v of
116             (x::T) -> T         -- Rhs is T
117     or
118           case v of
119             (x::T -> T) -> ..   -- Rhs is ...
120
121 10 for ambiguity in 'e :: a `b` c'.  Does this mean     [States 11, 253]
122         (e::a) `b` c, or 
123         (e :: (a `b` c))
124     As well as `b` we can have !, VARSYM, QCONSYM, and CONSYM, hence 5 cases
125     Same duplication between states 11 and 253 as the previous case
126
127 1 for ambiguity in 'let ?x ...'                         [State 329]
128         the parser can't tell whether the ?x is the lhs of a normal binding or
129         an implicit binding.  Fortunately resolving as shift gives it the only
130         sensible meaning, namely the lhs of an implicit binding.
131
132 1 for ambiguity in '{-# RULES "name" [ ... #-}          [State 382]
133         we don't know whether the '[' starts the activation or not: it
134         might be the start of the declaration with the activation being
135         empty.  --SDM 1/4/2002
136
137 1 for ambiguity in '{-# RULES "name" forall = ... #-}'  [State 474]
138         since 'forall' is a valid variable name, we don't know whether
139         to treat a forall on the input as the beginning of a quantifier
140         or the beginning of the rule itself.  Resolving to shift means
141         it's always treated as a quantifier, hence the above is disallowed.
142         This saves explicitly defining a grammar for the rule lhs that
143         doesn't include 'forall'.
144
145 1 for ambiguity when the source file starts with "-- | doc". We need another
146   token of lookahead to determine if a top declaration or the 'module' keyword
147   follows. Shift parses as if the 'module' keyword follows.   
148
149 -- ---------------------------------------------------------------------------
150 -- Adding location info
151
152 This is done in a stylised way using the three macros below, L0, L1
153 and LL.  Each of these macros can be thought of as having type
154
155    L0, L1, LL :: a -> Located a
156
157 They each add a SrcSpan to their argument.
158
159    L0   adds 'noSrcSpan', used for empty productions
160      -- This doesn't seem to work anymore -=chak
161
162    L1   for a production with a single token on the lhs.  Grabs the SrcSpan
163         from that token.
164
165    LL   for a production with >1 token on the lhs.  Makes up a SrcSpan from
166         the first and last tokens.
167
168 These suffice for the majority of cases.  However, we must be
169 especially careful with empty productions: LL won't work if the first
170 or last token on the lhs can represent an empty span.  In these cases,
171 we have to calculate the span using more of the tokens from the lhs, eg.
172
173         | 'newtype' tycl_hdr '=' newconstr deriving
174                 { L (comb3 $1 $4 $5)
175                     (mkTyData NewType (unLoc $2) [$4] (unLoc $5)) }
176
177 We provide comb3 and comb4 functions which are useful in such cases.
178
179 Be careful: there's no checking that you actually got this right, the
180 only symptom will be that the SrcSpans of your syntax will be
181 incorrect.
182
183 /*
184  * We must expand these macros *before* running Happy, which is why this file is
185  * Parser.y.pp rather than just Parser.y - we run the C pre-processor first.
186  */
187 #define L0   L noSrcSpan
188 #define L1   sL (getLoc $1)
189 #define LL   sL (comb2 $1 $>)
190
191 -- -----------------------------------------------------------------------------
192
193 -}
194
195 %token
196  '_'            { L _ ITunderscore }            -- Haskell keywords
197  'as'           { L _ ITas }
198  'case'         { L _ ITcase }          
199  'class'        { L _ ITclass } 
200  'data'         { L _ ITdata } 
201  'default'      { L _ ITdefault }
202  'deriving'     { L _ ITderiving }
203  'derive'       { L _ ITderive }
204  'do'           { L _ ITdo }
205  'else'         { L _ ITelse }
206  'hiding'       { L _ IThiding }
207  'if'           { L _ ITif }
208  'import'       { L _ ITimport }
209  'in'           { L _ ITin }
210  'infix'        { L _ ITinfix }
211  'infixl'       { L _ ITinfixl }
212  'infixr'       { L _ ITinfixr }
213  'instance'     { L _ ITinstance }
214  'let'          { L _ ITlet }
215  'module'       { L _ ITmodule }
216  'newtype'      { L _ ITnewtype }
217  'of'           { L _ ITof }
218  'qualified'    { L _ ITqualified }
219  'then'         { L _ ITthen }
220  'type'         { L _ ITtype }
221  'where'        { L _ ITwhere }
222  '_scc_'        { L _ ITscc }         -- ToDo: remove
223
224  'forall'       { L _ ITforall }                -- GHC extension keywords
225  'foreign'      { L _ ITforeign }
226  'export'       { L _ ITexport }
227  'label'        { L _ ITlabel } 
228  'dynamic'      { L _ ITdynamic }
229  'safe'         { L _ ITsafe }
230  'threadsafe'   { L _ ITthreadsafe }
231  'unsafe'       { L _ ITunsafe }
232  'mdo'          { L _ ITmdo }
233  'family'       { L _ ITfamily }
234  'stdcall'      { L _ ITstdcallconv }
235  'ccall'        { L _ ITccallconv }
236  'dotnet'       { L _ ITdotnet }
237  'proc'         { L _ ITproc }          -- for arrow notation extension
238  'rec'          { L _ ITrec }           -- for arrow notation extension
239
240  '{-# INLINE'             { L _ (ITinline_prag _) }
241  '{-# SPECIALISE'         { L _ ITspec_prag }
242  '{-# SPECIALISE_INLINE'  { L _ (ITspec_inline_prag _) }
243  '{-# SOURCE'      { L _ ITsource_prag }
244  '{-# RULES'       { L _ ITrules_prag }
245  '{-# CORE'        { L _ ITcore_prag }              -- hdaume: annotated core
246  '{-# SCC'         { L _ ITscc_prag }
247  '{-# GENERATED'   { L _ ITgenerated_prag }
248  '{-# DEPRECATED'  { L _ ITdeprecated_prag }
249  '{-# UNPACK'      { L _ ITunpack_prag }
250  '#-}'             { L _ ITclose_prag }
251
252  '..'           { L _ ITdotdot }                        -- reserved symbols
253  ':'            { L _ ITcolon }
254  '::'           { L _ ITdcolon }
255  '='            { L _ ITequal }
256  '\\'           { L _ ITlam }
257  '|'            { L _ ITvbar }
258  '<-'           { L _ ITlarrow }
259  '->'           { L _ ITrarrow }
260  '@'            { L _ ITat }
261  '~'            { L _ ITtilde }
262  '=>'           { L _ ITdarrow }
263  '-'            { L _ ITminus }
264  '!'            { L _ ITbang }
265  '*'            { L _ ITstar }
266  '-<'           { L _ ITlarrowtail }            -- for arrow notation
267  '>-'           { L _ ITrarrowtail }            -- for arrow notation
268  '-<<'          { L _ ITLarrowtail }            -- for arrow notation
269  '>>-'          { L _ ITRarrowtail }            -- for arrow notation
270  '.'            { L _ ITdot }
271
272  '{'            { L _ ITocurly }                        -- special symbols
273  '}'            { L _ ITccurly }
274  '{|'           { L _ ITocurlybar }
275  '|}'           { L _ ITccurlybar }
276  vocurly        { L _ ITvocurly } -- virtual open curly (from layout)
277  vccurly        { L _ ITvccurly } -- virtual close curly (from layout)
278  '['            { L _ ITobrack }
279  ']'            { L _ ITcbrack }
280  '[:'           { L _ ITopabrack }
281  ':]'           { L _ ITcpabrack }
282  '('            { L _ IToparen }
283  ')'            { L _ ITcparen }
284  '(#'           { L _ IToubxparen }
285  '#)'           { L _ ITcubxparen }
286  '(|'           { L _ IToparenbar }
287  '|)'           { L _ ITcparenbar }
288  ';'            { L _ ITsemi }
289  ','            { L _ ITcomma }
290  '`'            { L _ ITbackquote }
291
292  VARID          { L _ (ITvarid    _) }          -- identifiers
293  CONID          { L _ (ITconid    _) }
294  VARSYM         { L _ (ITvarsym   _) }
295  CONSYM         { L _ (ITconsym   _) }
296  QVARID         { L _ (ITqvarid   _) }
297  QCONID         { L _ (ITqconid   _) }
298  QVARSYM        { L _ (ITqvarsym  _) }
299  QCONSYM        { L _ (ITqconsym  _) }
300
301  IPDUPVARID     { L _ (ITdupipvarid   _) }              -- GHC extension
302
303  CHAR           { L _ (ITchar     _) }
304  STRING         { L _ (ITstring   _) }
305  INTEGER        { L _ (ITinteger  _) }
306  RATIONAL       { L _ (ITrational _) }
307                     
308  PRIMCHAR       { L _ (ITprimchar   _) }
309  PRIMSTRING     { L _ (ITprimstring _) }
310  PRIMINTEGER    { L _ (ITprimint    _) }
311  PRIMFLOAT      { L _ (ITprimfloat  _) }
312  PRIMDOUBLE     { L _ (ITprimdouble _) }
313
314  DOCNEXT        { L _ (ITdocCommentNext _) }
315  DOCPREV        { L _ (ITdocCommentPrev _) }
316  DOCNAMED       { L _ (ITdocCommentNamed _) }
317  DOCSECTION     { L _ (ITdocSection _ _) }
318  DOCOPTIONS     { L _ (ITdocOptions _) }
319
320 -- Template Haskell 
321 '[|'            { L _ ITopenExpQuote  }       
322 '[p|'           { L _ ITopenPatQuote  }      
323 '[t|'           { L _ ITopenTypQuote  }      
324 '[d|'           { L _ ITopenDecQuote  }      
325 '|]'            { L _ ITcloseQuote    }
326 TH_ID_SPLICE    { L _ (ITidEscape _)  }     -- $x
327 '$('            { L _ ITparenEscape   }     -- $( exp )
328 TH_VAR_QUOTE    { L _ ITvarQuote      }     -- 'x
329 TH_TY_QUOTE     { L _ ITtyQuote       }      -- ''T
330
331 %monad { P } { >>= } { return }
332 %lexer { lexer } { L _ ITeof }
333 %name parseModule module
334 %name parseStmt   maybe_stmt
335 %name parseIdentifier  identifier
336 %name parseType ctype
337 %partial parseHeader header
338 %tokentype { (Located Token) }
339 %%
340
341 -----------------------------------------------------------------------------
342 -- Identifiers; one of the entry points
343 identifier :: { Located RdrName }
344         : qvar                          { $1 }
345         | qcon                          { $1 }
346         | qvarop                        { $1 }
347         | qconop                        { $1 }
348
349 -----------------------------------------------------------------------------
350 -- Module Header
351
352 -- The place for module deprecation is really too restrictive, but if it
353 -- was allowed at its natural place just before 'module', we get an ugly
354 -- s/r conflict with the second alternative. Another solution would be the
355 -- introduction of a new pragma DEPRECATED_MODULE, but this is not very nice,
356 -- either, and DEPRECATED is only expected to be used by people who really
357 -- know what they are doing. :-)
358
359 module  :: { Located (HsModule RdrName) }
360         : optdoc 'module' modid maybemoddeprec maybeexports 'where' body 
361                 {% fileSrcSpan >>= \ loc -> case $1 of { (opt, info, doc) -> 
362                    return (L loc (HsModule (Just $3) $5 (fst $7) (snd $7) $4 
363                           opt info doc) )}}
364         | body2
365                 {% fileSrcSpan >>= \ loc ->
366                    return (L loc (HsModule Nothing Nothing 
367                           (fst $1) (snd $1) Nothing Nothing emptyHaddockModInfo 
368                           Nothing)) }
369
370 optdoc :: { (Maybe String, HaddockModInfo RdrName, Maybe (HsDoc RdrName)) }                             
371         : moduleheader            { (Nothing, fst $1, snd $1) }
372         | docoptions              { (Just $1, emptyHaddockModInfo, Nothing)} 
373         | docoptions moduleheader { (Just $1, fst $2, snd $2) } 
374         | moduleheader docoptions { (Just $2, fst $1, snd $1) } 
375         | {- empty -}             { (Nothing, emptyHaddockModInfo, Nothing) }  
376
377 missing_module_keyword :: { () }
378         : {- empty -}                           {% pushCurrentContext }
379
380 maybemoddeprec :: { Maybe DeprecTxt }
381         : '{-# DEPRECATED' STRING '#-}'         { Just (getSTRING $2) }
382         |  {- empty -}                          { Nothing }
383
384 body    :: { ([LImportDecl RdrName], [LHsDecl RdrName]) }
385         :  '{'            top '}'               { $2 }
386         |      vocurly    top close             { $2 }
387
388 body2   :: { ([LImportDecl RdrName], [LHsDecl RdrName]) }
389         :  '{' top '}'                          { $2 }
390         |  missing_module_keyword top close     { $2 }
391
392 top     :: { ([LImportDecl RdrName], [LHsDecl RdrName]) }
393         : importdecls                           { (reverse $1,[]) }
394         | importdecls ';' cvtopdecls            { (reverse $1,$3) }
395         | cvtopdecls                            { ([],$1) }
396
397 cvtopdecls :: { [LHsDecl RdrName] }
398         : topdecls                              { cvTopDecls $1 }
399
400 -----------------------------------------------------------------------------
401 -- Module declaration & imports only
402
403 header  :: { Located (HsModule RdrName) }
404         : optdoc 'module' modid maybemoddeprec maybeexports 'where' header_body
405                 {% fileSrcSpan >>= \ loc -> case $1 of { (opt, info, doc) -> 
406                    return (L loc (HsModule (Just $3) $5 $7 [] $4 
407                    opt info doc))}}
408         | missing_module_keyword importdecls
409                 {% fileSrcSpan >>= \ loc ->
410                    return (L loc (HsModule Nothing Nothing $2 [] Nothing 
411                    Nothing emptyHaddockModInfo Nothing)) }
412
413 header_body :: { [LImportDecl RdrName] }
414         :  '{'            importdecls           { $2 }
415         |      vocurly    importdecls           { $2 }
416
417 -----------------------------------------------------------------------------
418 -- The Export List
419
420 maybeexports :: { Maybe [LIE RdrName] }
421         :  '(' exportlist ')'                   { Just $2 }
422         |  {- empty -}                          { Nothing }
423
424 exportlist :: { [LIE RdrName] }
425         : expdoclist ',' expdoclist             { $1 ++ $3 }
426         | exportlist1                           { $1 }
427
428 exportlist1 :: { [LIE RdrName] }
429         : expdoclist export expdoclist ',' exportlist  { $1 ++ ($2 : $3) ++ $5 }
430         | expdoclist export expdoclist                 { $1 ++ ($2 : $3) }
431         | expdoclist                                   { $1 }
432
433 expdoclist :: { [LIE RdrName] }
434         : exp_doc expdoclist                           { $1 : $2 }
435         | {- empty -}                                  { [] }
436
437 exp_doc :: { LIE RdrName }                                                   
438         : docsection    { L1 (case (unLoc $1) of (n, doc) -> IEGroup n doc) }
439         | docnamed      { L1 (IEDocNamed ((fst . unLoc) $1)) } 
440         | docnext       { L1 (IEDoc (unLoc $1)) }       
441                        
442    -- No longer allow things like [] and (,,,) to be exported
443    -- They are built in syntax, always available
444 export  :: { LIE RdrName }
445         :  qvar                         { L1 (IEVar (unLoc $1)) }
446         |  oqtycon                      { L1 (IEThingAbs (unLoc $1)) }
447         |  oqtycon '(' '..' ')'         { LL (IEThingAll (unLoc $1)) }
448         |  oqtycon '(' ')'              { LL (IEThingWith (unLoc $1) []) }
449         |  oqtycon '(' qcnames ')'      { LL (IEThingWith (unLoc $1) (reverse $3)) }
450         |  'module' modid               { LL (IEModuleContents (unLoc $2)) }
451
452 qcnames :: { [RdrName] }
453         :  qcnames ',' qcname_ext       { unLoc $3 : $1 }
454         |  qcname_ext                   { [unLoc $1]  }
455
456 qcname_ext :: { Located RdrName }       -- Variable or data constructor
457                                         -- or tagged type constructor
458         :  qcname                       { $1 }
459         |  'type' qcon                  { sL (comb2 $1 $2) 
460                                              (setRdrNameSpace (unLoc $2) 
461                                                               tcClsName)  }
462
463 -- Cannot pull into qcname_ext, as qcname is also used in expression.
464 qcname  :: { Located RdrName }  -- Variable or data constructor
465         :  qvar                         { $1 }
466         |  qcon                         { $1 }
467
468 -----------------------------------------------------------------------------
469 -- Import Declarations
470
471 -- import decls can be *empty*, or even just a string of semicolons
472 -- whereas topdecls must contain at least one topdecl.
473
474 importdecls :: { [LImportDecl RdrName] }
475         : importdecls ';' importdecl            { $3 : $1 }
476         | importdecls ';'                       { $1 }
477         | importdecl                            { [ $1 ] }
478         | {- empty -}                           { [] }
479
480 importdecl :: { LImportDecl RdrName }
481         : 'import' maybe_src optqualified modid maybeas maybeimpspec 
482                 { L (comb4 $1 $4 $5 $6) (ImportDecl $4 $2 $3 (unLoc $5) (unLoc $6)) }
483
484 maybe_src :: { IsBootInterface }
485         : '{-# SOURCE' '#-}'                    { True }
486         | {- empty -}                           { False }
487
488 optqualified :: { Bool }
489         : 'qualified'                           { True  }
490         | {- empty -}                           { False }
491
492 maybeas :: { Located (Maybe ModuleName) }
493         : 'as' modid                            { LL (Just (unLoc $2)) }
494         | {- empty -}                           { noLoc Nothing }
495
496 maybeimpspec :: { Located (Maybe (Bool, [LIE RdrName])) }
497         : impspec                               { L1 (Just (unLoc $1)) }
498         | {- empty -}                           { noLoc Nothing }
499
500 impspec :: { Located (Bool, [LIE RdrName]) }
501         :  '(' exportlist ')'                   { LL (False, $2) }
502         |  'hiding' '(' exportlist ')'          { LL (True,  $3) }
503
504 -----------------------------------------------------------------------------
505 -- Fixity Declarations
506
507 prec    :: { Int }
508         : {- empty -}           { 9 }
509         | INTEGER               {% checkPrecP (L1 (fromInteger (getINTEGER $1))) }
510
511 infix   :: { Located FixityDirection }
512         : 'infix'                               { L1 InfixN  }
513         | 'infixl'                              { L1 InfixL  }
514         | 'infixr'                              { L1 InfixR }
515
516 ops     :: { Located [Located RdrName] }
517         : ops ',' op                            { LL ($3 : unLoc $1) }
518         | op                                    { L1 [$1] }
519
520 -----------------------------------------------------------------------------
521 -- Top-Level Declarations
522
523 topdecls :: { OrdList (LHsDecl RdrName) }
524         : topdecls ';' topdecl                  { $1 `appOL` $3 }
525         | topdecls ';'                          { $1 }
526         | topdecl                               { $1 }
527
528 topdecl :: { OrdList (LHsDecl RdrName) }
529         : cl_decl                       { unitOL (L1 (TyClD (unLoc $1))) }
530         | ty_decl                       { unitOL (L1 (TyClD (unLoc $1))) }
531         | 'instance' inst_type where_inst
532             { let (binds, sigs, ats, _) = cvBindsAndSigs (unLoc $3)
533               in 
534               unitOL (L (comb3 $1 $2 $3) (InstD (InstDecl $2 binds sigs ats)))}
535         | stand_alone_deriving                  { unitOL (LL (DerivD (unLoc $1))) }
536         | 'default' '(' comma_types0 ')'        { unitOL (LL $ DefD (DefaultDecl $3)) }
537         | 'foreign' fdecl                       { unitOL (LL (unLoc $2)) }
538         | '{-# DEPRECATED' deprecations '#-}'   { $2 }
539         | '{-# RULES' rules '#-}'               { $2 }
540         | decl                                  { unLoc $1 }
541
542         -- Template Haskell Extension
543         | '$(' exp ')'                          { unitOL (LL $ SpliceD (SpliceDecl $2)) }
544         | TH_ID_SPLICE                          { unitOL (LL $ SpliceD (SpliceDecl $
545                                                         L1 $ HsVar (mkUnqual varName (getTH_ID_SPLICE $1))
546                                                   )) }
547
548 -- Type classes
549 --
550 cl_decl :: { LTyClDecl RdrName }
551         : 'class' tycl_hdr fds where_cls
552                 {% do { let { (binds, sigs, ats, docs)           = 
553                                 cvBindsAndSigs (unLoc $4)
554                             ; (ctxt, tc, tvs, tparms) = unLoc $2}
555                       ; checkTyVars tparms      -- only type vars allowed
556                       ; checkKindSigs ats
557                       ; return $ L (comb4 $1 $2 $3 $4) 
558                                    (mkClassDecl (ctxt, tc, tvs) 
559                                                 (unLoc $3) sigs binds ats docs) } }
560
561 -- Type declarations (toplevel)
562 --
563 ty_decl :: { LTyClDecl RdrName }
564            -- ordinary type synonyms
565         : 'type' type '=' ctype
566                 -- Note ctype, not sigtype, on the right of '='
567                 -- We allow an explicit for-all but we don't insert one
568                 -- in   type Foo a = (b,b)
569                 -- Instead we just say b is out of scope
570                 --
571                 -- Note the use of type for the head; this allows
572                 -- infix type constructors to be declared 
573                 {% do { (tc, tvs, _) <- checkSynHdr $2 False
574                       ; return (L (comb2 $1 $4) 
575                                   (TySynonym tc tvs Nothing $4))
576                       } }
577
578            -- type family declarations
579         | 'type' 'family' type opt_kind_sig 
580                 -- Note the use of type for the head; this allows
581                 -- infix type constructors to be declared
582                 --
583                 {% do { (tc, tvs, _) <- checkSynHdr $3 False
584                       ; return (L (comb3 $1 $3 $4) 
585                                   (TyFamily TypeFamily tc tvs (unLoc $4)))
586                       } }
587
588            -- type instance declarations
589         | 'type' 'instance' type '=' ctype
590                 -- Note the use of type for the head; this allows
591                 -- infix type constructors and type patterns
592                 --
593                 {% do { (tc, tvs, typats) <- checkSynHdr $3 True
594                       ; return (L (comb2 $1 $5) 
595                                   (TySynonym tc tvs (Just typats) $5)) 
596                       } }
597
598           -- ordinary data type or newtype declaration
599         | data_or_newtype tycl_hdr constrs deriving
600                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $2}
601                       ; checkTyVars tparms    -- no type pattern
602                       ; return $
603                           L (comb4 $1 $2 $3 $4)
604                                    -- We need the location on tycl_hdr in case 
605                                    -- constrs and deriving are both empty
606                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Nothing) 
607                                Nothing (reverse (unLoc $3)) (unLoc $4)) } }
608
609           -- ordinary GADT declaration
610         | data_or_newtype tycl_hdr opt_kind_sig 
611                  'where' gadt_constrlist
612                  deriving
613                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $2}
614                       ; checkTyVars tparms    -- can have type pats
615                       ; return $
616                           L (comb4 $1 $2 $4 $5)
617                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Nothing) 
618                               (unLoc $3) (reverse (unLoc $5)) (unLoc $6)) } }
619
620           -- data/newtype family
621         | 'data' 'family' tycl_hdr opt_kind_sig
622                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $3}
623                       ; checkTyVars tparms            -- no type pattern
624                       ; unless (null (unLoc ctxt)) $  -- and no context
625                           parseError (getLoc ctxt) 
626                             "A family declaration cannot have a context"
627                       ; return $
628                           L (comb3 $1 $2 $4)
629                             (TyFamily DataFamily tc tvs (unLoc $4)) } }
630
631           -- data/newtype instance declaration
632         | data_or_newtype 'instance' tycl_hdr constrs deriving
633                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $3}
634                                              -- can have type pats
635                       ; return $
636                           L (comb4 $1 $3 $4 $5)
637                                    -- We need the location on tycl_hdr in case 
638                                    -- constrs and deriving are both empty
639                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Just tparms) 
640                               Nothing (reverse (unLoc $4)) (unLoc $5)) } }
641
642           -- GADT instance declaration
643         | data_or_newtype 'instance' tycl_hdr opt_kind_sig 
644                  'where' gadt_constrlist
645                  deriving
646                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $3}
647                                              -- can have type pats
648                       ; return $
649                           L (comb4 $1 $3 $6 $7)
650                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Just tparms) 
651                                (unLoc $4) (reverse (unLoc $6)) (unLoc $7)) } }
652
653 -- Associate type family declarations
654 --
655 -- * They have a different syntax than on the toplevel (no family special
656 --   identifier).
657 --
658 -- * They also need to be separate from instances; otherwise, data family
659 --   declarations without a kind signature cause parsing conflicts with empty
660 --   data declarations. 
661 --
662 at_decl_cls :: { LTyClDecl RdrName }
663            -- type family declarations
664         : 'type' type opt_kind_sig
665                 -- Note the use of type for the head; this allows
666                 -- infix type constructors to be declared
667                 --
668                 {% do { (tc, tvs, _) <- checkSynHdr $2 False
669                       ; return (L (comb3 $1 $2 $3) 
670                                   (TyFamily TypeFamily tc tvs (unLoc $3)))
671                       } }
672
673            -- default type instance
674         | 'type' type '=' ctype
675                 -- Note the use of type for the head; this allows
676                 -- infix type constructors and type patterns
677                 --
678                 {% do { (tc, tvs, typats) <- checkSynHdr $2 True
679                       ; return (L (comb2 $1 $4) 
680                                   (TySynonym tc tvs (Just typats) $4)) 
681                       } }
682
683           -- data/newtype family declaration
684         | 'data' tycl_hdr opt_kind_sig
685                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $2}
686                       ; checkTyVars tparms            -- no type pattern
687                       ; unless (null (unLoc ctxt)) $  -- and no context
688                           parseError (getLoc ctxt) 
689                             "A family declaration cannot have a context"
690                       ; return $
691                           L (comb3 $1 $2 $3)
692                             (TyFamily DataFamily tc tvs (unLoc $3)) 
693                       } }
694
695 -- Associate type instances
696 --
697 at_decl_inst :: { LTyClDecl RdrName }
698            -- type instance declarations
699         : 'type' type '=' ctype
700                 -- Note the use of type for the head; this allows
701                 -- infix type constructors and type patterns
702                 --
703                 {% do { (tc, tvs, typats) <- checkSynHdr $2 True
704                       ; return (L (comb2 $1 $4) 
705                                   (TySynonym tc tvs (Just typats) $4)) 
706                       } }
707
708         -- data/newtype instance declaration
709         | data_or_newtype tycl_hdr constrs deriving
710                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $2}
711                                              -- can have type pats
712                       ; return $
713                           L (comb4 $1 $2 $3 $4)
714                                    -- We need the location on tycl_hdr in case 
715                                    -- constrs and deriving are both empty
716                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Just tparms) 
717                               Nothing (reverse (unLoc $3)) (unLoc $4)) } }
718
719         -- GADT instance declaration
720         | data_or_newtype tycl_hdr opt_kind_sig 
721                  'where' gadt_constrlist
722                  deriving
723                 {% do { let {(ctxt, tc, tvs, tparms) = unLoc $2}
724                                              -- can have type pats
725                       ; return $
726                           L (comb4 $1 $2 $5 $6)
727                             (mkTyData (unLoc $1) (ctxt, tc, tvs, Just tparms) 
728                              (unLoc $3) (reverse (unLoc $5)) (unLoc $6)) } }
729
730 data_or_newtype :: { Located NewOrData }
731         : 'data'        { L1 DataType }
732         | 'newtype'     { L1 NewType }
733
734 opt_kind_sig :: { Located (Maybe Kind) }
735         :                               { noLoc Nothing }
736         | '::' kind                     { LL (Just (unLoc $2)) }
737
738 -- tycl_hdr parses the header of a class or data type decl,
739 -- which takes the form
740 --      T a b
741 --      Eq a => T a
742 --      (Eq a, Ord b) => T a b
743 --      T Int [a]                       -- for associated types
744 -- Rather a lot of inlining here, else we get reduce/reduce errors
745 tycl_hdr :: { Located (LHsContext RdrName, 
746                        Located RdrName, 
747                        [LHsTyVarBndr RdrName],
748                        [LHsType RdrName]) }
749         : context '=>' type             {% checkTyClHdr $1         $3 >>= return.LL }
750         | type                          {% checkTyClHdr (noLoc []) $1 >>= return.L1 }
751
752 -----------------------------------------------------------------------------
753 -- Stand-alone deriving
754
755 -- Glasgow extension: stand-alone deriving declarations
756 stand_alone_deriving :: { LDerivDecl RdrName }
757         : 'derive' 'instance' inst_type {% checkDerivDecl (LL (DerivDecl $3)) }
758
759 -----------------------------------------------------------------------------
760 -- Nested declarations
761
762 -- Declaration in class bodies
763 --
764 decl_cls  :: { Located (OrdList (LHsDecl RdrName)) }
765 decl_cls  : at_decl_cls                 { LL (unitOL (L1 (TyClD (unLoc $1)))) }
766           | decl                        { $1 }
767
768 decls_cls :: { Located (OrdList (LHsDecl RdrName)) }    -- Reversed
769           : decls_cls ';' decl_cls      { LL (unLoc $1 `appOL` unLoc $3) }
770           | decls_cls ';'               { LL (unLoc $1) }
771           | decl_cls                    { $1 }
772           | {- empty -}                 { noLoc nilOL }
773
774
775 decllist_cls
776         :: { Located (OrdList (LHsDecl RdrName)) }      -- Reversed
777         : '{'         decls_cls '}'     { LL (unLoc $2) }
778         |     vocurly decls_cls close   { $2 }
779
780 -- Class body
781 --
782 where_cls :: { Located (OrdList (LHsDecl RdrName)) }    -- Reversed
783                                 -- No implicit parameters
784                                 -- May have type declarations
785         : 'where' decllist_cls          { LL (unLoc $2) }
786         | {- empty -}                   { noLoc nilOL }
787
788 -- Declarations in instance bodies
789 --
790 decl_inst  :: { Located (OrdList (LHsDecl RdrName)) }
791 decl_inst  : at_decl_inst               { LL (unitOL (L1 (TyClD (unLoc $1)))) }
792            | decl                       { $1 }
793
794 decls_inst :: { Located (OrdList (LHsDecl RdrName)) }   -- Reversed
795            : decls_inst ';' decl_inst   { LL (unLoc $1 `appOL` unLoc $3) }
796            | decls_inst ';'             { LL (unLoc $1) }
797            | decl_inst                  { $1 }
798            | {- empty -}                { noLoc nilOL }
799
800 decllist_inst 
801         :: { Located (OrdList (LHsDecl RdrName)) }      -- Reversed
802         : '{'         decls_inst '}'    { LL (unLoc $2) }
803         |     vocurly decls_inst close  { $2 }
804
805 -- Instance body
806 --
807 where_inst :: { Located (OrdList (LHsDecl RdrName)) }   -- Reversed
808                                 -- No implicit parameters
809                                 -- May have type declarations
810         : 'where' decllist_inst         { LL (unLoc $2) }
811         | {- empty -}                   { noLoc nilOL }
812
813 -- Declarations in binding groups other than classes and instances
814 --
815 decls   :: { Located (OrdList (LHsDecl RdrName)) }      
816         : decls ';' decl                { LL (unLoc $1 `appOL` unLoc $3) }
817         | decls ';'                     { LL (unLoc $1) }
818         | decl                          { $1 }
819         | {- empty -}                   { noLoc nilOL }
820
821 decllist :: { Located (OrdList (LHsDecl RdrName)) }
822         : '{'            decls '}'      { LL (unLoc $2) }
823         |     vocurly    decls close    { $2 }
824
825 -- Binding groups other than those of class and instance declarations
826 --
827 binds   ::  { Located (HsLocalBinds RdrName) }          -- May have implicit parameters
828                                                 -- No type declarations
829         : decllist                      { L1 (HsValBinds (cvBindGroup (unLoc $1))) }
830         | '{'            dbinds '}'     { LL (HsIPBinds (IPBinds (unLoc $2) emptyLHsBinds)) }
831         |     vocurly    dbinds close   { L (getLoc $2) (HsIPBinds (IPBinds (unLoc $2) emptyLHsBinds)) }
832
833 wherebinds :: { Located (HsLocalBinds RdrName) }        -- May have implicit parameters
834                                                 -- No type declarations
835         : 'where' binds                 { LL (unLoc $2) }
836         | {- empty -}                   { noLoc emptyLocalBinds }
837
838
839 -----------------------------------------------------------------------------
840 -- Transformation Rules
841
842 rules   :: { OrdList (LHsDecl RdrName) }
843         :  rules ';' rule                       { $1 `snocOL` $3 }
844         |  rules ';'                            { $1 }
845         |  rule                                 { unitOL $1 }
846         |  {- empty -}                          { nilOL }
847
848 rule    :: { LHsDecl RdrName }
849         : STRING activation rule_forall infixexp '=' exp
850              { LL $ RuleD (HsRule (getSTRING $1) 
851                                   ($2 `orElse` AlwaysActive) 
852                                   $3 $4 placeHolderNames $6 placeHolderNames) }
853
854 activation :: { Maybe Activation } 
855         : {- empty -}                           { Nothing }
856         | explicit_activation                   { Just $1 }
857
858 explicit_activation :: { Activation }  -- In brackets
859         : '[' INTEGER ']'               { ActiveAfter  (fromInteger (getINTEGER $2)) }
860         | '[' '~' INTEGER ']'           { ActiveBefore (fromInteger (getINTEGER $3)) }
861
862 rule_forall :: { [RuleBndr RdrName] }
863         : 'forall' rule_var_list '.'            { $2 }
864         | {- empty -}                           { [] }
865
866 rule_var_list :: { [RuleBndr RdrName] }
867         : rule_var                              { [$1] }
868         | rule_var rule_var_list                { $1 : $2 }
869
870 rule_var :: { RuleBndr RdrName }
871         : varid                                 { RuleBndr $1 }
872         | '(' varid '::' ctype ')'              { RuleBndrSig $2 $4 }
873
874 -----------------------------------------------------------------------------
875 -- Deprecations (c.f. rules)
876
877 deprecations :: { OrdList (LHsDecl RdrName) }
878         : deprecations ';' deprecation          { $1 `appOL` $3 }
879         | deprecations ';'                      { $1 }
880         | deprecation                           { $1 }
881         | {- empty -}                           { nilOL }
882
883 -- SUP: TEMPORARY HACK, not checking for `module Foo'
884 deprecation :: { OrdList (LHsDecl RdrName) }
885         : depreclist STRING
886                 { toOL [ LL $ DeprecD (Deprecation n (getSTRING $2)) 
887                        | n <- unLoc $1 ] }
888
889
890 -----------------------------------------------------------------------------
891 -- Foreign import and export declarations
892
893 fdecl :: { LHsDecl RdrName }
894 fdecl : 'import' callconv safety fspec
895                 {% mkImport $2 $3 (unLoc $4) >>= return.LL }
896       | 'import' callconv        fspec          
897                 {% do { d <- mkImport $2 (PlaySafe False) (unLoc $3);
898                         return (LL d) } }
899       | 'export' callconv fspec
900                 {% mkExport $2 (unLoc $3) >>= return.LL }
901
902 callconv :: { CallConv }
903           : 'stdcall'                   { CCall  StdCallConv }
904           | 'ccall'                     { CCall  CCallConv   }
905           | 'dotnet'                    { DNCall             }
906
907 safety :: { Safety }
908         : 'unsafe'                      { PlayRisky }
909         | 'safe'                        { PlaySafe  False }
910         | 'threadsafe'                  { PlaySafe  True }
911
912 fspec :: { Located (Located FastString, Located RdrName, LHsType RdrName) }
913        : STRING var '::' sigtypedoc     { LL (L (getLoc $1) (getSTRING $1), $2, $4) }
914        |        var '::' sigtypedoc     { LL (noLoc nilFS, $1, $3) }
915          -- if the entity string is missing, it defaults to the empty string;
916          -- the meaning of an empty entity string depends on the calling
917          -- convention
918
919 -----------------------------------------------------------------------------
920 -- Type signatures
921
922 opt_sig :: { Maybe (LHsType RdrName) }
923         : {- empty -}                   { Nothing }
924         | '::' sigtype                  { Just $2 }
925
926 opt_asig :: { Maybe (LHsType RdrName) }
927         : {- empty -}                   { Nothing }
928         | '::' atype                    { Just $2 }
929
930 sigtypes1 :: { [LHsType RdrName] }
931         : sigtype                       { [ $1 ] }
932         | sigtype ',' sigtypes1         { $1 : $3 }
933
934 sigtype :: { LHsType RdrName }
935         : ctype                         { L1 (mkImplicitHsForAllTy (noLoc []) $1) }
936         -- Wrap an Implicit forall if there isn't one there already
937
938 sigtypedoc :: { LHsType RdrName }
939         : ctypedoc                      { L1 (mkImplicitHsForAllTy (noLoc []) $1) }
940         -- Wrap an Implicit forall if there isn't one there already
941
942 sig_vars :: { Located [Located RdrName] }
943          : sig_vars ',' var             { LL ($3 : unLoc $1) }
944          | var                          { L1 [$1] }
945
946 -----------------------------------------------------------------------------
947 -- Types
948
949 infixtype :: { LHsType RdrName }
950         : btype qtyconop gentype         { LL $ HsOpTy $1 $2 $3 }
951         | btype tyvarop  gentype         { LL $ HsOpTy $1 $2 $3 }
952
953 infixtypedoc :: { LHsType RdrName }
954         : infixtype                      { $1 }
955         | infixtype docprev              { LL $ HsDocTy $1 $2 }
956
957 gentypedoc :: { LHsType RdrName }
958         : btype                          { $1 }
959         | btypedoc                       { $1 }
960         | infixtypedoc                   { $1 }
961         | btype '->' ctypedoc            { LL $ HsFunTy $1 $3 }
962         | btypedoc '->' ctypedoc         { LL $ HsFunTy $1 $3 }
963
964 ctypedoc  :: { LHsType RdrName }
965         : 'forall' tv_bndrs '.' ctypedoc { LL $ mkExplicitHsForAllTy $2 (noLoc []) $4 }
966         | context '=>' gentypedoc        { LL $ mkImplicitHsForAllTy   $1 $3 }
967         -- A type of form (context => type) is an *implicit* HsForAllTy
968         | gentypedoc                     { $1 }
969         
970 strict_mark :: { Located HsBang }
971         : '!'                           { L1 HsStrict }
972         | '{-# UNPACK' '#-}' '!'        { LL HsUnbox }
973
974 -- A ctype is a for-all type
975 ctype   :: { LHsType RdrName }
976         : 'forall' tv_bndrs '.' ctype   { LL $ mkExplicitHsForAllTy $2 (noLoc []) $4 }
977         | context '=>' type             { LL $ mkImplicitHsForAllTy   $1 $3 }
978         -- A type of form (context => type) is an *implicit* HsForAllTy
979         | type                          { $1 }
980
981 -- We parse a context as a btype so that we don't get reduce/reduce
982 -- errors in ctype.  The basic problem is that
983 --      (Eq a, Ord a)
984 -- looks so much like a tuple type.  We can't tell until we find the =>
985 --
986 -- We have the t1 ~ t2 form here and in gentype, to permit an individual
987 -- equational constraint without parenthesis.
988 context :: { LHsContext RdrName }
989         : btype '~'      btype          {% checkContext
990                                              (LL $ HsPredTy (HsEqualP $1 $3)) }
991         | btype                         {% checkContext $1 }
992
993 type :: { LHsType RdrName }
994         : ipvar '::' gentype            { LL (HsPredTy (HsIParam (unLoc $1) $3)) }
995         | gentype                       { $1 }
996
997 gentype :: { LHsType RdrName }
998         : btype                         { $1 }
999         | btype qtyconop gentype        { LL $ HsOpTy $1 $2 $3 }
1000         | btype tyvarop  gentype        { LL $ HsOpTy $1 $2 $3 }
1001         | btype '->'     ctype          { LL $ HsFunTy $1 $3 }
1002         | btype '~'      btype          { LL $ HsPredTy (HsEqualP $1 $3) }
1003
1004 btype :: { LHsType RdrName }
1005         : btype atype                   { LL $ HsAppTy $1 $2 }
1006         | atype                         { $1 }
1007
1008 btypedoc :: { LHsType RdrName }
1009         : btype atype docprev           { LL $ HsDocTy (L (comb2 $1 $2) (HsAppTy $1 $2)) $3 }
1010         | atype docprev                 { LL $ HsDocTy $1 $2 }
1011
1012 atype :: { LHsType RdrName }
1013         : gtycon                        { L1 (HsTyVar (unLoc $1)) }
1014         | tyvar                         { L1 (HsTyVar (unLoc $1)) }
1015         | strict_mark atype             { LL (HsBangTy (unLoc $1) $2) }
1016         | '(' ctype ',' comma_types1 ')'  { LL $ HsTupleTy Boxed  ($2:$4) }
1017         | '(#' comma_types1 '#)'        { LL $ HsTupleTy Unboxed $2     }
1018         | '[' ctype ']'                 { LL $ HsListTy  $2 }
1019         | '[:' ctype ':]'               { LL $ HsPArrTy  $2 }
1020         | '(' ctype ')'                 { LL $ HsParTy   $2 }
1021         | '(' ctype '::' kind ')'       { LL $ HsKindSig $2 (unLoc $4) }
1022 -- Generics
1023         | INTEGER                       { L1 (HsNumTy (getINTEGER $1)) }
1024
1025 -- An inst_type is what occurs in the head of an instance decl
1026 --      e.g.  (Foo a, Gaz b) => Wibble a b
1027 -- It's kept as a single type, with a MonoDictTy at the right
1028 -- hand corner, for convenience.
1029 inst_type :: { LHsType RdrName }
1030         : sigtype                       {% checkInstType $1 }
1031
1032 inst_types1 :: { [LHsType RdrName] }
1033         : inst_type                     { [$1] }
1034         | inst_type ',' inst_types1     { $1 : $3 }
1035
1036 comma_types0  :: { [LHsType RdrName] }
1037         : comma_types1                  { $1 }
1038         | {- empty -}                   { [] }
1039
1040 comma_types1    :: { [LHsType RdrName] }
1041         : ctype                         { [$1] }
1042         | ctype  ',' comma_types1       { $1 : $3 }
1043
1044 tv_bndrs :: { [LHsTyVarBndr RdrName] }
1045          : tv_bndr tv_bndrs             { $1 : $2 }
1046          | {- empty -}                  { [] }
1047
1048 tv_bndr :: { LHsTyVarBndr RdrName }
1049         : tyvar                         { L1 (UserTyVar (unLoc $1)) }
1050         | '(' tyvar '::' kind ')'       { LL (KindedTyVar (unLoc $2) 
1051                                                           (unLoc $4)) }
1052
1053 fds :: { Located [Located ([RdrName], [RdrName])] }
1054         : {- empty -}                   { noLoc [] }
1055         | '|' fds1                      { LL (reverse (unLoc $2)) }
1056
1057 fds1 :: { Located [Located ([RdrName], [RdrName])] }
1058         : fds1 ',' fd                   { LL ($3 : unLoc $1) }
1059         | fd                            { L1 [$1] }
1060
1061 fd :: { Located ([RdrName], [RdrName]) }
1062         : varids0 '->' varids0          { L (comb3 $1 $2 $3)
1063                                            (reverse (unLoc $1), reverse (unLoc $3)) }
1064
1065 varids0 :: { Located [RdrName] }
1066         : {- empty -}                   { noLoc [] }
1067         | varids0 tyvar                 { LL (unLoc $2 : unLoc $1) }
1068
1069 -----------------------------------------------------------------------------
1070 -- Kinds
1071
1072 kind    :: { Located Kind }
1073         : akind                 { $1 }
1074         | akind '->' kind       { LL (mkArrowKind (unLoc $1) (unLoc $3)) }
1075
1076 akind   :: { Located Kind }
1077         : '*'                   { L1 liftedTypeKind }
1078         | '!'                   { L1 unliftedTypeKind }
1079         | '(' kind ')'          { LL (unLoc $2) }
1080
1081
1082 -----------------------------------------------------------------------------
1083 -- Datatype declarations
1084
1085 gadt_constrlist :: { Located [LConDecl RdrName] }
1086         : '{'            gadt_constrs '}'       { LL (unLoc $2) }
1087         |     vocurly    gadt_constrs close     { $2 }
1088
1089 gadt_constrs :: { Located [LConDecl RdrName] }
1090         : gadt_constrs ';' gadt_constr  { LL ($3 : unLoc $1) }
1091         | gadt_constrs ';'              { $1 }
1092         | gadt_constr                   { L1 [$1] } 
1093
1094 -- We allow the following forms:
1095 --      C :: Eq a => a -> T a
1096 --      C :: forall a. Eq a => !a -> T a
1097 --      D { x,y :: a } :: T a
1098 --      forall a. Eq a => D { x,y :: a } :: T a
1099
1100 gadt_constr :: { LConDecl RdrName }
1101         : con '::' sigtype
1102               { LL (mkGadtDecl $1 $3) } 
1103         -- Syntax: Maybe merge the record stuff with the single-case above?
1104         --         (to kill the mostly harmless reduce/reduce error)
1105         -- XXX revisit audreyt
1106         | constr_stuff_record '::' sigtype
1107                 { let (con,details) = unLoc $1 in 
1108                   LL (ConDecl con Implicit [] (noLoc []) details (ResTyGADT $3) Nothing) }
1109 {-
1110         | forall context '=>' constr_stuff_record '::' sigtype
1111                 { let (con,details) = unLoc $4 in 
1112                   LL (ConDecl con Implicit (unLoc $1) $2 details (ResTyGADT $6) Nothing ) }
1113         | forall constr_stuff_record '::' sigtype
1114                 { let (con,details) = unLoc $2 in 
1115                   LL (ConDecl con Implicit (unLoc $1) (noLoc []) details (ResTyGADT $4) Nothing) }
1116 -}
1117
1118
1119 constrs :: { Located [LConDecl RdrName] }
1120         : {- empty; a GHC extension -}  { noLoc [] }
1121         | maybe_docnext '=' constrs1    { L (comb2 $2 $3) (addConDocs (unLoc $3) $1) }
1122
1123 constrs1 :: { Located [LConDecl RdrName] }
1124         : constrs1 maybe_docnext '|' maybe_docprev constr { LL (addConDoc $5 $2 : addConDocFirst (unLoc $1) $4) }
1125         | constr                                          { L1 [$1] }
1126
1127 constr :: { LConDecl RdrName }
1128         : maybe_docnext forall context '=>' constr_stuff maybe_docprev  
1129                 { let (con,details) = unLoc $5 in 
1130                   L (comb4 $2 $3 $4 $5) (ConDecl con Explicit (unLoc $2) $3 details ResTyH98 ($1 `mplus` $6)) }
1131         | maybe_docnext forall constr_stuff maybe_docprev
1132                 { let (con,details) = unLoc $3 in 
1133                   L (comb2 $2 $3) (ConDecl con Explicit (unLoc $2) (noLoc []) details ResTyH98 ($1 `mplus` $4)) }
1134
1135 forall :: { Located [LHsTyVarBndr RdrName] }
1136         : 'forall' tv_bndrs '.'         { LL $2 }
1137         | {- empty -}                   { noLoc [] }
1138
1139 constr_stuff :: { Located (Located RdrName, HsConDetails RdrName (LBangType RdrName)) }
1140 -- We parse the constructor declaration 
1141 --      C t1 t2
1142 -- as a btype (treating C as a type constructor) and then convert C to be
1143 -- a data constructor.  Reason: it might continue like this:
1144 --      C t1 t2 %: D Int
1145 -- in which case C really would be a type constructor.  We can't resolve this
1146 -- ambiguity till we come across the constructor oprerator :% (or not, more usually)
1147         : btype                         {% mkPrefixCon $1 [] >>= return.LL }
1148         | oqtycon '{' '}'               {% mkRecCon $1 [] >>= return.LL }
1149         | oqtycon '{' fielddecls '}'    {% mkRecCon $1 $3 >>= return.LL }
1150         | btype conop btype             { LL ($2, InfixCon $1 $3) }
1151
1152 constr_stuff_record :: { Located (Located RdrName, HsConDetails RdrName (LBangType RdrName)) }
1153         : oqtycon '{' '}'               {% mkRecCon $1 [] >>= return.sL (comb2 $1 $>) }
1154         | oqtycon '{' fielddecls '}'    {% mkRecCon $1 $3 >>= return.sL (comb2 $1 $>) }
1155
1156 fielddecls :: { [([Located RdrName], LBangType RdrName, Maybe (LHsDoc RdrName))] }
1157         : fielddecl maybe_docnext ',' maybe_docprev fielddecls { addFieldDoc (unLoc $1) $4 : addFieldDocs $5 $2 }
1158         | fielddecl                                            { [unLoc $1] }
1159
1160 fielddecl :: { Located ([Located RdrName], LBangType RdrName, Maybe (LHsDoc RdrName)) }
1161         : maybe_docnext sig_vars '::' ctype maybe_docprev      { L (comb3 $2 $3 $4) (reverse (unLoc $2), $4, $1 `mplus` $5) }
1162
1163 -- We allow the odd-looking 'inst_type' in a deriving clause, so that
1164 -- we can do deriving( forall a. C [a] ) in a newtype (GHC extension).
1165 -- The 'C [a]' part is converted to an HsPredTy by checkInstType
1166 -- We don't allow a context, but that's sorted out by the type checker.
1167 deriving :: { Located (Maybe [LHsType RdrName]) }
1168         : {- empty -}                           { noLoc Nothing }
1169         | 'deriving' qtycon     {% do { let { L loc tv = $2 }
1170                                       ; p <- checkInstType (L loc (HsTyVar tv))
1171                                       ; return (LL (Just [p])) } }
1172         | 'deriving' '(' ')'                    { LL (Just []) }
1173         | 'deriving' '(' inst_types1 ')'        { LL (Just $3) }
1174              -- Glasgow extension: allow partial 
1175              -- applications in derivings
1176
1177 -----------------------------------------------------------------------------
1178 -- Value definitions
1179
1180 {- There's an awkward overlap with a type signature.  Consider
1181         f :: Int -> Int = ...rhs...
1182    Then we can't tell whether it's a type signature or a value
1183    definition with a result signature until we see the '='.
1184    So we have to inline enough to postpone reductions until we know.
1185 -}
1186
1187 {-
1188   ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var
1189   instead of qvar, we get another shift/reduce-conflict. Consider the
1190   following programs:
1191   
1192      { (^^) :: Int->Int ; }          Type signature; only var allowed
1193
1194      { (^^) :: Int->Int = ... ; }    Value defn with result signature;
1195                                      qvar allowed (because of instance decls)
1196   
1197   We can't tell whether to reduce var to qvar until after we've read the signatures.
1198 -}
1199
1200 docdecl :: { LHsDecl RdrName }
1201         : docdecld { L1 (DocD (unLoc $1)) }
1202
1203 docdecld :: { LDocDecl RdrName }
1204         : docnext                               { L1 (DocCommentNext (unLoc $1)) }
1205         | docprev                               { L1 (DocCommentPrev (unLoc $1)) }
1206         | docnamed                              { L1 (case (unLoc $1) of (n, doc) -> DocCommentNamed n doc) }
1207         | docsection                            { L1 (case (unLoc $1) of (n, doc) -> DocGroup n doc) }
1208
1209 decl    :: { Located (OrdList (LHsDecl RdrName)) }
1210         : sigdecl                       { $1 }
1211         | '!' aexp rhs                  {% do { pat <- checkPattern $2;
1212                                                 return (LL $ unitOL $ LL $ ValD ( 
1213                                                         PatBind (LL $ BangPat pat) (unLoc $3)
1214                                                                 placeHolderType placeHolderNames)) } }
1215         | infixexp opt_sig rhs          {% do { r <- checkValDef $1 $2 $3;
1216                                                 return (LL $ unitOL (LL $ ValD r)) } }
1217         | docdecl                       { LL $ unitOL $1 }
1218
1219 rhs     :: { Located (GRHSs RdrName) }
1220         : '=' exp wherebinds    { L (comb3 $1 $2 $3) $ GRHSs (unguardedRHS $2) (unLoc $3) }
1221         | gdrhs wherebinds      { LL $ GRHSs (reverse (unLoc $1)) (unLoc $2) }
1222
1223 gdrhs :: { Located [LGRHS RdrName] }
1224         : gdrhs gdrh            { LL ($2 : unLoc $1) }
1225         | gdrh                  { L1 [$1] }
1226
1227 gdrh :: { LGRHS RdrName }
1228         : '|' quals '=' exp     { sL (comb2 $1 $>) $ GRHS (reverse (unLoc $2)) $4 }
1229
1230 sigdecl :: { Located (OrdList (LHsDecl RdrName)) }
1231         : infixexp '::' sigtypedoc
1232                                 {% do s <- checkValSig $1 $3; 
1233                                       return (LL $ unitOL (LL $ SigD s)) }
1234                 -- See the above notes for why we need infixexp here
1235         | var ',' sig_vars '::' sigtypedoc
1236                                 { LL $ toOL [ LL $ SigD (TypeSig n $5) | n <- $1 : unLoc $3 ] }
1237         | infix prec ops        { LL $ toOL [ LL $ SigD (FixSig (FixitySig n (Fixity $2 (unLoc $1))))
1238                                              | n <- unLoc $3 ] }
1239         | '{-# INLINE'   activation qvar '#-}'        
1240                                 { LL $ unitOL (LL $ SigD (InlineSig $3 (mkInlineSpec $2 (getINLINE $1)))) }
1241         | '{-# SPECIALISE' qvar '::' sigtypes1 '#-}'
1242                                 { LL $ toOL [ LL $ SigD (SpecSig $2 t defaultInlineSpec) 
1243                                             | t <- $4] }
1244         | '{-# SPECIALISE_INLINE' activation qvar '::' sigtypes1 '#-}'
1245                                 { LL $ toOL [ LL $ SigD (SpecSig $3 t (mkInlineSpec $2 (getSPEC_INLINE $1)))
1246                                             | t <- $5] }
1247         | '{-# SPECIALISE' 'instance' inst_type '#-}'
1248                                 { LL $ unitOL (LL $ SigD (SpecInstSig $3)) }
1249
1250 -----------------------------------------------------------------------------
1251 -- Expressions
1252
1253 exp   :: { LHsExpr RdrName }
1254         : infixexp '::' sigtype         { LL $ ExprWithTySig $1 $3 }
1255         | infixexp '-<' exp             { LL $ HsArrApp $1 $3 placeHolderType HsFirstOrderApp True }
1256         | infixexp '>-' exp             { LL $ HsArrApp $3 $1 placeHolderType HsFirstOrderApp False }
1257         | infixexp '-<<' exp            { LL $ HsArrApp $1 $3 placeHolderType HsHigherOrderApp True }
1258         | infixexp '>>-' exp            { LL $ HsArrApp $3 $1 placeHolderType HsHigherOrderApp False}
1259         | infixexp                      { $1 }
1260
1261 infixexp :: { LHsExpr RdrName }
1262         : exp10                         { $1 }
1263         | infixexp qop exp10            { LL (OpApp $1 $2 (panic "fixity") $3) }
1264
1265 exp10 :: { LHsExpr RdrName }
1266         : '\\' apat apats opt_asig '->' exp     
1267                         { LL $ HsLam (mkMatchGroup [LL $ Match ($2:$3) $4
1268                                                                 (unguardedGRHSs $6)
1269                                                             ]) }
1270         | 'let' binds 'in' exp                  { LL $ HsLet (unLoc $2) $4 }
1271         | 'if' exp 'then' exp 'else' exp        { LL $ HsIf $2 $4 $6 }
1272         | 'case' exp 'of' altslist              { LL $ HsCase $2 (mkMatchGroup (unLoc $4)) }
1273         | '-' fexp                              { LL $ mkHsNegApp $2 }
1274
1275         | 'do' stmtlist                 {% let loc = comb2 $1 $2 in
1276                                            checkDo loc (unLoc $2)  >>= \ (stmts,body) ->
1277                                            return (L loc (mkHsDo DoExpr stmts body)) }
1278         | 'mdo' stmtlist                {% let loc = comb2 $1 $2 in
1279                                            checkDo loc (unLoc $2)  >>= \ (stmts,body) ->
1280                                            return (L loc (mkHsDo (MDoExpr noPostTcTable) stmts body)) }
1281         | scc_annot exp                         { LL $ if opt_SccProfilingOn
1282                                                         then HsSCC (unLoc $1) $2
1283                                                         else HsPar $2 }
1284         | hpc_annot exp                         { LL $ if opt_Hpc
1285                                                         then HsTickPragma (unLoc $1) $2
1286                                                         else HsPar $2 }
1287
1288         | 'proc' aexp '->' exp  
1289                         {% checkPattern $2 >>= \ p -> 
1290                            return (LL $ HsProc p (LL $ HsCmdTop $4 [] 
1291                                                    placeHolderType undefined)) }
1292                                                 -- TODO: is LL right here?
1293
1294         | '{-# CORE' STRING '#-}' exp           { LL $ HsCoreAnn (getSTRING $2) $4 }
1295                                                     -- hdaume: core annotation
1296         | fexp                                  { $1 }
1297
1298 scc_annot :: { Located FastString }
1299         : '_scc_' STRING                        { LL $ getSTRING $2 }
1300         | '{-# SCC' STRING '#-}'                { LL $ getSTRING $2 }
1301
1302 hpc_annot :: { Located (FastString,(Int,Int),(Int,Int)) }
1303         : '{-# GENERATED' STRING INTEGER ':' INTEGER '-' INTEGER ':' INTEGER '#-}'
1304                                                 { LL $ (getSTRING $2
1305                                                        ,( fromInteger $ getINTEGER $3
1306                                                         , fromInteger $ getINTEGER $5
1307                                                         )
1308                                                        ,( fromInteger $ getINTEGER $7
1309                                                         , fromInteger $ getINTEGER $9
1310                                                         )
1311                                                        )
1312                                                  }
1313
1314 fexp    :: { LHsExpr RdrName }
1315         : fexp aexp                             { LL $ HsApp $1 $2 }
1316         | aexp                                  { $1 }
1317
1318 aexp    :: { LHsExpr RdrName }
1319         : qvar '@' aexp                 { LL $ EAsPat $1 $3 }
1320         | '~' aexp                      { LL $ ELazyPat $2 }
1321         | aexp1                         { $1 }
1322
1323 aexp1   :: { LHsExpr RdrName }
1324         : aexp1 '{' fbinds '}'  {% do { r <- mkRecConstrOrUpdate $1 (comb2 $2 $4) 
1325                                                         $3;
1326                                         return (LL r) }}
1327         | aexp2                 { $1 }
1328
1329 -- Here was the syntax for type applications that I was planning
1330 -- but there are difficulties (e.g. what order for type args)
1331 -- so it's not enabled yet.
1332 -- But this case *is* used for the left hand side of a generic definition,
1333 -- which is parsed as an expression before being munged into a pattern
1334         | qcname '{|' gentype '|}'      { LL $ HsApp (sL (getLoc $1) (HsVar (unLoc $1)))
1335                                                      (sL (getLoc $3) (HsType $3)) }
1336
1337 aexp2   :: { LHsExpr RdrName }
1338         : ipvar                         { L1 (HsIPVar $! unLoc $1) }
1339         | qcname                        { L1 (HsVar   $! unLoc $1) }
1340         | literal                       { L1 (HsLit   $! unLoc $1) }
1341 -- This will enable overloaded strings permanently.  Normally the renamer turns HsString
1342 -- into HsOverLit when -foverloaded-strings is on.
1343 --      | STRING                        { L1 (HsOverLit $! mkHsIsString (getSTRING $1)) }
1344         | INTEGER                       { L1 (HsOverLit $! mkHsIntegral (getINTEGER $1)) }
1345         | RATIONAL                      { L1 (HsOverLit $! mkHsFractional (getRATIONAL $1)) }
1346         | '(' exp ')'                   { LL (HsPar $2) }
1347         | '(' texp ',' texps ')'        { LL $ ExplicitTuple ($2 : reverse $4) Boxed }
1348         | '(#' texps '#)'               { LL $ ExplicitTuple (reverse $2)      Unboxed }
1349         | '[' list ']'                  { LL (unLoc $2) }
1350         | '[:' parr ':]'                { LL (unLoc $2) }
1351         | '(' infixexp qop ')'          { LL $ SectionL $2 $3 }
1352         | '(' qopm infixexp ')'         { LL $ SectionR $2 $3 }
1353         | '_'                           { L1 EWildPat }
1354         
1355         -- Template Haskell Extension
1356         | TH_ID_SPLICE          { L1 $ HsSpliceE (mkHsSplice 
1357                                         (L1 $ HsVar (mkUnqual varName 
1358                                                         (getTH_ID_SPLICE $1)))) } -- $x
1359         | '$(' exp ')'          { LL $ HsSpliceE (mkHsSplice $2) }               -- $( exp )
1360
1361         | TH_VAR_QUOTE qvar     { LL $ HsBracket (VarBr (unLoc $2)) }
1362         | TH_VAR_QUOTE qcon     { LL $ HsBracket (VarBr (unLoc $2)) }
1363         | TH_TY_QUOTE tyvar     { LL $ HsBracket (VarBr (unLoc $2)) }
1364         | TH_TY_QUOTE gtycon    { LL $ HsBracket (VarBr (unLoc $2)) }
1365         | '[|' exp '|]'         { LL $ HsBracket (ExpBr $2) }                       
1366         | '[t|' ctype '|]'      { LL $ HsBracket (TypBr $2) }                       
1367         | '[p|' infixexp '|]'   {% checkPattern $2 >>= \p ->
1368                                         return (LL $ HsBracket (PatBr p)) }
1369         | '[d|' cvtopbody '|]'  {% checkDecBrGroup $2 >>= \g -> 
1370                                         return (LL $ HsBracket (DecBr g)) }
1371
1372         -- arrow notation extension
1373         | '(|' aexp2 cmdargs '|)'       { LL $ HsArrForm $2 Nothing (reverse $3) }
1374
1375 cmdargs :: { [LHsCmdTop RdrName] }
1376         : cmdargs acmd                  { $2 : $1 }
1377         | {- empty -}                   { [] }
1378
1379 acmd    :: { LHsCmdTop RdrName }
1380         : aexp2                 { L1 $ HsCmdTop $1 [] placeHolderType undefined }
1381
1382 cvtopbody :: { [LHsDecl RdrName] }
1383         :  '{'            cvtopdecls0 '}'               { $2 }
1384         |      vocurly    cvtopdecls0 close             { $2 }
1385
1386 cvtopdecls0 :: { [LHsDecl RdrName] }
1387         : {- empty -}           { [] }
1388         | cvtopdecls            { $1 }
1389
1390 texp :: { LHsExpr RdrName }
1391         : exp                           { $1 }
1392         | qopm infixexp                 { LL $ SectionR $1 $2 }
1393         -- The second production is really here only for bang patterns
1394         -- but 
1395
1396 texps :: { [LHsExpr RdrName] }
1397         : texps ',' texp                { $3 : $1 }
1398         | texp                          { [$1] }
1399
1400
1401 -----------------------------------------------------------------------------
1402 -- List expressions
1403
1404 -- The rules below are little bit contorted to keep lexps left-recursive while
1405 -- avoiding another shift/reduce-conflict.
1406
1407 list :: { LHsExpr RdrName }
1408         : texp                  { L1 $ ExplicitList placeHolderType [$1] }
1409         | lexps                 { L1 $ ExplicitList placeHolderType (reverse (unLoc $1)) }
1410         | texp '..'             { LL $ ArithSeq noPostTcExpr (From $1) }
1411         | texp ',' exp '..'     { LL $ ArithSeq noPostTcExpr (FromThen $1 $3) }
1412         | texp '..' exp         { LL $ ArithSeq noPostTcExpr (FromTo $1 $3) }
1413         | texp ',' exp '..' exp { LL $ ArithSeq noPostTcExpr (FromThenTo $1 $3 $5) }
1414         | texp pquals           { sL (comb2 $1 $>) $ mkHsDo ListComp (reverse (unLoc $2)) $1 }
1415
1416 lexps :: { Located [LHsExpr RdrName] }
1417         : lexps ',' texp                { LL ($3 : unLoc $1) }
1418         | texp ',' texp                 { LL [$3,$1] }
1419
1420 -----------------------------------------------------------------------------
1421 -- List Comprehensions
1422
1423 pquals :: { Located [LStmt RdrName] }   -- Either a singleton ParStmt, 
1424                                         -- or a reversed list of Stmts
1425         : pquals1                       { case unLoc $1 of
1426                                             [qs] -> L1 qs
1427                                             qss  -> L1 [L1 (ParStmt stmtss)]
1428                                                  where
1429                                                     stmtss = [ (reverse qs, undefined) 
1430                                                              | qs <- qss ]
1431                                         }
1432                         
1433 pquals1 :: { Located [[LStmt RdrName]] }
1434         : pquals1 '|' quals             { LL (unLoc $3 : unLoc $1) }
1435         | '|' quals                     { L (getLoc $2) [unLoc $2] }
1436
1437 quals :: { Located [LStmt RdrName] }
1438         : quals ',' qual                { LL ($3 : unLoc $1) }
1439         | qual                          { L1 [$1] }
1440
1441 -----------------------------------------------------------------------------
1442 -- Parallel array expressions
1443
1444 -- The rules below are little bit contorted; see the list case for details.
1445 -- Note that, in contrast to lists, we only have finite arithmetic sequences.
1446 -- Moreover, we allow explicit arrays with no element (represented by the nil
1447 -- constructor in the list case).
1448
1449 parr :: { LHsExpr RdrName }
1450         :                               { noLoc (ExplicitPArr placeHolderType []) }
1451         | texp                          { L1 $ ExplicitPArr placeHolderType [$1] }
1452         | lexps                         { L1 $ ExplicitPArr placeHolderType 
1453                                                        (reverse (unLoc $1)) }
1454         | texp '..' exp                 { LL $ PArrSeq noPostTcExpr (FromTo $1 $3) }
1455         | texp ',' exp '..' exp         { LL $ PArrSeq noPostTcExpr (FromThenTo $1 $3 $5) }
1456         | texp pquals                   { sL (comb2 $1 $>) $ mkHsDo PArrComp (reverse (unLoc $2)) $1 }
1457
1458 -- We are reusing `lexps' and `pquals' from the list case.
1459
1460 -----------------------------------------------------------------------------
1461 -- Case alternatives
1462
1463 altslist :: { Located [LMatch RdrName] }
1464         : '{'            alts '}'       { LL (reverse (unLoc $2)) }
1465         |     vocurly    alts  close    { L (getLoc $2) (reverse (unLoc $2)) }
1466
1467 alts    :: { Located [LMatch RdrName] }
1468         : alts1                         { L1 (unLoc $1) }
1469         | ';' alts                      { LL (unLoc $2) }
1470
1471 alts1   :: { Located [LMatch RdrName] }
1472         : alts1 ';' alt                 { LL ($3 : unLoc $1) }
1473         | alts1 ';'                     { LL (unLoc $1) }
1474         | alt                           { L1 [$1] }
1475
1476 alt     :: { LMatch RdrName }
1477         : pat opt_sig alt_rhs           { LL (Match [$1] $2 (unLoc $3)) }
1478
1479 alt_rhs :: { Located (GRHSs RdrName) }
1480         : ralt wherebinds               { LL (GRHSs (unLoc $1) (unLoc $2)) }
1481
1482 ralt :: { Located [LGRHS RdrName] }
1483         : '->' exp                      { LL (unguardedRHS $2) }
1484         | gdpats                        { L1 (reverse (unLoc $1)) }
1485
1486 gdpats :: { Located [LGRHS RdrName] }
1487         : gdpats gdpat                  { LL ($2 : unLoc $1) }
1488         | gdpat                         { L1 [$1] }
1489
1490 gdpat   :: { LGRHS RdrName }
1491         : '|' quals '->' exp            { sL (comb2 $1 $>) $ GRHS (reverse (unLoc $2)) $4 }
1492
1493 -- 'pat' recognises a pattern, including one with a bang at the top
1494 --      e.g.  "!x" or "!(x,y)" or "C a b" etc
1495 -- Bangs inside are parsed as infix operator applications, so that
1496 -- we parse them right when bang-patterns are off
1497 pat     :: { LPat RdrName }
1498 pat     : infixexp              {% checkPattern $1 }
1499         | '!' aexp              {% checkPattern (LL (SectionR (L1 (HsVar bang_RDR)) $2)) }
1500
1501 apat   :: { LPat RdrName }      
1502 apat    : aexp                  {% checkPattern $1 }
1503         | '!' aexp              {% checkPattern (LL (SectionR (L1 (HsVar bang_RDR)) $2)) }
1504
1505 apats  :: { [LPat RdrName] }
1506         : apat apats            { $1 : $2 }
1507         | {- empty -}           { [] }
1508
1509 -----------------------------------------------------------------------------
1510 -- Statement sequences
1511
1512 stmtlist :: { Located [LStmt RdrName] }
1513         : '{'           stmts '}'       { LL (unLoc $2) }
1514         |     vocurly   stmts close     { $2 }
1515
1516 --      do { ;; s ; s ; ; s ;; }
1517 -- The last Stmt should be an expression, but that's hard to enforce
1518 -- here, because we need too much lookahead if we see do { e ; }
1519 -- So we use ExprStmts throughout, and switch the last one over
1520 -- in ParseUtils.checkDo instead
1521 stmts :: { Located [LStmt RdrName] }
1522         : stmt stmts_help               { LL ($1 : unLoc $2) }
1523         | ';' stmts                     { LL (unLoc $2) }
1524         | {- empty -}                   { noLoc [] }
1525
1526 stmts_help :: { Located [LStmt RdrName] } -- might be empty
1527         : ';' stmts                     { LL (unLoc $2) }
1528         | {- empty -}                   { noLoc [] }
1529
1530 -- For typing stmts at the GHCi prompt, where 
1531 -- the input may consist of just comments.
1532 maybe_stmt :: { Maybe (LStmt RdrName) }
1533         : stmt                          { Just $1 }
1534         | {- nothing -}                 { Nothing }
1535
1536 stmt  :: { LStmt RdrName }
1537         : qual                          { $1 }
1538 -- What is this next production doing?  I have no clue!  SLPJ Dec06
1539         | infixexp '->' exp             {% checkPattern $3 >>= \p ->
1540                                            return (LL $ mkBindStmt p $1) }
1541         | 'rec' stmtlist                { LL $ mkRecStmt (unLoc $2) }
1542
1543 qual  :: { LStmt RdrName }
1544         : pat '<-' exp                  { LL $ mkBindStmt $1 $3 }
1545         | exp                           { L1 $ mkExprStmt $1 }
1546         | 'let' binds                   { LL $ LetStmt (unLoc $2) }
1547
1548 -----------------------------------------------------------------------------
1549 -- Record Field Update/Construction
1550
1551 fbinds  :: { HsRecordBinds RdrName }
1552         : fbinds1                       { HsRecordBinds (reverse $1) }
1553         | {- empty -}                   { HsRecordBinds [] }
1554
1555 fbinds1 :: { [(Located id, LHsExpr id)] }
1556         : fbinds1 ',' fbind             { $3 : $1 }
1557         | fbind                         { [$1] }
1558   
1559 fbind   :: { (Located RdrName, LHsExpr RdrName) }
1560         : qvar '=' exp                  { ($1,$3) }
1561
1562 -----------------------------------------------------------------------------
1563 -- Implicit Parameter Bindings
1564
1565 dbinds  :: { Located [LIPBind RdrName] }
1566         : dbinds ';' dbind              { LL ($3 : unLoc $1) }
1567         | dbinds ';'                    { LL (unLoc $1) }
1568         | dbind                         { L1 [$1] }
1569 --      | {- empty -}                   { [] }
1570
1571 dbind   :: { LIPBind RdrName }
1572 dbind   : ipvar '=' exp                 { LL (IPBind (unLoc $1) $3) }
1573
1574 ipvar   :: { Located (IPName RdrName) }
1575         : IPDUPVARID            { L1 (IPName (mkUnqual varName (getIPDUPVARID $1))) }
1576
1577 -----------------------------------------------------------------------------
1578 -- Deprecations
1579
1580 depreclist :: { Located [RdrName] }
1581 depreclist : deprec_var                 { L1 [unLoc $1] }
1582            | deprec_var ',' depreclist  { LL (unLoc $1 : unLoc $3) }
1583
1584 deprec_var :: { Located RdrName }
1585 deprec_var : var                        { $1 }
1586            | con                        { $1 }
1587
1588 -----------------------------------------
1589 -- Data constructors
1590 qcon    :: { Located RdrName }
1591         : qconid                { $1 }
1592         | '(' qconsym ')'       { LL (unLoc $2) }
1593         | sysdcon               { L1 $ nameRdrName (dataConName (unLoc $1)) }
1594 -- The case of '[:' ':]' is part of the production `parr'
1595
1596 con     :: { Located RdrName }
1597         : conid                 { $1 }
1598         | '(' consym ')'        { LL (unLoc $2) }
1599         | sysdcon               { L1 $ nameRdrName (dataConName (unLoc $1)) }
1600
1601 sysdcon :: { Located DataCon }  -- Wired in data constructors
1602         : '(' ')'               { LL unitDataCon }
1603         | '(' commas ')'        { LL $ tupleCon Boxed $2 }
1604         | '[' ']'               { LL nilDataCon }
1605
1606 conop :: { Located RdrName }
1607         : consym                { $1 }  
1608         | '`' conid '`'         { LL (unLoc $2) }
1609
1610 qconop :: { Located RdrName }
1611         : qconsym               { $1 }
1612         | '`' qconid '`'        { LL (unLoc $2) }
1613
1614 -----------------------------------------------------------------------------
1615 -- Type constructors
1616
1617 gtycon  :: { Located RdrName }  -- A "general" qualified tycon
1618         : oqtycon                       { $1 }
1619         | '(' ')'                       { LL $ getRdrName unitTyCon }
1620         | '(' commas ')'                { LL $ getRdrName (tupleTyCon Boxed $2) }
1621         | '(' '->' ')'                  { LL $ getRdrName funTyCon }
1622         | '[' ']'                       { LL $ listTyCon_RDR }
1623         | '[:' ':]'                     { LL $ parrTyCon_RDR }
1624
1625 oqtycon :: { Located RdrName }  -- An "ordinary" qualified tycon
1626         : qtycon                        { $1 }
1627         | '(' qtyconsym ')'             { LL (unLoc $2) }
1628
1629 qtyconop :: { Located RdrName } -- Qualified or unqualified
1630         : qtyconsym                     { $1 }
1631         | '`' qtycon '`'                { LL (unLoc $2) }
1632
1633 qtycon :: { Located RdrName }   -- Qualified or unqualified
1634         : QCONID                        { L1 $! mkQual tcClsName (getQCONID $1) }
1635         | tycon                         { $1 }
1636
1637 tycon   :: { Located RdrName }  -- Unqualified
1638         : CONID                         { L1 $! mkUnqual tcClsName (getCONID $1) }
1639
1640 qtyconsym :: { Located RdrName }
1641         : QCONSYM                       { L1 $! mkQual tcClsName (getQCONSYM $1) }
1642         | tyconsym                      { $1 }
1643
1644 tyconsym :: { Located RdrName }
1645         : CONSYM                        { L1 $! mkUnqual tcClsName (getCONSYM $1) }
1646
1647 -----------------------------------------------------------------------------
1648 -- Operators
1649
1650 op      :: { Located RdrName }   -- used in infix decls
1651         : varop                 { $1 }
1652         | conop                 { $1 }
1653
1654 varop   :: { Located RdrName }
1655         : varsym                { $1 }
1656         | '`' varid '`'         { LL (unLoc $2) }
1657
1658 qop     :: { LHsExpr RdrName }   -- used in sections
1659         : qvarop                { L1 $ HsVar (unLoc $1) }
1660         | qconop                { L1 $ HsVar (unLoc $1) }
1661
1662 qopm    :: { LHsExpr RdrName }   -- used in sections
1663         : qvaropm               { L1 $ HsVar (unLoc $1) }
1664         | qconop                { L1 $ HsVar (unLoc $1) }
1665
1666 qvarop :: { Located RdrName }
1667         : qvarsym               { $1 }
1668         | '`' qvarid '`'        { LL (unLoc $2) }
1669
1670 qvaropm :: { Located RdrName }
1671         : qvarsym_no_minus      { $1 }
1672         | '`' qvarid '`'        { LL (unLoc $2) }
1673
1674 -----------------------------------------------------------------------------
1675 -- Type variables
1676
1677 tyvar   :: { Located RdrName }
1678 tyvar   : tyvarid               { $1 }
1679         | '(' tyvarsym ')'      { LL (unLoc $2) }
1680
1681 tyvarop :: { Located RdrName }
1682 tyvarop : '`' tyvarid '`'       { LL (unLoc $2) }
1683         | tyvarsym              { $1 }
1684
1685 tyvarid :: { Located RdrName }
1686         : VARID                 { L1 $! mkUnqual tvName (getVARID $1) }
1687         | special_id            { L1 $! mkUnqual tvName (unLoc $1) }
1688         | 'unsafe'              { L1 $! mkUnqual tvName FSLIT("unsafe") }
1689         | 'safe'                { L1 $! mkUnqual tvName FSLIT("safe") }
1690         | 'threadsafe'          { L1 $! mkUnqual tvName FSLIT("threadsafe") }
1691
1692 tyvarsym :: { Located RdrName }
1693 -- Does not include "!", because that is used for strictness marks
1694 --               or ".", because that separates the quantified type vars from the rest
1695 --               or "*", because that's used for kinds
1696 tyvarsym : VARSYM               { L1 $! mkUnqual tvName (getVARSYM $1) }
1697
1698 -----------------------------------------------------------------------------
1699 -- Variables 
1700
1701 var     :: { Located RdrName }
1702         : varid                 { $1 }
1703         | '(' varsym ')'        { LL (unLoc $2) }
1704
1705 qvar    :: { Located RdrName }
1706         : qvarid                { $1 }
1707         | '(' varsym ')'        { LL (unLoc $2) }
1708         | '(' qvarsym1 ')'      { LL (unLoc $2) }
1709 -- We've inlined qvarsym here so that the decision about
1710 -- whether it's a qvar or a var can be postponed until
1711 -- *after* we see the close paren.
1712
1713 qvarid :: { Located RdrName }
1714         : varid                 { $1 }
1715         | QVARID                { L1 $ mkQual varName (getQVARID $1) }
1716
1717 varid :: { Located RdrName }
1718         : varid_no_unsafe       { $1 }
1719         | 'unsafe'              { L1 $! mkUnqual varName FSLIT("unsafe") }
1720         | 'safe'                { L1 $! mkUnqual varName FSLIT("safe") }
1721         | 'threadsafe'          { L1 $! mkUnqual varName FSLIT("threadsafe") }
1722
1723 varid_no_unsafe :: { Located RdrName }
1724         : VARID                 { L1 $! mkUnqual varName (getVARID $1) }
1725         | special_id            { L1 $! mkUnqual varName (unLoc $1) }
1726         | 'forall'              { L1 $! mkUnqual varName FSLIT("forall") }
1727         | 'family'              { L1 $! mkUnqual varName FSLIT("family") }
1728
1729 qvarsym :: { Located RdrName }
1730         : varsym                { $1 }
1731         | qvarsym1              { $1 }
1732
1733 qvarsym_no_minus :: { Located RdrName }
1734         : varsym_no_minus       { $1 }
1735         | qvarsym1              { $1 }
1736
1737 qvarsym1 :: { Located RdrName }
1738 qvarsym1 : QVARSYM              { L1 $ mkQual varName (getQVARSYM $1) }
1739
1740 varsym :: { Located RdrName }
1741         : varsym_no_minus       { $1 }
1742         | '-'                   { L1 $ mkUnqual varName FSLIT("-") }
1743
1744 varsym_no_minus :: { Located RdrName } -- varsym not including '-'
1745         : VARSYM                { L1 $ mkUnqual varName (getVARSYM $1) }
1746         | special_sym           { L1 $ mkUnqual varName (unLoc $1) }
1747
1748
1749 -- These special_ids are treated as keywords in various places, 
1750 -- but as ordinary ids elsewhere.   'special_id' collects all these
1751 -- except 'unsafe', 'forall', and 'family' whose treatment differs
1752 -- depending on context 
1753 special_id :: { Located FastString }
1754 special_id
1755         : 'as'                  { L1 FSLIT("as") }
1756         | 'qualified'           { L1 FSLIT("qualified") }
1757         | 'hiding'              { L1 FSLIT("hiding") }
1758         | 'derive'              { L1 FSLIT("derive") }
1759         | 'export'              { L1 FSLIT("export") }
1760         | 'label'               { L1 FSLIT("label")  }
1761         | 'dynamic'             { L1 FSLIT("dynamic") }
1762         | 'stdcall'             { L1 FSLIT("stdcall") }
1763         | 'ccall'               { L1 FSLIT("ccall") }
1764
1765 special_sym :: { Located FastString }
1766 special_sym : '!'       { L1 FSLIT("!") }
1767             | '.'       { L1 FSLIT(".") }
1768             | '*'       { L1 FSLIT("*") }
1769
1770 -----------------------------------------------------------------------------
1771 -- Data constructors
1772
1773 qconid :: { Located RdrName }   -- Qualified or unqualified
1774         : conid                 { $1 }
1775         | QCONID                { L1 $ mkQual dataName (getQCONID $1) }
1776
1777 conid   :: { Located RdrName }
1778         : CONID                 { L1 $ mkUnqual dataName (getCONID $1) }
1779
1780 qconsym :: { Located RdrName }  -- Qualified or unqualified
1781         : consym                { $1 }
1782         | QCONSYM               { L1 $ mkQual dataName (getQCONSYM $1) }
1783
1784 consym :: { Located RdrName }
1785         : CONSYM                { L1 $ mkUnqual dataName (getCONSYM $1) }
1786
1787         -- ':' means only list cons
1788         | ':'                   { L1 $ consDataCon_RDR }
1789
1790
1791 -----------------------------------------------------------------------------
1792 -- Literals
1793
1794 literal :: { Located HsLit }
1795         : CHAR                  { L1 $ HsChar       $ getCHAR $1 }
1796         | STRING                { L1 $ HsString     $ getSTRING $1 }
1797         | PRIMINTEGER           { L1 $ HsIntPrim    $ getPRIMINTEGER $1 }
1798         | PRIMCHAR              { L1 $ HsCharPrim   $ getPRIMCHAR $1 }
1799         | PRIMSTRING            { L1 $ HsStringPrim $ getPRIMSTRING $1 }
1800         | PRIMFLOAT             { L1 $ HsFloatPrim  $ getPRIMFLOAT $1 }
1801         | PRIMDOUBLE            { L1 $ HsDoublePrim $ getPRIMDOUBLE $1 }
1802
1803 -----------------------------------------------------------------------------
1804 -- Layout
1805
1806 close :: { () }
1807         : vccurly               { () } -- context popped in lexer.
1808         | error                 {% popContext }
1809
1810 -----------------------------------------------------------------------------
1811 -- Miscellaneous (mostly renamings)
1812
1813 modid   :: { Located ModuleName }
1814         : CONID                 { L1 $ mkModuleNameFS (getCONID $1) }
1815         | QCONID                { L1 $ let (mod,c) = getQCONID $1 in
1816                                   mkModuleNameFS
1817                                    (mkFastString
1818                                      (unpackFS mod ++ '.':unpackFS c))
1819                                 }
1820
1821 commas :: { Int }
1822         : commas ','                    { $1 + 1 }
1823         | ','                           { 2 }
1824
1825 -----------------------------------------------------------------------------
1826 -- Documentation comments
1827
1828 docnext :: { LHsDoc RdrName }
1829   : DOCNEXT {% case parseHaddockParagraphs (tokenise (getDOCNEXT $1)) of {
1830       Left  err -> parseError (getLoc $1) err;
1831       Right doc -> return (L1 doc) } }
1832
1833 docprev :: { LHsDoc RdrName }
1834   : DOCPREV {% case parseHaddockParagraphs (tokenise (getDOCPREV $1)) of {
1835       Left  err -> parseError (getLoc $1) err;
1836       Right doc -> return (L1 doc) } }
1837
1838 docnamed :: { Located (String, (HsDoc RdrName)) }
1839   : DOCNAMED {%
1840       let string = getDOCNAMED $1 
1841           (name, rest) = break isSpace string
1842       in case parseHaddockParagraphs (tokenise rest) of {
1843         Left  err -> parseError (getLoc $1) err;
1844         Right doc -> return (L1 (name, doc)) } }
1845
1846 docsection :: { Located (n, HsDoc RdrName) }
1847   : DOCSECTION {% let (n, doc) = getDOCSECTION $1 in
1848         case parseHaddockString (tokenise doc) of {
1849       Left  err -> parseError (getLoc $1) err;
1850       Right doc -> return (L1 (n, doc)) } }
1851
1852 docoptions :: { String }
1853   : DOCOPTIONS { getDOCOPTIONS $1 }
1854
1855 moduleheader :: { (HaddockModInfo RdrName, Maybe (HsDoc RdrName)) }                                    
1856         : DOCNEXT {% let string = getDOCNEXT $1 in
1857                case parseModuleHeader string of {                       
1858                  Right (str, info) ->                                  
1859                    case parseHaddockParagraphs (tokenise str) of {               
1860                      Left err -> parseError (getLoc $1) err;                    
1861                      Right doc -> return (info, Just doc);          
1862                    };                                             
1863                  Left err -> parseError (getLoc $1) err
1864             }  }                                                  
1865
1866 maybe_docprev :: { Maybe (LHsDoc RdrName) }
1867         : docprev                       { Just $1 }
1868         | {- empty -}                   { Nothing }
1869
1870 maybe_docnext :: { Maybe (LHsDoc RdrName) }
1871         : docnext                       { Just $1 }
1872         | {- empty -}                   { Nothing }
1873
1874 {
1875 happyError :: P a
1876 happyError = srcParseFail
1877
1878 getVARID        (L _ (ITvarid    x)) = x
1879 getCONID        (L _ (ITconid    x)) = x
1880 getVARSYM       (L _ (ITvarsym   x)) = x
1881 getCONSYM       (L _ (ITconsym   x)) = x
1882 getQVARID       (L _ (ITqvarid   x)) = x
1883 getQCONID       (L _ (ITqconid   x)) = x
1884 getQVARSYM      (L _ (ITqvarsym  x)) = x
1885 getQCONSYM      (L _ (ITqconsym  x)) = x
1886 getIPDUPVARID   (L _ (ITdupipvarid   x)) = x
1887 getCHAR         (L _ (ITchar     x)) = x
1888 getSTRING       (L _ (ITstring   x)) = x
1889 getINTEGER      (L _ (ITinteger  x)) = x
1890 getRATIONAL     (L _ (ITrational x)) = x
1891 getPRIMCHAR     (L _ (ITprimchar   x)) = x
1892 getPRIMSTRING   (L _ (ITprimstring x)) = x
1893 getPRIMINTEGER  (L _ (ITprimint    x)) = x
1894 getPRIMFLOAT    (L _ (ITprimfloat  x)) = x
1895 getPRIMDOUBLE   (L _ (ITprimdouble x)) = x
1896 getTH_ID_SPLICE (L _ (ITidEscape x)) = x
1897 getINLINE       (L _ (ITinline_prag b)) = b
1898 getSPEC_INLINE  (L _ (ITspec_inline_prag b)) = b
1899
1900 getDOCNEXT (L _ (ITdocCommentNext x)) = x
1901 getDOCPREV (L _ (ITdocCommentPrev x)) = x
1902 getDOCNAMED (L _ (ITdocCommentNamed x)) = x
1903 getDOCSECTION (L _ (ITdocSection n x)) = (n, x)
1904 getDOCOPTIONS (L _ (ITdocOptions x)) = x
1905
1906 -- Utilities for combining source spans
1907 comb2 :: Located a -> Located b -> SrcSpan
1908 comb2 = combineLocs
1909
1910 comb3 :: Located a -> Located b -> Located c -> SrcSpan
1911 comb3 a b c = combineSrcSpans (getLoc a) (combineSrcSpans (getLoc b) (getLoc c))
1912
1913 comb4 :: Located a -> Located b -> Located c -> Located d -> SrcSpan
1914 comb4 a b c d = combineSrcSpans (getLoc a) $ combineSrcSpans (getLoc b) $
1915                 combineSrcSpans (getLoc c) (getLoc d)
1916
1917 -- strict constructor version:
1918 {-# INLINE sL #-}
1919 sL :: SrcSpan -> a -> Located a
1920 sL span a = span `seq` L span a
1921
1922 -- Make a source location for the file.  We're a bit lazy here and just
1923 -- make a point SrcSpan at line 1, column 0.  Strictly speaking we should
1924 -- try to find the span of the whole file (ToDo).
1925 fileSrcSpan :: P SrcSpan
1926 fileSrcSpan = do 
1927   l <- getSrcLoc; 
1928   let loc = mkSrcLoc (srcLocFile l) 1 0;
1929   return (mkSrcSpan loc loc)
1930 }