[project @ 2002-03-08 16:00:39 by simonmar]
[ghc-hetmet.git] / ghc / compiler / rename / ParseIface.y
index 78553df..0cc4a48 100644 (file)
@@ -1,4 +1,4 @@
-{-     Notes about the syntax of interface files
+{-     Notes about the syntax of interface files                 -*-haskell-*-
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The header
 ~~~~~~~~~~
@@ -39,26 +39,26 @@ import HsCore
 import Literal         ( Literal(..), mkMachInt, mkMachInt64, mkMachWord, mkMachWord64 )
 import BasicTypes      ( Fixity(..), FixityDirection(..), StrictnessMark(..),
                          NewOrData(..), Version, initialVersion, Boxity(..),
-                          Activation(..)
+                          Activation(..), IPName(..)
                        )
 import CostCentre       ( CostCentre(..), IsCafCC(..), IsDupdCC(..) )
 import Type            ( Kind, mkArrowKind, liftedTypeKind, openTypeKind, usageTypeKind )
-import IdInfo           ( InlinePragInfo(..) )
 import ForeignCall     ( ForeignCall(..), CCallConv(..), CCallSpec(..), CCallTarget(..) )
 import Lex             
 
-import RnMonad         ( ParsedIface(..), ExportItem, IfaceDeprecs ) 
+import RnMonad         ( ParsedIface(..), IfaceDeprecs ) 
 import HscTypes         ( WhetherHasOrphans, IsBootInterface, GenAvailInfo(..), 
                           ImportVersion, WhatsImported(..),
-                          RdrAvailInfo )
+                          RdrAvailInfo, RdrExportItem )
 
 import RdrName          ( RdrName, mkRdrUnqual, mkIfaceOrig )
+import TyCon           ( DataConDetails(..) )
 import Name            ( OccName )
 import OccName          ( mkSysOccFS,
                          tcName, varName, dataName, clsName, tvName,
                          EncodedFS 
                        )
-import Module           ( ModuleName, PackageName, mkSysModuleNameFS, mkModule )
+import Module           ( ModuleName, PackageName, mkSysModuleNameFS )
 import SrcLoc          ( SrcLoc )
 import CmdLineOpts     ( opt_InPackage, opt_IgnoreIfacePragmas )
 import Outputable
@@ -82,12 +82,7 @@ import FastString    ( tailFS )
  'case'        { ITcase }                      -- Haskell keywords
  'class'       { ITclass } 
  'data'        { ITdata } 
- 'default'     { ITdefault }
- 'deriving'    { ITderiving }
- 'do'          { ITdo }
- 'else'        { ITelse }
  'hiding'      { IThiding }
- 'if'          { ITif }
  'import'      { ITimport }
  'in'          { ITin }
  'infix'       { ITinfix }
@@ -95,11 +90,9 @@ import FastString    ( tailFS )
  'infixr'      { ITinfixr }
  'instance'    { ITinstance }
  'let'                 { ITlet }
- 'module'      { ITmodule }
  'newtype'     { ITnewtype }
  'of'          { ITof }
  'qualified'   { ITqualified }
- 'then'        { ITthen }
  'type'        { ITtype }
  'where'       { ITwhere }
 
@@ -115,24 +108,19 @@ import FastString ( tailFS )
 
  '__interface' { ITinterface }                 -- interface keywords
  '__export'    { IT__export }
- '__depends'   { ITdepends }
  '__forall'    { IT__forall }
  '__letrec'    { ITletrec }
  '__coerce'    { ITcoerce }
  '__inline_me'  { ITinlineMe }
  '__inline_call'{ ITinlineCall }
  '__DEFAULT'   { ITdefaultbranch }
- '__bot'       { ITbottom }
- '__integer'   { ITinteger_lit }
  '__float'     { ITfloat_lit }
  '__word'      { ITword_lit }
  '__int64'     { ITint64_lit }
  '__word64'    { ITword64_lit }
- '__rational'  { ITrational_lit }
  '__addr'      { ITaddr_lit }
  '__label'     { ITlabel_lit }
  '__litlit'    { ITlit_lit }
- '__string'    { ITstring_lit }
  '__ccall'     { ITccall $$ }
  '__scc'       { ITscc }
  '__sccC'       { ITsccAllCafs }
@@ -145,27 +133,26 @@ import FastString ( tailFS )
  '__U'         { ITunfold }
  '__S'         { ITstrict $$ }
  '__R'         { ITrules }
- '__M'         { ITcprinfo }
  '__D'         { ITdeprecated }
 
- '..'          { ITdotdot }                    -- reserved symbols
  '::'          { ITdcolon }
  '='           { ITequal }
  '\\'          { ITlam }
  '|'           { ITvbar }
- '<-'          { ITlarrow }
  '->'          { ITrarrow }
  '@'           { ITat }
+ '~'           { ITtilde }
  '=>'          { ITdarrow }
  '-'           { ITminus }
  '!'           { ITbang }
+ '*'           { ITstar }
 
  '{'           { ITocurly }                    -- special symbols
  '}'           { ITccurly }
- '{|'          { ITocurlybar }                         -- special symbols
- '|}'          { ITccurlybar }                         -- special symbols
  '['           { ITobrack }
  ']'           { ITcbrack }
+ '[:'          { ITopabrack }
+ ':]'          { ITcpabrack }
  '('           { IToparen }
  ')'           { ITcparen }
  '(#'          { IToubxparen }
@@ -177,13 +164,11 @@ import FastString ( tailFS )
  VARID         { ITvarid    $$ }               -- identifiers
  CONID         { ITconid    $$ }
  VARSYM        { ITvarsym   $$ }
- CONSYM        { ITconsym   $$ }
  QVARID        { ITqvarid   $$ }
  QCONID        { ITqconid   $$ }
- QVARSYM       { ITqvarsym  $$ }
- QCONSYM       { ITqconsym  $$ }
 
- IPVARID       { ITipvarid  $$ }               -- GHC extension
+ IPDUPVARID    { ITdupipvarid   $$ }           -- GHC extension
+ IPSPLITVARID          { ITsplitipvarid $$ }           -- GHC extension
 
  PRAGMA                { ITpragma   $$ }
 
@@ -192,8 +177,6 @@ import FastString   ( tailFS )
  INTEGER       { ITinteger  $$ }
  RATIONAL      { ITrational $$ }
  CLITLIT       { ITlitlit   $$ }
-
- UNKNOWN       { ITunknown  $$ }
 %%
 
 iface          :: { ParsedIface }
@@ -206,8 +189,10 @@ iface              : '__interface' package mod_name
                  instance_decl_part
                  decls_part
                  rules_and_deprecs_part
-                 { ParsedIface {
-                       pi_mod  = mkModule $3 $2,       -- Module itself
+                 { let (rules,deprecs) = $14 () in
+                   ParsedIface {
+                       pi_mod  = $3,                   -- Module name
+                       pi_pkg = $2,                    -- Package name
                        pi_vers = $4,                   -- Module version
                        pi_orphan  = $6,
                        pi_exports = (fst $5, $9),      -- Exports
@@ -215,8 +200,8 @@ iface               : '__interface' package mod_name
                        pi_fixity  = $11,               -- Fixies
                        pi_insts   = $12,               -- Local instances
                        pi_decls   = $13,               -- Decls
-                       pi_rules   = (snd $5,fst $14),  -- Rules 
-                       pi_deprecs = snd $14            -- Deprecations 
+                       pi_rules   = (snd $5,rules),    -- Rules 
+                       pi_deprecs = deprecs            -- Deprecations 
                   } }
 
 -- Versions for exports and rules (optional)
@@ -259,7 +244,7 @@ name_version_pair   :  var_occ version                              { ($1, $2) }
 
 --------------------------------------------------------------------------
 
-exports_part   :: { [ExportItem] }
+exports_part   :: { [RdrExportItem] }
 exports_part   :                                       { [] }
                | '__export' mod_name entities ';'
                        exports_part                    { ({-mkSysModuleNameFS-} $2, $3) : $5 }
@@ -289,16 +274,16 @@ val_occs  :: { [OccName] }
 
 --------------------------------------------------------------------------
 
-fix_decl_part :: { [RdrNameFixitySig] }
+fix_decl_part :: { [(RdrName,Fixity)] }
 fix_decl_part : {- empty -}                            { [] }
              | fix_decls ';'                           { $1 }
 
-fix_decls     :: { [RdrNameFixitySig] }
+fix_decls     :: { [(RdrName,Fixity)] }
 fix_decls     :                                        { [] }
              | fix_decl fix_decls                      { $1 : $2 }
 
-fix_decl :: { RdrNameFixitySig }
-fix_decl : src_loc fixity prec var_or_data_name                { FixitySig $4 (Fixity $3 $2) $1 }
+fix_decl    :: { (RdrName,Fixity) }
+fix_decl    : fixity prec var_or_data_name             { ($3, Fixity $2 $1) }
 
 fixity      :: { FixityDirection }
 fixity      : 'infixl'                                  { InfixL }
@@ -352,19 +337,23 @@ decl    : src_loc qvar_name '::' type maybe_idinfo
                        { TySynonym $3 $4 $6 $1 }
        | src_loc 'foreign' 'type' qtc_name                    
                        { ForeignType $4 Nothing DNType $1 }
-       | src_loc 'data' opt_decl_context qtc_name tv_bndrs constrs            
-                       { mkTyData DataType $3 $4 $5 $6 (length $6) Nothing $1 }
-       | src_loc 'newtype' opt_decl_context qtc_name tv_bndrs newtype_constr
-                       { mkTyData NewType $3 $4 $5 $6 1 Nothing $1 }
-       | src_loc 'class' opt_decl_context qtc_name tv_bndrs fds csigs
-                       { mkClassDecl $3 $4 $5 $6 $7 Nothing $1 }
+       | src_loc 'data' tycl_hdr constrs              
+                       { mkTyData DataType $3 $4 Nothing $1 }
+       | src_loc 'newtype' tycl_hdr newtype_constr
+                       { mkTyData NewType $3 (DataCons [$4]) Nothing $1 }
+       | src_loc 'class' tycl_hdr fds csigs
+                       { mkClassDecl $3 $4 $5 Nothing $1 }
+
+tycl_hdr :: { (RdrNameContext, RdrName, [RdrNameHsTyVar]) }
+       : context '=>' qtc_name tv_bndrs        { ($1, $3, $4) }
+       | qtc_name tv_bndrs                     { ([], $1, $2) }
 
 maybe_idinfo  :: { RdrName -> [HsIdInfo RdrName] }
 maybe_idinfo  : {- empty -}    { \_ -> [] }
              | pragma          { \x -> if opt_IgnoreIfacePragmas then [] 
                                        else case $1 of
-                                               POk _ id_info -> id_info
-                                               PFailed err -> pprPanic "IdInfo parse failed" 
+                                               Just (POk _ id_info) -> id_info
+                                               Just (PFailed err) -> pprPanic "IdInfo parse failed" 
                                                                        (vcat [ppr x, err])
                                }
     {-
@@ -384,33 +373,31 @@ maybe_idinfo  : {- empty -}       { \_ -> [] }
        dates from a time where we picked up a .hi file first if it existed.]
     -}
 
-pragma :: { ParseResult [HsIdInfo RdrName] }
-pragma : src_loc PRAGMA        { parseIdInfo $2 PState{ bol = 0#, atbol = 1#,
-                                                       context = [],
-                                                       glasgow_exts = 1#,
-                                                       loc = $1 }
+pragma :: { Maybe (ParseResult [HsIdInfo RdrName]) }
+pragma : src_loc PRAGMA        { let exts = ExtFlags {glasgowExtsEF = True,
+                                                      parrEF        = True}
+                                 in
+                                 Just (parseIdInfo $2 (mkPState $1 exts))
                                }
 
 -----------------------------------------------------------------------------
 
-rules_and_deprecs_part :: { ([RdrNameRuleDecl], IfaceDeprecs) }
-rules_and_deprecs_part : {- empty -}   { ([], Nothing) }
-                      | rules_prag     { case $1 of
-                                            POk _ rds -> rds
-                                            PFailed err -> pprPanic "Rules/Deprecations parse failed" err
-                                       }
-
-rules_prag :: { ParseResult ([RdrNameRuleDecl], IfaceDeprecs) }
-rules_prag : src_loc PRAGMA    { parseRules $2 PState{ bol = 0#, atbol = 1#,
-                                                       context = [],
-                                                       glasgow_exts = 1#,
-                                                       loc = $1 }
-                               }
+-- This production is lifted so that it doesn't get eagerly parsed when we
+-- use happy --strict.
+rules_and_deprecs_part :: { () -> ([RdrNameRuleDecl], IfaceDeprecs) }
+rules_and_deprecs_part
+  : {- empty -}                { \_ -> ([], Nothing) }
+  | src_loc PRAGMA     { \_ -> let exts = ExtFlags {glasgowExtsEF = True,
+                                                    parrEF        = True}
+                               in case parseRules $2 (mkPState $1 exts) of
+                                       POk _ rds   -> rds
+                                       PFailed err -> pprPanic "Rules/Deprecations parse failed" err
+                       }
 
 rules_and_deprecs :: { ([RdrNameRuleDecl], IfaceDeprecs) }
 rules_and_deprecs : rule_prag deprec_prag      { ($1, $2) }
 
+
 -----------------------------------------------------------------------------
 
 rule_prag :: { [RdrNameRuleDecl] }
@@ -427,7 +414,8 @@ rule           : src_loc STRING activation rule_forall qvar_name
 
 activation :: { Activation }
 activation : {- empty -}                { AlwaysActive }
-           | INTEGER                    { ActiveAfter (fromInteger $1) }
+           | '[' INTEGER ']'            { ActiveAfter (fromInteger $2) }
+           | '[' '~' INTEGER ']'        { ActiveBefore (fromInteger $3) }
 
 rule_forall    :: { [UfBinder RdrName] }
 rule_forall    : '__forall' '{' core_bndrs '}' { $3 }
@@ -462,15 +450,13 @@ opt_version       :: { Version }
 opt_version    : version                       { $1 }
                | {- empty -}                   { initialVersion }
        
-opt_decl_context  :: { RdrNameContext }
-opt_decl_context  :                            { [] }
-                 | context '=>'                { $1 }
 
 ----------------------------------------------------------------------------
 
-constrs                :: { [RdrNameConDecl] {- empty for handwritten abstract -} }
-               :                       { [] }
-               | '=' constrs1          { $2 }
+constrs                :: { DataConDetails RdrNameConDecl }
+               :                       { Unknown }
+               | '='                   { DataCons [] }
+               | '=' constrs1          { DataCons $2 }
 
 constrs1       :: { [RdrNameConDecl] }
 constrs1       :  constr               { [$1] }
@@ -481,10 +467,10 @@ constr            :  src_loc ex_stuff qdata_name batypes          { mk_con_decl $3 $2 (VanillaCon
                |  src_loc ex_stuff qdata_name '{' fields1 '}'  { mk_con_decl $3 $2 (RecCon $5)     $1 }
                 -- We use "data_fs" so as to include ()
 
-newtype_constr :: { [RdrNameConDecl] {- Not allowed to be empty -} }
-newtype_constr : src_loc '=' ex_stuff qdata_name atype { [mk_con_decl $4 $3 (VanillaCon [unbangedType $5]) $1] }
+newtype_constr :: { RdrNameConDecl }
+newtype_constr : src_loc '=' ex_stuff qdata_name atype { mk_con_decl $4 $3 (VanillaCon [unbangedType $5]) $1 }
                | src_loc '=' ex_stuff qdata_name '{' qvar_name '::' atype '}'
-                                                       { [mk_con_decl $4 $3 (RecCon [([$6], unbangedType $8)]) $1] }
+                                                       { mk_con_decl $4 $3 (RecCon [([$6], unbangedType $8)]) $1 }
 
 ex_stuff :: { ([HsTyVarBndr RdrName], RdrNameContext) }
 ex_stuff       :                                       { ([],[]) }
@@ -544,7 +530,6 @@ types2              :  type ',' type                        { [$1,$3] }
 btype          :: { RdrNameHsType }
 btype          :  atype                                { $1 }
                |  btype atype                          { HsAppTy $1 $2 }
-               |  '__u' atype atype                    { HsUsageTy $2 $3 }
 
 atype          :: { RdrNameHsType }
 atype          :  qtc_name                             { HsTyVar $1 }
@@ -555,6 +540,7 @@ atype               :  qtc_name                             { HsTyVar $1 }
                |  '(' types2 ')'                       { HsTupleTy (mkHsTupCon tcName Boxed   $2) $2 }
                |  '(#' types0 '#)'                     { HsTupleTy (mkHsTupCon tcName Unboxed $2) $2 }
                |  '[' type ']'                         { HsListTy  $2 }
+               |  '[:' type ':]'                       { HsPArrTy $2 }
                |  '{' qcls_name atypes '}'             { mkHsDictTy $2 $3 }
                |  '{' ipvar_name '::' type '}'         { mkHsIParamTy $2 $4 }
                |  '(' type ')'                         { $2 }
@@ -576,7 +562,6 @@ ttype               : '__forall' tv_bndrs
 tbtype         :: { RdrNameHsType }
 tbtype         :  tatype                               { $1 }
                |  tbtype atype                         { HsAppTy $1 $2 }
-               |  '__u' atype atype                    { HsUsageTy $2 $3 }
 
 tatype         :: { RdrNameHsType }
 tatype         :  qtc_name                             { HsTyVar $1 }
@@ -585,6 +570,7 @@ tatype              :  qtc_name                             { HsTyVar $1 }
                |  '(' types2 ')'                       { HsTupleTy (mkHsTupCon tcName Boxed   $2) $2 }
                |  '(#' types0 '#)'                     { HsTupleTy (mkHsTupCon tcName Unboxed $2) $2 }
                |  '[' type ']'                         { HsListTy  $2 }
+               |  '[:' type ':]'                       { HsPArrTy $2 }
                |  '{' qcls_name atypes '}'             { mkHsDictTy $2 $3 }
                |  '{' ipvar_name '::' type '}'         { mkHsIParamTy $2 $4 }
                |  '(' type ')'                         { $2 }
@@ -592,34 +578,30 @@ tatype            :  qtc_name                             { HsTyVar $1 }
 
 package                :: { PackageName }
                :  STRING               { $1 }
-               | {- empty -}           { opt_InPackage }       -- Useful for .hi-boot files,
-                                                               -- which can omit the package Id
-                                                               -- Module loops are always within a package
+               | {- empty -}           { opt_InPackage }
+                               -- Useful for .hi-boot files,
+                               -- which can omit the package Id
+                               -- Module loops are always within a package
 
 mod_name       :: { ModuleName }
                :  CONID                { mkSysModuleNameFS $1 }
 
 
 ---------------------------------------------------
-var_fs         :: { EncodedFS }
+var_fs          :: { EncodedFS }
                : VARID                 { $1 }
-               | '!'                   { SLIT("!") }
-               | 'as'                  { SLIT("as") }
-               | 'qualified'           { SLIT("qualified") }
-               | 'hiding'              { SLIT("hiding") }
-               | 'forall'              { SLIT("forall") }
-               | 'foreign'             { SLIT("foreign") }
-               | 'export'              { SLIT("export") }
-               | 'label'               { SLIT("label") }
-               | 'dynamic'             { SLIT("dynamic") }
-               | 'unsafe'              { SLIT("unsafe") }
-               | 'with'                { SLIT("with") }
-               | 'ccall'               { SLIT("ccall") }
-               | 'stdcall'             { SLIT("stdcall") }
-
-qvar_fs                :: { (EncodedFS, EncodedFS) }
-               :  QVARID               { $1 }
-               |  QVARSYM              { $1 }
+               | 'as'                  { FSLIT("as") }
+               | 'qualified'           { FSLIT("qualified") }
+               | 'hiding'              { FSLIT("hiding") }
+               | 'forall'              { FSLIT("forall") }
+               | 'foreign'             { FSLIT("foreign") }
+               | 'export'              { FSLIT("export") }
+               | 'label'               { FSLIT("label") }
+               | 'dynamic'             { FSLIT("dynamic") }
+               | 'unsafe'              { FSLIT("unsafe") }
+               | 'with'                { FSLIT("with") }
+               | 'ccall'               { FSLIT("ccall") }
+               | 'stdcall'             { FSLIT("stdcall") }
 
 var_occ                :: { OccName }
                :  var_fs               { mkSysOccFS varName $1 }
@@ -629,72 +611,45 @@ var_name  :  var_occ              { mkRdrUnqual $1 }
 
 qvar_name      :: { RdrName }
 qvar_name      :  var_name             { $1 }
-               |  qvar_fs              { mkIfaceOrig varName $1 }
+               |  QVARID               { mkIfaceOrig varName $1 }
 
-ipvar_name     :: { RdrName }
-               :  IPVARID              { mkRdrUnqual (mkSysOccFS varName (tailFS $1)) }
+ipvar_name     :: { IPName RdrName }
+               : IPDUPVARID            { Dupable (mkRdrUnqual (mkSysOccFS varName $1)) }
+               | IPSPLITVARID          { Linear  (mkRdrUnqual (mkSysOccFS varName $1)) }
 
 qvar_names1    :: { [RdrName] }
 qvar_names1    : qvar_name             { [$1] }
                | qvar_name qvar_names1 { $1 : $2 }
 
-var_names      :: { [RdrName] }
-var_names      :                       { [] }
-               | var_name var_names    { $1 : $2 }
-
-var_names1     :: { [RdrName] }
-var_names1     : var_name var_names    { $1 : $2 }
-
 ---------------------------------------------------
--- For some bizarre reason, 
---      (,,,)      is dealt with by the parser
---      Foo.(,,,)  is dealt with by the lexer
--- Sigh
-
-data_fs                :: { EncodedFS }
-               :  CONID                { $1 }
-               |  CONSYM               { $1 }
-
-qdata_fs       :: { (EncodedFS, EncodedFS) }
-                :  QCONID              { $1 }
-                |  QCONSYM             { $1 }
 
 data_occ       :: { OccName }
-               :  data_fs              { mkSysOccFS dataName $1 }
-
-data_name      :: { RdrName }
-                :  data_occ             { mkRdrUnqual $1 }
+               :  CONID                { mkSysOccFS dataName $1 }
 
 qdata_name     :: { RdrName }
-qdata_name     :  data_name            { $1 }
-               |  qdata_fs             { mkIfaceOrig dataName $1 }
+               :  data_occ             { mkRdrUnqual $1 }
+               |  QCONID               { mkIfaceOrig dataName $1 }
                                
 var_or_data_name :: { RdrName }
-                  : qvar_name                    { $1 }
-                  | qdata_name                   { $1 }
+                  : qvar_name          { $1 }
+                  | qdata_name         { $1 }
 
 ---------------------------------------------------
 tc_occ         :: { OccName }
-               :  data_fs              { mkSysOccFS tcName $1 }
-
-tc_name                :: { RdrName }
-                :  tc_occ              { mkRdrUnqual $1 }
+               :  CONID                { mkSysOccFS tcName $1 }
 
 qtc_name       :: { RdrName }
-                : tc_name              { $1 }
-               | qdata_fs              { mkIfaceOrig tcName $1 }
+                : tc_occ               { mkRdrUnqual $1 }
+               | QCONID                { mkIfaceOrig tcName $1 }
 
 ---------------------------------------------------
-cls_name       :: { RdrName }
-               :  data_fs              { mkRdrUnqual (mkSysOccFS clsName $1) }
-
 qcls_name      :: { RdrName }
-               : cls_name              { $1 }
-               | qdata_fs              { mkIfaceOrig clsName $1 }
+               : CONID                 { mkRdrUnqual (mkSysOccFS clsName $1) }
+               | QCONID                { mkIfaceOrig clsName $1 }
 
 ---------------------------------------------------
 tv_name                :: { RdrName }
-               :  VARID                { mkRdrUnqual (mkSysOccFS tvName $1) }
+               :  var_fs               { mkRdrUnqual (mkSysOccFS tvName $1) }
 
 tv_bndr                :: { HsTyVarBndr RdrName }
                :  tv_name '::' akind   { IfaceTyVar $1 $3 }
@@ -730,11 +685,10 @@ kind              :: { Kind }
                | akind '->' kind       { mkArrowKind $1 $3 }
 
 akind          :: { Kind }
-               : VARSYM                { if $1 == SLIT("*") then
-                                               liftedTypeKind
-                                         else if $1 == SLIT("?") then
+                : '*'                   { liftedTypeKind }
+               | VARSYM                { if $1 == FSLIT("?") then
                                                openTypeKind
-                                         else if $1 == SLIT("\36") then
+                                         else if $1 == FSLIT("\36") then
                                                 usageTypeKind  -- dollar
                                           else panic "ParseInterface: akind"
                                        }
@@ -748,15 +702,11 @@ id_info           :: { [HsIdInfo RdrName] }
 
 id_info_item   :: { HsIdInfo RdrName }
                : '__A' INTEGER                 { HsArity (fromInteger $2) }
-               | '__U' inline_prag core_expr   { HsUnfold $2 $3 }
+               | '__U' activation core_expr    { HsUnfold $2 $3 }
                | '__S'                         { HsStrictness $1 }
                | '__C'                         { HsNoCafRefs }
                | '__P' qvar_name INTEGER       { HsWorker $2 (fromInteger $3) }
 
-inline_prag     :: { InlinePragInfo }
-                :  {- empty -}                  { AlwaysActive }
-               | '[' INTEGER ']'               { ActiveAfter (fromInteger $2) }
-
 -------------------------------------------------------
 core_expr      :: { UfExpr RdrName }
 core_expr      : '\\' core_bndrs '->' core_expr        { foldr UfLam $4 $2 }