-ext_name :: { ExtName }
- : 'dynamic' { Dynamic }
- | STRING { ExtName $1 Nothing }
- | STRING STRING { ExtName $2 (Just $1) }
+ext_name :: { Maybe ExtName }
+ : 'dynamic' { Just Dynamic }
+ | STRING { Just (ExtName $1 Nothing) }
+ | STRING STRING { Just (ExtName $2 (Just $1)) }
+ | {- empty -} { Nothing }
+
+
+-----------------------------------------------------------------------------
+-- Type signatures
+
+opt_sig :: { Maybe RdrNameHsType }
+ : {- empty -} { Nothing }
+ | '::' sigtype { Just $2 }
+
+opt_asig :: { Maybe RdrNameHsType }
+ : {- empty -} { Nothing }
+ | '::' atype { Just $2 }
+
+sigtypes :: { [RdrNameHsType] }
+ : sigtype { [ $1 ] }
+ | sigtypes ',' sigtype { $3 : $1 }
+
+sigtype :: { RdrNameHsType }
+ : ctype { mkHsForAllTy Nothing [] $1 }
+
+sig_vars :: { [RdrName] }
+ : sig_vars ',' var { $3 : $1 }
+ | var { [ $1 ] }