@@ -555,9 +555,9 @@ decl syn = do notEndBlock
555555 <|> instance_ syn
556556 <|> do d <- dsl syn; return [d]
557557 <|> directive syn
558− <|> try(provider syn)
558+ <|> provider syn
559559 <|> 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"
561561 <?> "declaration"
562562 declBody' :: IdrisParser [PDecl]
563563 declBody' = do d <- decl' syn
@@ -575,11 +575,11 @@ Decl' ::=
575575 ;
576576-}
577577decl' :: SyntaxInfo -> IdrisParser PDecl
578−decl' syn = try fixity
579− <|> try (fnDecl' syn)
580− <|> try (data_ syn)
581− <|> try (record syn)
582− <|> try (syntaxDecl syn)
578+decl' syn = fixity
579+ <|> syntaxDecl syn
580+ <|> fnDecl' syn
581+ <|> data_ syn
582+ <|> record syn
583583 <?> "declaration"
584584
585585{- | Parses a syntax extension declaration (and adds the rule to parser state)
@@ -615,10 +615,12 @@ SyntaxSym ::= '[' Name_t ']'
615615-}
616616syntaxRule :: SyntaxInfo -> IdrisParser Syntax
617617syntaxRule syn
618− = do pushIndent
619− sty <- option AnySyntax (do reserved "term"; return TermSyntax
618+ = do sty <- try (do
619+ pushIndent
620+ sty <- option AnySyntax (do reserved "term"; return TermSyntax
620621 <|> do reserved "pattern"; return PatternSyntax)
621− reserved "syntax"
622+ reserved "syntax"
623+ return sty)
622624 syms <- some syntaxSym
623625 when (all isExpr syms) $ unexpected "missing keywords in syntax rule"
624626 let ns = mapMaybe getName syms
@@ -932,8 +934,10 @@ Class ::=
932934 ;
933935-}
934936class_ :: SyntaxInfo -> IdrisParser [PDecl]
935−class_ syn = do doc <- option "" (docComment '|')
936− acc <- optional accessibility
937+class_ syn = do (doc, acc) <- try (do
938+ doc <- option "" (docComment '|')
939+ acc <- optional accessibility
940+ return (doc, acc))
937941 reserved "class"; fc <- getFC; cons <- constraintList syn; n_in <- name
938942 let n = expandNS syn n_in
939943 cs <- many carg
@@ -1923,9 +1927,11 @@ Record ::=
19231927 DocComment Accessibility? 'record' FnName TypeSig 'where' OpenBlock Constructor KeepTerminator CloseBlock;
19241928-}
19251929record :: SyntaxInfo -> IdrisParser PDecl
1926−record syn = do doc <- option "" (docComment '|')
1927− acc <- optional accessibility
1928− reserved "record"
1930+record syn = do (doc, acc) <- try (do
1931+ doc <- option "" (docComment '|')
1932+ acc <- optional accessibility
1933+ reserved "record"
1934+ return (doc, acc))
19291935 fc <- getFC
19301936 tyn_in <- fnName
19311937 ty <- typeSig (allowImp syn)
@@ -2400,7 +2406,7 @@ totality
24002406Provider ::= '%' 'provide' '(' FnName TypeSig ')' 'with' Expr;
24012407 -}
24022408provider :: SyntaxInfo -> IdrisParser [PDecl]
2403−provider syn = do lchar '%'; reserved "provide";
2409+provider syn = do try (lchar '%' *> reserved "provide");
24042410 lchar '('; n <- fnName; t <- typeSig syn; lchar ')'
24052411 fc <- getFC
24062412 reserved "with"
@@ -2412,7 +2418,7 @@ provider syn = do lchar '%'; reserved "provide";
24122418Transform ::= '%' 'transform' Expr '==>' Expr
24132419-}
24142420transform :: SyntaxInfo -> IdrisParser [PDecl]
2415−transform syn = do lchar '%'; reserved "transform";
2421+transform syn = do try (lchar '%' *> reserved "transform")
24162422 -- leave it unchecked, until we work out what this should
24172423 -- actually mean...
24182424-- safety <- option True (do reserved "unsafe"