@@ -201,13 +201,15 @@ pSyntaxDecl syn
201 fc <- pfc
201 fc <- pfc
202 return (PSyntax fc s)
202 return (PSyntax fc s)
204− names (Rule syms _) = mapMaybe ename syms
204+ names (Rule syms _ _) = mapMaybe ename syms
205 ename (Keyword n) = Just n
205 ename (Keyword n) = Just n
206 ename _ = Nothing
206 ename _ = Nothing
208pSyntaxRule :: SyntaxInfo -> IParser Syntax
208pSyntaxRule :: SyntaxInfo -> IParser Syntax
209pSyntaxRule syn
209pSyntaxRule syn
210+ = do sty <- option AnySyntax (do reserved "term"; return TermSyntax
211+ <|> do reserved "pattern"; return PatternSyntax)
210− = do reserved "syntax"
212+ reserved "syntax"
211 syms <- many1 pSynSym
213 syms <- many1 pSynSym
212 when (all expr syms) $ fail "No keywords in syntax rule"
214 when (all expr syms) $ fail "No keywords in syntax rule"
213 let ns = mapMaybe name syms
215 let ns = mapMaybe name syms
@@ -216,7 +218,7 @@ pSyntaxRule syn
216 lchar '='
218 lchar '='
217 tm <- pExpr syn
219 tm <- pExpr syn
218 lchar ';'
220 lchar ';'
219− return (Rule syms tm)
221+ return (Rule syms tm sty)
221 expr (Expr _) = True
223 expr (Expr _) = True
222 expr _ = False
224 expr _ = False
@@ -331,15 +333,19 @@ pExtExpr syn = do i <- getState
332pSimpleExtExpr :: SyntaxInfo -> IParser PTerm
334pSimpleExtExpr :: SyntaxInfo -> IParser PTerm
333pSimpleExtExpr syn = do i <- getState
335pSimpleExtExpr syn = do i <- getState
334− pExtensions syn (filter simple (syntax_rules i))
336+ pExtensions syn (filter valid (filter simple (syntax_rules i)))
336− simple (Rule (Expr x:xs) _) = False
338+ simple (Rule (Expr x:xs) _ _) = False
337− simple (Rule (_:xs) _) = case (last xs) of
339+ simple (Rule (_:xs) _ _) = case (last xs) of
338 Keyword _ -> True
340 Keyword _ -> True
339 Symbol _ -> True
341 Symbol _ -> True
340 _ -> False
342 _ -> False
341 simple _ = False
343 simple _ = False
345+ valid (Rule _ _ AnySyntax) = True
346+ valid (Rule _ _ PatternSyntax) = inPattern syn
347+ valid (Rule _ _ TermSyntax) = not (inPattern syn)
343pNoExtExpr syn =
349pNoExtExpr syn =
344 try (pApp syn)
350 try (pApp syn)
345 <|> pSimpleExpr syn
351 <|> pSimpleExpr syn
@@ -352,7 +358,7 @@ pExtensions :: SyntaxInfo -> [Syntax] -> IParser PTerm
352pExtensions syn rules = choice (map (\x -> try (pExt syn x)) rules)
358pExtensions syn rules = choice (map (\x -> try (pExt syn x)) rules)
354pExt :: SyntaxInfo -> Syntax -> IParser PTerm
360pExt :: SyntaxInfo -> Syntax -> IParser PTerm
355−pExt syn (Rule (s:ssym) ptm)
361+pExt syn (Rule (s:ssym) ptm _)
356 = do s1 <- pSymbol pSimpleExpr s
362 = do s1 <- pSymbol pSimpleExpr s
357 smap <- mapM (pSymbol pExpr') ssym
363 smap <- mapM (pSymbol pExpr') ssym
358 let ns = mapMaybe id (s1:smap)
364 let ns = mapMaybe id (s1:smap)
@@ -616,7 +622,8 @@ whereSyn n syn args = let ns = concatMap allNamesIn args
616 no_imp = nub (ni ++ ns) }
622 no_imp = nub (ni ++ ns) }
617 where decorate n x = UN [(show n ++ "_" ++ show x)]
623 where decorate n x = UN [(show n ++ "_" ++ show x)]
625+pArgExpr syn = let syn' = syn { inPattern = True } in
619−pArgExpr syn = try (pHSimpleExpr syn) <|> pSimpleExtExpr syn
626+ try (pHSimpleExpr syn') <|> pSimpleExtExpr syn'
621pClause :: SyntaxInfo -> IParser PClause
628pClause :: SyntaxInfo -> IParser PClause
622pClause syn
629pClause syn