@@ -89,8 +89,8 @@ isDocCommentMarker _ = False
90singleLineComment :: MonadicParsing m => m ()
90singleLineComment :: MonadicParsing m => m ()
91singleLineComment = try (string "--" *> satisfy isEol *> pure ())
91singleLineComment = try (string "--" *> satisfy isEol *> pure ())
92− <|> try (string "--" *> satisfy (not . isDocCommentMarker) *> many (satisfy (not . isEol)) *> (satisfy isEol <?> "end of line") *> pure ())
92+ <|> string "--" *> satisfy (not . isDocCommentMarker) *> many (satisfy (not . isEol)) *> (satisfy isEol <?> "end of line") *> pure ()
93− <?> "single-line comment"
93+ <?> ""
95{- | Consumes a multi-line comment
95{- | Consumes a multi-line comment
96 MultiLineComment_t ::=
96 MultiLineComment_t ::=
@@ -107,14 +107,14 @@ singleLineComment = try (string "--" *> satisfy isEol *> pure ())
108multiLineComment :: MonadicParsing m => m ()
108multiLineComment :: MonadicParsing m => m ()
109multiLineComment = try (string "{-" *> (string "-}") *> pure ())
109multiLineComment = try (string "{-" *> (string "-}") *> pure ())
110− <|> try (string "{-" *> satisfy (not . isDocCommentMarker) *> inCommentChars)
110+ <|> string "{-" *> satisfy (not . isDocCommentMarker) *> inCommentChars
111− <?> "multi-line comment"
111+ <?> ""
112 where inCommentChars :: MonadicParsing m => m ()
112 where inCommentChars :: MonadicParsing m => m ()
113− inCommentChars = try (string "-}" *> pure ())
113+ inCommentChars = string "-}" *> pure ()
114− <|> try (multiLineComment *> inCommentChars)
114+ <|> try (multiLineComment) *> inCommentChars
115− <|> try (docComment '|' *> inCommentChars)
115+ <|> try (docComment '|') *> inCommentChars
116− <|> try (docComment '^' *> inCommentChars)
116+ <|> try (docComment '^') *> inCommentChars
117− <|> try (skipSome (noneOf startEnd) *> inCommentChars)
117+ <|> skipSome (noneOf startEnd) *> inCommentChars
118 <|> oneOf startEnd *> inCommentChars
118 <|> oneOf startEnd *> inCommentChars
119 <?> "end of comment"
119 <?> "end of comment"
120 startEnd :: String
120 startEnd :: String
@@ -131,7 +131,7 @@ docComment marker | isDocCommentMarker marker = do dc <- docComment' marker; ret
131 where docComment' :: MonadicParsing m => Char -> m String
131 where docComment' :: MonadicParsing m => Char -> m String
132 docComment' marker = string "--" *> char marker *> many (satisfy (not . isEol)) <* satisfy isEol
132 docComment' marker = string "--" *> char marker *> many (satisfy (not . isEol)) <* satisfy isEol
133 <|> string "{-" *> char marker *> (manyTill anyChar (try (string "-}")) <?> "end of comment")
133 <|> string "{-" *> char marker *> (manyTill anyChar (try (string "-}")) <?> "end of comment")
134− <?> "documentation comment"
134+ <?> ""
136-- | Consumes whitespace (and comments)
136-- | Consumes whitespace (and comments)
137whiteSpace :: MonadicParsing m => m ()
137whiteSpace :: MonadicParsing m => m ()
@@ -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
@@ -699,9 +701,9 @@ fnDecl' syn = try (do doc <- option "" (docComment '|')
699 terminator
701 terminator
700 addAcc n acc
702 addAcc n acc
701 return (PTy doc syn fc opts' n ty))
703 return (PTy doc syn fc opts' n ty))
702− <|> try (postulate syn)
704+ <|> postulate syn
703− <|> try (pattern syn)
706+ <|> pattern syn
705 <?> "function declaration"
707 <?> "function declaration"
@@ -727,12 +729,12 @@ fnOpts :: [FnOpt] -> IdrisParser [FnOpt]
727fnOpts opts
729fnOpts opts
728 = do reserved "total"; fnOpts (TotalFn : opts)
730 = do reserved "total"; fnOpts (TotalFn : opts)
729 <|> do reserved "partial"; fnOpts (PartialFn : (opts \\ [TotalFn]))
731 <|> do reserved "partial"; fnOpts (PartialFn : (opts \\ [TotalFn]))
730− <|> try (do lchar '%'; reserved "export"; c <- stringLiteral;
732+ <|> do try (lchar '%' *> reserved "export"); c <- stringLiteral;
731− fnOpts (CExport c : opts))
733+ fnOpts (CExport c : opts)
732− <|> try (do lchar '%'; reserved "assert_total";
734+ <|> do try (lchar '%' *> reserved "assert_total");
733− fnOpts (AssertTotal : opts))
735+ fnOpts (AssertTotal : opts)
734− <|> try (do lchar '%'; reserved "reflection";
736+ <|> do try (lchar '%' *> reserved "reflection");
735− fnOpts (Reflection : opts))
737+ fnOpts (Reflection : opts)
736 <|> do lchar '%'; reserved "specialise";
738 <|> do lchar '%'; reserved "specialise";
737 lchar '['; ns <- sepBy nameTimes (lchar ','); lchar ']'
739 lchar '['; ns <- sepBy nameTimes (lchar ','); lchar ']'
738 fnOpts (Specialise ns : opts)
740 fnOpts (Specialise ns : opts)
@@ -775,9 +777,10 @@ Postulate ::=
777postulate :: SyntaxInfo -> IdrisParser PDecl
779postulate :: SyntaxInfo -> IdrisParser PDecl
778−postulate syn = do doc <- option "" (docComment '|')
780+postulate syn = do doc <- try $ do doc <- option "" (docComment '|')
779− pushIndent
781+ pushIndent
780− reserved "postulate"
782+ reserved "postulate"
781 ist <- get
784 ist <- get
782 let initOpts = if default_total ist
785 let initOpts = if default_total ist
783 then [TotalFn]
786 then [TotalFn]
@@ -902,10 +905,10 @@ FixityType ::=
904fixityType :: IdrisParser (Int -> Fixity)
907fixityType :: IdrisParser (Int -> Fixity)
905−fixityType = try (do reserved "infixl"; return Infixl)
908+fixityType = do reserved "infixl"; return Infixl
906− <|> try (do reserved "infixr"; return Infixr)
909+ <|> do reserved "infixr"; return Infixr
907− <|> try (do reserved "infix"; return InfixN)
910+ <|> do reserved "infix"; return InfixN
908− <|> try (do reserved "prefix"; return PrefixN)
911+ <|> do reserved "prefix"; return PrefixN
909 <?> "fixity type"
912 <?> "fixity type"
911{- |Parses a methods block (for type classes and instances)
914{- |Parses a methods block (for type classes and instances)
@@ -931,8 +934,10 @@ Class ::=
933class_ :: SyntaxInfo -> IdrisParser [PDecl]
936class_ :: SyntaxInfo -> IdrisParser [PDecl]
937+class_ syn = do (doc, acc) <- try (do
934−class_ syn = do doc <- option "" (docComment '|')
938+ doc <- option "" (docComment '|')
935− acc <- optional accessibility
939+ acc <- optional accessibility
936 reserved "class"; fc <- getFC; cons <- constraintList syn; n_in <- name
941 reserved "class"; fc <- getFC; cons <- constraintList syn; n_in <- name
937 let n = expandNS syn n_in
942 let n = expandNS syn n_in
938 cs <- many carg
943 cs <- many carg
@@ -1441,8 +1446,8 @@ Arg ::=
1443arg :: SyntaxInfo -> IdrisParser PArg
1448arg :: SyntaxInfo -> IdrisParser PArg
1444−arg syn = try (implicitArg syn)
1449+arg syn = implicitArg syn
1445− <|> try (constraintArg syn)
1450+ <|> constraintArg syn
1446 <|> do e <- simpleExpr syn
1451 <|> do e <- simpleExpr syn
1447 return (pexp e)
1452 return (pexp e)
1448 <?> "function argument"
1453 <?> "function argument"
@@ -1847,9 +1852,9 @@ do_ syn
1847 fc <- getFC
1852 fc <- getFC
1848 e <- expr syn;
1853 e <- expr syn;
1849 return (DoBindP fc i e))
1854 return (DoBindP fc i e))
1850− <|> try (do e <- expr syn
1855+ <|> do e <- expr syn
1851− fc <- getFC
1856+ fc <- getFC
1852− return (DoExp fc e))
1857+ return (DoExp fc e)
1853 <?> "do block expression"
1858 <?> "do block expression"
1855{- |Parses an expression in idiom brackets
1860{- |Parses an expression in idiom brackets
@@ -1922,9 +1927,11 @@ Record ::=
1922 DocComment Accessibility? 'record' FnName TypeSig 'where' OpenBlock Constructor KeepTerminator CloseBlock;
1927 DocComment Accessibility? 'record' FnName TypeSig 'where' OpenBlock Constructor KeepTerminator CloseBlock;
1924record :: SyntaxInfo -> IdrisParser PDecl
1929record :: SyntaxInfo -> IdrisParser PDecl
1930+record syn = do (doc, acc) <- try (do
1925−record syn = do doc <- option "" (docComment '|')
1931+ doc <- option "" (docComment '|')
1926− acc <- optional accessibility
1932+ acc <- optional accessibility
1927− reserved "record"
1933+ reserved "record"
1928 fc <- getFC
1935 fc <- getFC
1929 tyn_in <- fnName
1936 tyn_in <- fnName
1930 ty <- typeSig (allowImp syn)
1937 ty <- typeSig (allowImp syn)
@@ -2152,116 +2159,108 @@ rhs syn n = do lchar '='; expr syn
2152 addLet nm r = (PLet (UN "value") Placeholder r (PMetavar nm))
2159 addLet nm r = (PLet (UN "value") Placeholder r (PMetavar nm))
2154{- |Parses a function clause
2161{- |Parses a function clause
2155−Clause ::= FnName ConstraintArg* ImplicitOrArgExpr* WExpr* RHS WhereOrTerminator
2162+RHSOrWithBlock ::= RHS WhereOrTerminator
2163+ | 'with' SimpleExpr OpenBlock FnDecl+ CloseBlock
2165+Clause ::= WExpr+ RHSOrWithBlock
2156 | SimpleExpr '<==' FnName RHS WhereOrTerminator
2166 | SimpleExpr '<==' FnName RHS WhereOrTerminator
2157− | WExpr+ RHS WhereOrTerminator
2167+ | ArgExpr Operator ArgExpr WExpr* RHSOrWithBlock {- Except "=" and "?=" operators to avoid ambiguity -}
2158− | FnName ConstraintArg* ImplicitOrArgExpr* WExpr* 'with' SimpleExpr OpenBlock FnDecl+ CloseBlock
2168+ | FnName ConstraintArg* ImplicitOrArgExpr* WExpr* RHSOrWithBlock
2159− | WExpr+ 'with' SimpleExpr OpenBlock FnDecl+ CloseBlock
2160− | ArgExpr Operator ArgExpr WExpr* RHS WhereOrTerminator
2161− | ArgExpr Operator ArgExpr WExpr* 'with' SimpleExpr OpenBlock FnDecl+ CloseBlock
2163ImplicitOrArgExpr ::= ImplicitArg | ArgExpr;
2170ImplicitOrArgExpr ::= ImplicitArg | ArgExpr;
2164WhereOrTerminator ::= WhereBlock | Terminator;
2171WhereOrTerminator ::= WhereBlock | Terminator;
2166clause :: SyntaxInfo -> IdrisParser PClause
2173clause :: SyntaxInfo -> IdrisParser PClause
2167clause syn
2174clause syn
2168− = try (do pushIndent
2169− n_in <- fnName; let n = expandNS syn n_in
2170− cargs <- many (constraintArg syn)
2172− args <- many (try (implicitArg (syn { inPattern = True } ))
2173− <|> (fmap pexp (argExpr syn)))
2174− wargs <- many (wExpr syn)
2177− let ctxt = tt_ctxt ist
2178− let wsyn = syn { syn_namespace = [] }
2179− (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2184− let capp = PApp fc (PRef fc n)
2187− put (ist { lastParse = Just n })
2188− return $ PClause fc n capp wargs r wheres)
2189− <|> try (do pushIndent
2175+ = do wargs <- try (do pushIndent; some (wExpr syn))
2190− ty <- simpleExpr syn
2176+ fc <- getFC
2193− n_in <- fnName; let n = expandNS syn n_in
2196− let ctxt = tt_ctxt ist
2197− let wsyn = syn { syn_namespace = [] }
2198− (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2203− let capp = PLet (MN 0 "match")
2206− (PRef fc (MN 0 "match"))
2208− put (ist { lastParse = Just n })
2209− return $ PClause fc n capp [] r wheres)
2210− <|> try (do pushIndent
2211− wargs <- some (wExpr syn)
2212− ist <- get
2177+ ist <- get
2213− n <- case lastParse ist of
2178+ n <- case lastParse ist of
2214− Just t -> return t
2179+ Just t -> return t
2215− Nothing -> fail "Invalid clause"
2180+ Nothing -> fail "Invalid clause"
2217− r <- rhs syn n
2181+ (do r <- rhs syn n
2218− let ctxt = tt_ctxt ist
2182+ let ctxt = tt_ctxt ist
2219− let wsyn = syn { syn_namespace = [] }
2183+ let wsyn = syn { syn_namespace = [] }
2220− (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2184+ (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2221− popIndent
2185+ popIndent
2222− return x,
2186+ return x,
2223− do terminator
2187+ do terminator
2224− return ([], [])]
2188+ return ([], [])]
2225− return $ PClauseR fc wargs r wheres)
2189+ return $ PClauseR fc wargs r wheres) <|> (do
2227− <|> try (do pushIndent
2228− n_in <- fnName; let n = expandNS syn n_in
2229− cargs <- many (constraintArg syn)
2231− args <- many (try (implicitArg (syn { inPattern = True } ))
2232− <|> (fmap pexp (argExpr syn)))
2233− wargs <- many (wExpr syn)
2234− let capp = PApp fc (PRef fc n)
2237− put (ist { lastParse = Just n })
2238− reserved "with"
2191+ reserved "with"
2239− wval <- simpleExpr syn
2192+ wval <- simpleExpr syn
2240− openBlock
2193+ openBlock
2241− ds <- some $ fnDecl syn
2194+ ds <- some $ fnDecl syn
2242− let withs = map (fillLHSD n capp wargs) $ concat ds
2195+ let withs = concat ds
2243− closeBlock
2196+ closeBlock
2197+ return $ PWithR fc wargs wval withs)
2198+ <|> do ty <- try (do pushIndent
2199+ ty <- simpleExpr syn
2203+ n_in <- fnName; let n = expandNS syn n_in
2206+ let ctxt = tt_ctxt ist
2207+ let wsyn = syn { syn_namespace = [] }
2208+ (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2213+ let capp = PLet (MN 0 "match")
2216+ (PRef fc (MN 0 "match"))
2218+ put (ist { lastParse = Just n })
2219+ return $ PClause fc n capp [] r wheres
2220+ <|> do (l, op) <- try (do
2224+ when (op == "=" || op == "?=" ) (fail "infix clause definition with \"=\" and \"?=\" not supported ")
2226+ let n = expandNS syn (UN op)
2229+ wargs <- many (wExpr syn)
2230+ (do rs <- rhs syn n
2231+ let wsyn = syn { syn_namespace = [] }
2232+ (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2238+ let capp = PApp fc (PRef fc n) [pexp l, pexp r]
2239+ put (ist { lastParse = Just n })
2240+ return $ PClause fc n capp wargs rs wheres) <|> (do
2244 popIndent
2241 popIndent
2245− return $ PWith fc n capp wargs wval withs)
2247− <|> try (do wargs <- some (wExpr syn)
2249 reserved "with"
2242 reserved "with"
2250 wval <- simpleExpr syn
2243 wval <- simpleExpr syn
2251 openBlock
2244 openBlock
2252 ds <- some $ fnDecl syn
2245 ds <- some $ fnDecl syn
2253− let withs = concat ds
2254 closeBlock
2246 closeBlock
2248+ let capp = PApp fc (PRef fc n) [pexp l, pexp r]
2249+ let withs = map (fillLHSD n capp wargs) $ concat ds
2250+ put (ist { lastParse = Just n })
2255− return $ PWithR fc wargs wval withs)
2251+ return $ PWith fc n capp wargs wval withs)
2257− <|> try(do pushIndent
2252+ <|> do pushIndent
2260− let n = expandNS syn (UN op)
2253+ n_in <- fnName; let n = expandNS syn n_in
2261− r <- argExpr syn
2254+ cargs <- many (constraintArg syn)
2262− fc <- getFC
2255+ fc <- getFC
2256+ args <- many (try (implicitArg (syn { inPattern = True } ))
2257+ <|> (fmap pexp (argExpr syn)))
2263− wargs <- many (wExpr syn)
2258+ wargs <- many (wExpr syn)
2259+ let capp = PApp fc (PRef fc n)
2264− rs <- rhs syn n
2261+ (do r <- rhs syn n
2263+ let ctxt = tt_ctxt ist
2265 let wsyn = syn { syn_namespace = [] }
2264 let wsyn = syn { syn_namespace = [] }
2266 (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2265 (wheres, nmap) <- choice [do x <- whereBlock n wsyn
2267 popIndent
2266 popIndent
@@ -2269,26 +2268,18 @@ clause syn
2269 do terminator
2268 do terminator
2270 return ([], [])]
2269 return ([], [])]
2271 ist <- get
2270 ist <- get
2272− let capp = PApp fc (PRef fc n) [pexp l, pexp r]
2273 put (ist { lastParse = Just n })
2271 put (ist { lastParse = Just n })
2274− return $ PClause fc n capp wargs rs wheres)
2272+ return $ PClause fc n capp wargs r wheres) <|> (do
2276− <|> do l <- argExpr syn
2278− let n = expandNS syn (UN op)
2281− wargs <- many (wExpr syn)
2282− reserved "with"
2273+ reserved "with"
2275+ put (ist { lastParse = Just n })
2283− wval <- simpleExpr syn
2276+ wval <- simpleExpr syn
2284− openBlock
2277+ openBlock
2285− ds <- some $ fnDecl syn
2278+ ds <- some $ fnDecl syn
2288− let capp = PApp fc (PRef fc n) [pexp l, pexp r]
2289− let withs = map (fillLHSD n capp wargs) $ concat ds
2279+ let withs = map (fillLHSD n capp wargs) $ concat ds
2290− put (ist { lastParse = Just n })
2280+ closeBlock
2291− return $ PWith fc n capp wargs wval withs
2282+ return $ PWith fc n capp wargs wval withs)
2292 <?> "function clause"
2283 <?> "function clause"
2294 fillLHS :: Name -> PTerm -> [PTerm] -> PClause -> PClause
2285 fillLHS :: Name -> PTerm -> [PTerm] -> PClause -> PClause
@@ -2332,13 +2323,13 @@ Codegen ::= 'C'
2334codegen_ :: IdrisParser Codegen
2325codegen_ :: IdrisParser Codegen
2335−codegen_ = try (do reserved "C"; return ViaC)
2326+codegen_ = do reserved "C"; return ViaC
2336− <|> try (do reserved "Java"; return ViaJava)
2327+ <|> do reserved "Java"; return ViaJava
2337− <|> try (do reserved "JavaScript"; return ViaJavaScript)
2328+ <|> do reserved "JavaScript"; return ViaJavaScript
2338− <|> try (do reserved "Node"; return ViaNode)
2329+ <|> do reserved "Node"; return ViaNode
2339− <|> try (do reserved "LLVM"; return ViaLLVM)
2330+ <|> do reserved "LLVM"; return ViaLLVM
2340− <|> try (do reserved "Bytecode"; return Bytecode)
2331+ <|> do reserved "Bytecode"; return Bytecode
2341− <?> "code generation language"
2332+ <?> "code generation language"
2343{- |Parses a compiler directive
2334{- |Parses a compiler directive
2344StringList ::=
2335StringList ::=
@@ -2363,45 +2354,45 @@ Directive' ::= 'lib' CodeGen String_t
2365directive :: SyntaxInfo -> IdrisParser [PDecl]
2356directive :: SyntaxInfo -> IdrisParser [PDecl]
2366−directive syn = try (do lchar '%'; reserved "lib"; cgn <- codegen_; lib <- stringLiteral;
2357+directive syn = do try (lchar '%' *> reserved "lib"); cgn <- codegen_; lib <- stringLiteral;
2367− return [PDirective (do addLib cgn lib
2358+ return [PDirective (do addLib cgn lib
2368− addIBC (IBCLib cgn lib))])
2359+ addIBC (IBCLib cgn lib))]
2369− <|> try (do lchar '%'; reserved "link"; cgn <- codegen_; obj <- stringLiteral;
2360+ <|> do try (lchar '%' *> reserved "link"); cgn <- codegen_; obj <- stringLiteral;
2370− return [PDirective (do dirs <- allImportDirs
2361+ return [PDirective (do dirs <- allImportDirs
2371− o <- liftIO $ findInPath dirs obj
2362+ o <- liftIO $ findInPath dirs obj
2372− addIBC (IBCObj cgn obj) -- just name, search on loading ibc
2363+ addIBC (IBCObj cgn obj) -- just name, search on loading ibc
2373− addObjectFile cgn o)])
2364+ addObjectFile cgn o)]
2374− <|> try (do lchar '%'; reserved "flag"; cgn <- codegen_;
2365+ <|> do try (lchar '%' *> reserved "flag"); cgn <- codegen_;
2375− flag <- stringLiteral
2366+ flag <- stringLiteral
2376− return [PDirective (do addIBC (IBCCGFlag cgn flag)
2367+ return [PDirective (do addIBC (IBCCGFlag cgn flag)
2377− addFlag cgn flag)])
2368+ addFlag cgn flag)]
2378− <|> try (do lchar '%'; reserved "include"; cgn <- codegen_; hdr <- stringLiteral;
2369+ <|> do try (lchar '%' *> reserved "include"); cgn <- codegen_; hdr <- stringLiteral;
2379− return [PDirective (do addHdr cgn hdr
2370+ return [PDirective (do addHdr cgn hdr
2380− addIBC (IBCHeader cgn hdr))])
2371+ addIBC (IBCHeader cgn hdr))]
2381− <|> try (do lchar '%'; reserved "hide"; n <- iName []
2372+ <|> do try (lchar '%' *> reserved "hide"); n <- iName []
2382− return [PDirective (do setAccessibility n Hidden
2373+ return [PDirective (do setAccessibility n Hidden
2383− addIBC (IBCAccess n Hidden))])
2374+ addIBC (IBCAccess n Hidden))]
2384− <|> try (do lchar '%'; reserved "freeze"; n <- iName []
2375+ <|> do try (lchar '%' *> reserved "freeze"); n <- iName []
2385− return [PDirective (do setAccessibility n Frozen
2376+ return [PDirective (do setAccessibility n Frozen
2386− addIBC (IBCAccess n Frozen))])
2377+ addIBC (IBCAccess n Frozen))]
2387− <|> try (do lchar '%'; reserved "access"; acc <- accessibility
2378+ <|> do try (lchar '%' *> reserved "access"); acc <- accessibility
2388− return [PDirective (do i <- get
2379+ return [PDirective (do i <- get
2389− put(i { default_access = acc }))])
2380+ put(i { default_access = acc }))]
2390− <|> try (do lchar '%'; reserved "default"; tot <- totality
2381+ <|> do try (lchar '%' *> reserved "default"); tot <- totality
2391− i <- get
2382+ i <- get
2392− put (i { default_total = tot } )
2383+ put (i { default_total = tot } )
2393− return [PDirective (do i <- get
2384+ return [PDirective (do i <- get
2394− put(i { default_total = tot }))])
2385+ put(i { default_total = tot }))]
2395− <|> try (do lchar '%'; reserved "logging"; i <- natural;
2386+ <|> do try (lchar '%' *> reserved "logging"); i <- natural;
2396− return [PDirective (setLogLevel (fromInteger i))])
2387+ return [PDirective (setLogLevel (fromInteger i))]
2397− <|> try (do lchar '%'; reserved "dynamic"; libs <- sepBy1 stringLiteral (lchar ',');
2388+ <|> do try (lchar '%' *> reserved "dynamic"); libs <- sepBy1 stringLiteral (lchar ',');
2398− return [PDirective (do added <- addDyLib libs
2389+ return [PDirective (do added <- addDyLib libs
2399− case added of
2390+ case added of
2400− Left lib -> addIBC (IBCDyLib (lib_name lib))
2391+ Left lib -> addIBC (IBCDyLib (lib_name lib))
2401− Right msg ->
2392+ Right msg ->
2402− fail $ msg)])
2393+ fail $ msg)]
2403− <|> try (do lchar '%'; reserved "language"; ext <- pLangExt;
2394+ <|> do try (lchar '%' *> reserved "language"); ext <- pLangExt;
2404− return [PDirective (addLangExt ext)])
2395+ return [PDirective (addLangExt ext)]
2405 <?> "directive"
2396 <?> "directive"
2407pLangExt :: IdrisParser LanguageExt
2398pLangExt :: IdrisParser LanguageExt
@@ -2420,7 +2411,7 @@ totality
2420Provider ::= '%' 'provide' '(' FnName TypeSig ')' 'with' Expr;
2411Provider ::= '%' 'provide' '(' FnName TypeSig ')' 'with' Expr;
2422provider :: SyntaxInfo -> IdrisParser [PDecl]
2413provider :: SyntaxInfo -> IdrisParser [PDecl]
2423−provider syn = do lchar '%'; reserved "provide";
2414+provider syn = do try (lchar '%' *> reserved "provide");
2424 lchar '('; n <- fnName; t <- typeSig syn; lchar ')'
2415 lchar '('; n <- fnName; t <- typeSig syn; lchar ')'
2425 fc <- getFC
2416 fc <- getFC
2426 reserved "with"
2417 reserved "with"
@@ -2432,7 +2423,7 @@ provider syn = do lchar '%'; reserved "provide";
2432Transform ::= '%' 'transform' Expr '==>' Expr
2423Transform ::= '%' 'transform' Expr '==>' Expr
2434transform :: SyntaxInfo -> IdrisParser [PDecl]
2425transform :: SyntaxInfo -> IdrisParser [PDecl]
2435−transform syn = do lchar '%'; reserved "transform";
2426+transform syn = do try (lchar '%' *> reserved "transform")
2436 -- leave it unchecked, until we work out what this should
2427 -- leave it unchecked, until we work out what this should
2437 -- actually mean...
2428 -- actually mean...
2438-- safety <- option True (do reserved "unsafe"
2429-- safety <- option True (do reserved "unsafe"
@@ -2774,4 +2765,3 @@ addHides xs = do i <- getIState
2775 doHide (n, a) = do setAccessibility n a
2766 doHide (n, a) = do setAccessibility n a
2776 addIBC (IBCAccess n a)
2767 addIBC (IBCAccess n a)