diff options
author | Eduardo Julian | 2017-04-06 20:19:34 -0400 |
---|---|---|
committer | Eduardo Julian | 2017-04-06 20:19:34 -0400 |
commit | 6aa989b62f71179bdbad2d9d04110ee3d010c838 (patch) | |
tree | 8af0cc3a02754080e74e9448a88cbf0d8f228089 /stdlib/source/lux/data/text/lexer.lux | |
parent | 402919654d174235512851a9907c54c092df0b7f (diff) |
- Renamed lux/data/text;replace to replace-all.
- Did some refactorings for lexers.
Diffstat (limited to 'stdlib/source/lux/data/text/lexer.lux')
-rw-r--r-- | stdlib/source/lux/data/text/lexer.lux | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/stdlib/source/lux/data/text/lexer.lux b/stdlib/source/lux/data/text/lexer.lux index e28cb0a68..5fcbe8e6e 100644 --- a/stdlib/source/lux/data/text/lexer.lux +++ b/stdlib/source/lux/data/text/lexer.lux @@ -398,6 +398,16 @@ (Lexer Char) (satisfies char;space?)) +(def: #export (constrain test lexer) + (All [a] (-> (-> a Bool) (Lexer a) (Lexer a))) + (do Monad<Lexer> + [input get-input + output lexer + _ (assert (Text/append "Input fails the constraint: " + (:: text;Codec<Text,Text> encode input)) + (test output))] + (wrap output))) + (do-template [<name> <base> <doc>] [(def: #export (<name> p) {#;doc <doc>} @@ -436,17 +446,17 @@ (lambda [input] (#E;Success [input (text;empty? input)]))) -(def: #export (_& left right) - (All [a b] (-> (Lexer a) (Lexer b) (Lexer b))) +(def: #export (after param subject) + (All [p s] (-> (Lexer p) (Lexer s) (Lexer s))) (do Monad<Lexer> - [_ left] - right)) + [_ param] + subject)) -(def: #export (&_ left right) - (All [a b] (-> (Lexer a) (Lexer b) (Lexer a))) +(def: #export (before param subject) + (All [p s] (-> (Lexer p) (Lexer s) (Lexer s))) (do Monad<Lexer> - [output left - _ right] + [output subject + _ param] (wrap output))) (def: #export (default value lexer) @@ -478,9 +488,9 @@ (def: #export (enclosed [start end] lexer) (All [a] (-> [Text Text] (Lexer a) (Lexer a))) - (_& (text start) - (&_ lexer - (text end)))) + (|> lexer + (before (text end)) + (after (text start)))) (def: #export (rec lexer) (All [a] (-> (-> (Lexer a) (Lexer a)) |