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