aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/text/lexer.lux
diff options
context:
space:
mode:
authorEduardo Julian2017-04-06 20:19:34 -0400
committerEduardo Julian2017-04-06 20:19:34 -0400
commit6aa989b62f71179bdbad2d9d04110ee3d010c838 (patch)
tree8af0cc3a02754080e74e9448a88cbf0d8f228089 /stdlib/source/lux/data/text/lexer.lux
parent402919654d174235512851a9907c54c092df0b7f (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.lux32
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))