import IdInfo ( exactArity, mkStrictnessInfo, mkBottomStrictnessInfo,
ArgUsageInfo, FBTypeInfo, ArityInfo, StrictnessInfo
)
-import Kind ( Kind, mkArrowKind, mkTypeKind )
+import Kind ( Kind, mkArrowKind, mkBoxedTypeKind )
import Lex
import RnMonad ( SYN_IE(ImportVersion), SYN_IE(LocalVersion), ParsedIface(..),
import SrcLoc ( mkIfaceSrcLoc )
import Util ( panic{-, pprPanic ToDo:rm-} )
import Pretty ( Doc )
-import PprStyle -- PprDebug for panic
+import Outputable ( PprStyle(..) )
import Maybes ( MaybeErr(..) )
------------------------------------------------------------------
ARITY_PART { ITarity }
STRICT_PART { ITstrict }
- UNFOLD_PART { ITunfold }
+ UNFOLD_PART { ITunfold $$ }
DEMAND { ITdemand $$ }
BOTTOM { ITbottom }
LAM { ITlam }
id_info_item : ARITY_PART arity_info { HsArity $2 }
| STRICT_PART strict_info { HsStrictness $2 }
| BOTTOM { HsStrictness mkBottomStrictnessInfo }
- | UNFOLD_PART core_expr { HsUnfold $2 }
+ | UNFOLD_PART core_expr { HsUnfold $1 $2 }
arity_info :: { ArityInfo }
arity_info : INTEGER { exactArity (fromInteger $1) }
strict_info :: { StrictnessInfo RdrName }
-strict_info : DEMAND any_var_name { mkStrictnessInfo $1 (Just $2) }
+strict_info : DEMAND any_var_name OCURLY data_names CCURLY { mkStrictnessInfo $1 (Just ($2,$4)) }
+ | DEMAND any_var_name { mkStrictnessInfo $1 (Just ($2,[])) }
| DEMAND { mkStrictnessInfo $1 Nothing }
core_expr :: { UfExpr RdrName }
core_tv_bndr :: { UfBinder RdrName }
core_tv_bndr : tv_name DCOLON akind { UfTyBinder $1 $3 }
- | tv_name { UfTyBinder $1 mkTypeKind }
+ | tv_name { UfTyBinder $1 mkBoxedTypeKind }
core_tv_bndrs :: { [UfBinder RdrName] }
core_tv_bndrs : { [] }
var_names :: { [RdrName] }
var_names : { [] }
- | var_name var_names { $1 : $2
+ | var_name var_names { $1 : $2 }
+
+data_names :: { [RdrName] }
+data_names : { [] }
+ | data_name data_names { $1 : $2
--productions-for-types--------------------------------
}
| akind RARROW kind { mkArrowKind $1 $3 }
akind :: { Kind }
- : VARSYM { mkTypeKind {- ToDo: check that it's "*" -} }
+ : VARSYM { mkBoxedTypeKind {- ToDo: check that it's "*" -} }
| OPAREN kind CPAREN { $2 }
tv_name :: { RdrName }