@@ -468,27 +468,29 @@ bracketed' open syn =
468468 lchar ')'
469469 return $ PTrue (spanFC open (FC f start (l, c+1))) TypeOrTerm
470470 <|> try (dependentPair TypeOrTerm [] open syn)
471− <|> try (do fc <- getFC; o <- operator; e <- expr syn; lchar ')'
471+ <|> try (do fc <- getFC
472+ opName <- operatorName
472473 -- No prefix operators! (bit of a hack here...)
473− if (o == "-" || o == "!")
474− then fail "minus not allowed in section"
475− else return $ PLam fc (sMN 1000 "ARG") NoFC Placeholder
476− (PApp fc (PRef fc [] (sUN o)) [pexp (PRef fc [] (sMN 1000 "ARG")),
477− pexp e]))
478− <|> try (do l <- simpleExpr syn
479− op <- option Nothing (do o <- operator
480− lchar ')'
481− return (Just o))
482− fc0 <- getFC
483− case op of
484− Nothing -> bracketedExpr syn open l
485− Just o -> return $ PLam fc0 (sMN 1000 "ARG") NoFC Placeholder
486− (PApp fc0 (PRef fc0 [] (sUN o)) [pexp l,
487− pexp (PRef fc0 [] (sMN 1000 "ARG"))]))
474+ guard $ opName /= sUN "-" && opName /= sUN "!"
475+ e <- expr syn
476+ lchar ')'
477+ return $ PLam fc (sMN 1000 "ARG") NoFC Placeholder
478+ (PApp fc (PRef fc [] opName) [pexp (PRef fc [] (sMN 1000 "ARG")),
479+ pexp e]))
480+ <|> try (simpleExpr syn >>= \l ->
481+ try (do opName <- operatorName
482+ lchar ')'
483+ fc <- getFC
484+ return $ PLam fc (sMN 1000 "ARG") NoFC Placeholder
485+ (PApp fc (PRef fc [] opName) [pexp l,
486+ pexp (PRef fc [] (sMN 1000 "ARG"))]))
487+ <|> bracketedExpr syn open l)
488488 <|> do l <- expr (allowConstr syn)
489489 bracketedExpr (allowConstr syn) open l
490−
491−
490+ where
491+ operatorName :: IdrisParser Name
492+ operatorName = sUN <$> operator
493+ <|> fst <$> between (lchar '`') (lchar '`') fnName
492494
493495{-| Parses the rest of a dependent pair after '(' or '(Expr **' -}
494496dependentPair :: PunInfo -> [(PTerm, Maybe (FC, PTerm), FC)] -> FC -> SyntaxInfo -> IdrisParser PTerm