@@ -322,10 +322,24 @@ pExpr syn = do i <- getState
322322
323323pExpr' :: SyntaxInfo -> IParser PTerm
324324pExpr' syn
325− = try (do i <- getState
326− pExtensions syn (syntax_rules i))
325+ = try (pExtExpr syn)
327326 <|> pNoExtExpr syn
328327
328+pExtExpr :: SyntaxInfo -> IParser PTerm
329+pExtExpr syn = do i <- getState
330+ pExtensions syn (syntax_rules i)
331+
332+pSimpleExtExpr :: SyntaxInfo -> IParser PTerm
333+pSimpleExtExpr syn = do i <- getState
334+ pExtensions syn (filter simple (syntax_rules i))
335+ where
336+ simple (Rule (Expr x:xs) _) = False
337+ simple (Rule (_:xs) _) = case (last xs) of
338+ Keyword _ -> True
339+ Symbol _ -> True
340+ _ -> False
341+ simple _ = False
342+
329343pNoExtExpr syn =
330344 try (pApp syn)
331345 <|> pSimpleExpr syn
@@ -398,6 +412,7 @@ pSimpleExpr syn =
398412 <|> try (do symbol "()"; fc <- pfc; return (PTrue fc))
399413 <|> try (do symbol "_|_"; fc <- pfc; return (PFalse fc))
400414 <|> do lchar '_'; return Placeholder
415+ <|> pSimpleExtExpr syn
401416
402417pPair syn = do lchar '('; l <- pExpr syn; op <- pairOp
403418 fc <- pfc
@@ -601,13 +616,15 @@ whereSyn n syn args = let ns = concatMap allNamesIn args
601616 no_imp = nub (ni ++ ns) }
602617 where decorate n x = UN [(show n ++ "_" ++ show x)]
603618
619+pArgExpr syn = try (pHSimpleExpr syn) <|> pSimpleExtExpr syn
620+
604621pClause :: SyntaxInfo -> IParser PClause
605622pClause syn
606623 = try (do n <- pfName
607624 cargs <- many (pConstraintArg syn)
608625 iargs <- many (pImplicitArg syn)
609626 fc <- pfc
610− args <- many (pHSimpleExpr syn)
627+ args <- many (pArgExpr syn)
611628 wargs <- many (pWExpr syn)
612629 lchar '='
613630 rhs <- pExpr syn
@@ -624,7 +641,7 @@ pClause syn
624641 cargs <- many (pConstraintArg syn)
625642 iargs <- many (pImplicitArg syn)
626643 fc <- pfc
627− args <- many (pHSimpleExpr syn)
644+ args <- many (pArgExpr syn)
628645 wargs <- many (pWExpr syn)
629646 reserved "with"
630647 wval <- pExpr syn
@@ -635,10 +652,10 @@ pClause syn
635652 return $ PWith n (PApp fc (PRef fc n)
636653 (iargs ++ cargs ++ map pexp args)) wargs wval withs)
637654
638− <|> do l <- pSimpleExpr syn
655+ <|> do l <- pArgExpr syn
639656 op <- operator
640657 let n = UN [op]
641− r <- pSimpleExpr syn
658+ r <- pArgExpr syn
642659 fc <- pfc
643660 wargs <- many (pWExpr syn)
644661 lchar '='
@@ -649,10 +666,10 @@ pClause syn
649666 return $ PClause n (PApp fc (PRef fc n) [pexp l,pexp r])
650667 wargs rhs wheres
651668
652− <|> do l <- pSimpleExpr syn
669+ <|> do l <- pArgExpr syn
653670 op <- operator
654671 let n = UN [op]
655− r <- pSimpleExpr syn
672+ r <- pArgExpr syn
656673 fc <- pfc
657674 wargs <- many (pWExpr syn)
658675 reserved "with"