bugfixes in the parser for PGF.Type.Type

This commit is contained in:
krasimir
2009-07-07 22:22:05 +00:00
parent bb3040e2c4
commit c99b64404d
2 changed files with 16 additions and 15 deletions

View File

@@ -36,7 +36,10 @@ instance Read CId where
readsPrec _ = RP.readP_to_S pCId
pCId :: RP.ReadP CId
pCId = fmap mkCId pIdent
pCId = do s <- pIdent
if s == "_"
then RP.pfail
else return (mkCId s)
pIdent :: RP.ReadP String
pIdent = liftM2 (:) (RP.satisfy isIdentFirst) (RP.munch isIdentRest)

View File

@@ -41,32 +41,30 @@ showType = PP.render . ppType 0
pType :: RP.ReadP Type
pType = do
RP.skipSpaces
hyps <- RP.sepBy (pHypo >>= \h -> RP.string "->" >> return h) RP.skipSpaces
hyps <- RP.sepBy (pHypo >>= \h -> RP.skipSpaces >> RP.string "->" >> return h) RP.skipSpaces
RP.skipSpaces
(cat,args) <- pAtom
return (DTyp hyps cat args)
return (DTyp (concat hyps) cat args)
where
pHypo =
do (cat,args) <- pAtom
return (Hyp (DTyp [] cat args))
return [Hyp (DTyp [] cat args)]
RP.<++
(RP.between (RP.char '(') (RP.char ')') $ do
var <- RP.option wildCId $ do
v <- pCId
hyp <- RP.option (\ty -> [Hyp ty]) $ do
vs <- RP.sepBy (RP.skipSpaces >> pCId) (RP.skipSpaces >> RP.char ',')
RP.skipSpaces
RP.string ":"
return v
RP.char ':'
return (\ty -> [HypV v ty | v <- vs])
ty <- pType
return (HypV var ty))
return (hyp ty))
RP.<++
(RP.between (RP.char '{') (RP.char '}') $ do
var <- RP.option wildCId $ do
v <- pCId
RP.skipSpaces
RP.string ":"
return v
vs <- RP.sepBy1 (RP.skipSpaces >> pCId) (RP.skipSpaces >> RP.char ',')
RP.skipSpaces
RP.char ':'
ty <- pType
return (HypI var ty))
return [HypI v ty | v <- vs])
pAtom = do
cat <- pCId