@@ -337,45 +337,49 @@ bracketed syn =
337 do lchar ')'
337 do lchar ')'
338 fc <- getFC
338 fc <- getFC
339 return $ PTrue fc
339 return $ PTrue fc
341− try (do l <- expr syn
344− <|> do (l, fc) <- try (do
349− rs <- sepBy1 (do fc' <- getFC; r <- expr syn; return (r, fc')) (lchar ',')
351− return $ PPair fc l (mergePairs rs)
352− <|> do (l, fc) <- try (do
359− return (PDPair fc l Placeholder r)
360− <|> try(do fc0 <- getFC
364− return $ PLam (sMN 1000 "ARG") Placeholder
365− (PApp fc0 (PRef fc0 (sUN o)) [pexp l,
366− pexp (PRef fc0 (sMN 1000 "ARG"))]))
367− <|> try(do fc <- getFC; o <- operator; e <- expr syn; lchar ')'
368− return $ PLam (sMN 1000 "ARG") Placeholder
369− (PApp fc (PRef fc (sUN o)) [pexp (PRef fc (sMN 1000 "ARG")),
371− <|> try (do ln <- name; lchar ':'
340+ <|> try (do ln <- name; lchar ':';
372 lty <- expr syn
341 lty <- expr syn
373 reservedOp "**"
342 reservedOp "**"
374 fc <- getFC
343 fc <- getFC
375 r <- expr syn
344 r <- expr syn
376 lchar ')'
345 lchar ')'
377 return (PDPair fc (PRef fc ln) lty r))
346 return (PDPair fc (PRef fc ln) lty r))
347+ <|> try (do fc <- getFC; o <- operator; e <- expr syn; lchar ')'
348+ -- No prefix operators! (bit of a hack here...)
349+ if (o == "-" || o == "!")
350+ then fail "minus not allowed in section"
351+ else return $ PLam (sMN 1000 "ARG") Placeholder
352+ (PApp fc (PRef fc (sUN o)) [pexp (PRef fc (sMN 1000 "ARG")),
354+ <|> try (do l <- simpleExpr syn
355+ op <- option Nothing (do o <- operator
360+ Nothing -> bracketedExpr syn l
361+ Just o -> return $ PLam (sMN 1000 "ARG") Placeholder
362+ (PApp fc0 (PRef fc0 (sUN o)) [pexp l,
363+ pexp (PRef fc0 (sMN 1000 "ARG"))]))
364+ <|> do l <- expr syn
367+bracketedExpr :: SyntaxInfo -> PTerm -> IdrisParser PTerm
368+bracketedExpr syn e =
369+ do lchar ')'; return e
370+ <|> do fc <- do fc <- getFC
373+ rs <- sepBy1 (do fc' <- getFC; r <- expr syn; return (r, fc')) (lchar ',')
375+ return $ PPair fc e (mergePairs rs)
376+ <|> do fc <- do fc <- getFC
381+ return (PDPair fc e Placeholder r)
378− <?> "end of braced expression"
382+ <?> "end of bracketed expression"
379 where mergePairs :: [(PTerm, FC)] -> PTerm
383 where mergePairs :: [(PTerm, FC)] -> PTerm
380 mergePairs [(t, fc)] = t
384 mergePairs [(t, fc)] = t
381 mergePairs ((t, fc):rs) = PPair fc t (mergePairs rs)
385 mergePairs ((t, fc):rs) = PPair fc t (mergePairs rs)