Commit cd19f02b authored by simonpj's avatar simonpj
Browse files

[project @ 2003-03-11 09:04:59 by simonpj]

Buglet in external-core parsing
parent bda047d0
......@@ -79,11 +79,15 @@ tdef :: { RdrNameHsDecl }
: '%data' q_tc_name tbinds '=' '{' cons1 '}'
{ TyClD (mkTyData DataType ([], $2, $3) (DataCons $6) Nothing noSrcLoc) }
| '%newtype' q_tc_name tbinds trep
{ TyClD (mkTyData NewType ([], $2, $3) ($4 $2 $3) Nothing noSrcLoc) }
trep :: { (RdrName -> [HsTyVarBndr RdrName] -> DataConDetails (ConDecl RdrName)) }
: {- empty -} { (\ x ts -> Unknown) }
| '=' ty { (\ x ts -> DataCons [ConDecl x ts [] (PrefixCon [unbangedType $2]) noSrcLoc]) }
{ TyClD (mkTyData NewType ([], $2, $3) ($4 $2) Nothing noSrcLoc) }
-- For a newtype we have to invent a fake data constructor name
-- It doesn't matter what it is, because it won't be used
trep :: { (RdrName -> DataConDetails (ConDecl RdrName)) }
: {- empty -} { (\ tc_name -> Unknown) }
| '=' ty { (\ tc_name -> let { dc_name = setRdrNameSpace tc_name dataName ;
con_info = PrefixCon [unbangedType $2] }
in DataCons [ConDecl dc_name [] [] con_info noSrcLoc]) }
tbind :: { HsTyVarBndr RdrName }
: name { IfaceTyVar $1 liftedTypeKind }
......
......@@ -516,11 +516,12 @@ checkInstType t
returnP (HsForAllTy Nothing [] dict_ty)
checkTyVars :: [RdrNameHsType] -> P [RdrNameHsTyVar]
checkTyVars tvs = mapP chk tvs
where
chk (HsKindSig (HsTyVar tv) k) = returnP (IfaceTyVar tv k)
chk (HsTyVar tv) = returnP (UserTyVar tv)
chk other = parseError "Type found where type variable expected"
checkTyVars tvs
= mapP chk tvs
where
chk (HsKindSig (HsTyVar tv) k) | isRdrTyVar tv = returnP (IfaceTyVar tv k)
chk (HsTyVar tv) | isRdrTyVar tv = returnP (UserTyVar tv)
chk other = parseError "Type found where type variable expected"
checkTyClHdr :: RdrNameHsType -> P (RdrName, [RdrNameHsTyVar])
-- The header of a type or class decl should look like
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment