@@ -555,9 +555,9 @@ decl syn = do notEndBlock
555 <|> instance_ syn
555 <|> instance_ syn
556 <|> do d <- dsl syn; return [d]
556 <|> do d <- dsl syn; return [d]
557 <|> directive syn
557 <|> directive syn
558− <|> try(provider syn)
558+ <|> provider syn
559 <|> transform syn
559 <|> transform syn
560− <|> try(do import_; fail "imports must be at top of file")
560+ <|> do import_; fail "imports must be at top of file"
561 <?> "declaration"
561 <?> "declaration"
562 declBody' :: IdrisParser [PDecl]
562 declBody' :: IdrisParser [PDecl]
563 declBody' = do d <- decl' syn
563 declBody' = do d <- decl' syn
@@ -575,11 +575,11 @@ Decl' ::=
577decl' :: SyntaxInfo -> IdrisParser PDecl
577decl' :: SyntaxInfo -> IdrisParser PDecl
578−decl' syn = try fixity
578+decl' syn = fixity
579− <|> try (fnDecl' syn)
580+ <|> fnDecl' syn
580− <|> try (data_ syn)
581+ <|> data_ syn
581− <|> try (record syn)
582+ <|> record syn
582− <|> try (syntaxDecl syn)
583 <?> "declaration"
583 <?> "declaration"
585{- | Parses a syntax extension declaration (and adds the rule to parser state)
585{- | Parses a syntax extension declaration (and adds the rule to parser state)
@@ -615,10 +615,12 @@ SyntaxSym ::= '[' Name_t ']'
616syntaxRule :: SyntaxInfo -> IdrisParser Syntax
616syntaxRule :: SyntaxInfo -> IdrisParser Syntax
617syntaxRule syn
617syntaxRule syn
618− = do pushIndent
619+ pushIndent
619− sty <- option AnySyntax (do reserved "term"; return TermSyntax
620+ sty <- option AnySyntax (do reserved "term"; return TermSyntax
620 <|> do reserved "pattern"; return PatternSyntax)
621 <|> do reserved "pattern"; return PatternSyntax)
621− reserved "syntax"
622+ reserved "syntax"
622 syms <- some syntaxSym
624 syms <- some syntaxSym
623 when (all isExpr syms) $ unexpected "missing keywords in syntax rule"
625 when (all isExpr syms) $ unexpected "missing keywords in syntax rule"
624 let ns = mapMaybe getName syms
626 let ns = mapMaybe getName syms
@@ -932,8 +934,10 @@ Class ::=
934class_ :: SyntaxInfo -> IdrisParser [PDecl]
936class_ :: SyntaxInfo -> IdrisParser [PDecl]
937+class_ syn = do (doc, acc) <- try (do
935−class_ syn = do doc <- option "" (docComment '|')
938+ doc <- option "" (docComment '|')
936− acc <- optional accessibility
939+ acc <- optional accessibility
937 reserved "class"; fc <- getFC; cons <- constraintList syn; n_in <- name
941 reserved "class"; fc <- getFC; cons <- constraintList syn; n_in <- name
938 let n = expandNS syn n_in
942 let n = expandNS syn n_in
939 cs <- many carg
943 cs <- many carg
@@ -1923,9 +1927,11 @@ Record ::=
1923 DocComment Accessibility? 'record' FnName TypeSig 'where' OpenBlock Constructor KeepTerminator CloseBlock;
1927 DocComment Accessibility? 'record' FnName TypeSig 'where' OpenBlock Constructor KeepTerminator CloseBlock;
1925record :: SyntaxInfo -> IdrisParser PDecl
1929record :: SyntaxInfo -> IdrisParser PDecl
1930+record syn = do (doc, acc) <- try (do
1926−record syn = do doc <- option "" (docComment '|')
1931+ doc <- option "" (docComment '|')
1927− acc <- optional accessibility
1932+ acc <- optional accessibility
1928− reserved "record"
1933+ reserved "record"
1929 fc <- getFC
1935 fc <- getFC
1930 tyn_in <- fnName
1936 tyn_in <- fnName
1931 ty <- typeSig (allowImp syn)
1937 ty <- typeSig (allowImp syn)
@@ -2400,7 +2406,7 @@ totality
2400Provider ::= '%' 'provide' '(' FnName TypeSig ')' 'with' Expr;
2406Provider ::= '%' 'provide' '(' FnName TypeSig ')' 'with' Expr;
2402provider :: SyntaxInfo -> IdrisParser [PDecl]
2408provider :: SyntaxInfo -> IdrisParser [PDecl]
2403−provider syn = do lchar '%'; reserved "provide";
2409+provider syn = do try (lchar '%' *> reserved "provide");
2404 lchar '('; n <- fnName; t <- typeSig syn; lchar ')'
2410 lchar '('; n <- fnName; t <- typeSig syn; lchar ')'
2405 fc <- getFC
2411 fc <- getFC
2406 reserved "with"
2412 reserved "with"
@@ -2412,7 +2418,7 @@ provider syn = do lchar '%'; reserved "provide";
2412Transform ::= '%' 'transform' Expr '==>' Expr
2418Transform ::= '%' 'transform' Expr '==>' Expr
2414transform :: SyntaxInfo -> IdrisParser [PDecl]
2420transform :: SyntaxInfo -> IdrisParser [PDecl]
2415−transform syn = do lchar '%'; reserved "transform";
2421+transform syn = do try (lchar '%' *> reserved "transform")
2416 -- leave it unchecked, until we work out what this should
2422 -- leave it unchecked, until we work out what this should
2417 -- actually mean...
2423 -- actually mean...
2418-- safety <- option True (do reserved "unsafe"
2424-- safety <- option True (do reserved "unsafe"