on master help sign in
add opt combinator to Text.Lexer
2700cefMichael Morgan
libs/contrib/Text/Lexer.idr+7−1
@@ -48,6 +48,12 @@ export
48isNot : Char -> Lexer
48isNot : Char -> Lexer
49isNot x = Pred (/=x)
49isNot x = Pred (/=x)
50
50
51+||| Recognise a lexer or recognise no input. This is not guaranteed
52+||| to consume input
53+export
54+opt : Lexer -> Recognise False
55+opt l = l <|> Empty
56+
51||| Recognise a sequence of at least one sub-lexers
57||| Recognise a sequence of at least one sub-lexers
52export
58export
53some : Lexer -> Lexer
59some : Lexer -> Lexer
@@ -59,7 +65,7 @@ export
59many : Lexer -> Recognise False
65many : Lexer -> Recognise False
60many l = some l <|> Empty
66many l = some l <|> Empty
61
67
62−||| Recognize the first matching lexer from a non-empty list.
68+||| Recognise the first matching lexer from a non-empty list.
63export
69export
64choice : (xs : List Lexer) -> {auto ok : NonEmpty xs} -> Lexer
70choice : (xs : List Lexer) -> {auto ok : NonEmpty xs} -> Lexer
65choice (x :: []) = x
71choice (x :: []) = x