diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/data/text/lexer.lux | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/stdlib/source/lux/data/text/lexer.lux b/stdlib/source/lux/data/text/lexer.lux index 9ecbb99c7..b5b0434e4 100644 --- a/stdlib/source/lux/data/text/lexer.lux +++ b/stdlib/source/lux/data/text/lexer.lux @@ -8,12 +8,13 @@ ["." product] ["." maybe] ["." error (#+ Error)] - [number ("nat/." Codec<Text,Nat>)] + [number + [nat ("nat/." decimal)]] [collection - ["." list ("list/." Fold<List>)]]] + ["." list ("list/." fold)]]] [macro ["." code]]] - ["." // ("text/." Monoid<Text>)]) + ["." // ("text/." monoid)]) (type: #export Offset Nat) @@ -55,7 +56,7 @@ (def: (with-slices lexer) (-> (Lexer (List Slice)) (Lexer Slice)) - (do p.Monad<Parser> + (do p.monad [offset ..offset slices lexer] (wrap (list/fold (function (_ [slice::basis slice::distance] @@ -160,7 +161,7 @@ (def: #export (range bottom top) {#.doc "Only lex characters within a range."} (-> Nat Nat (Lexer Text)) - (do p.Monad<Parser> + (do p.monad [char any #let [char' (maybe.assume (//.nth 0 char))] _ (p.assert ($_ text/compose "Character is not within range: " (//.from-code bottom) "-" (//.from-code top)) @@ -262,14 +263,14 @@ (def: #export (and left right) (-> (Lexer Text) (Lexer Text) (Lexer Text)) - (do p.Monad<Parser> + (do p.monad [=left left =right right] (wrap ($_ text/compose =left =right)))) (def: #export (and! left right) (-> (Lexer Slice) (Lexer Slice) (Lexer Slice)) - (do p.Monad<Parser> + (do p.monad [[left::basis left::distance] left [right::basis right::distance] right] (wrap [left::basis ("lux i64 +" left::distance right::distance)]))) @@ -278,7 +279,7 @@ [(def: #export (<name> lexer) {#.doc (code.text ($_ text/compose "Lex " <doc-modifier> " characters as a single continuous text."))} (-> (Lexer Text) (Lexer Text)) - (|> lexer <base> (:: p.Monad<Parser> map //.concat)))] + (|> lexer <base> (:: p.monad map //.concat)))] [some p.some "some"] [many p.many "many"] @@ -298,7 +299,7 @@ [(def: #export (<name> amount lexer) {#.doc (code.text ($_ text/compose "Lex " <doc-modifier> " N characters."))} (-> Nat (Lexer Text) (Lexer Text)) - (|> lexer (<base> amount) (:: p.Monad<Parser> map //.concat)))] + (|> lexer (<base> amount) (:: p.monad map //.concat)))] [exactly p.exactly "exactly"] [at-most p.at-most "at most"] @@ -319,7 +320,7 @@ (def: #export (between from to lexer) {#.doc "Lex between N and M characters."} (-> Nat Nat (Lexer Text) (Lexer Text)) - (|> lexer (p.between from to) (:: p.Monad<Parser> map //.concat))) + (|> lexer (p.between from to) (:: p.monad map //.concat))) (def: #export (between! from to lexer) {#.doc "Lex between N and M characters."} @@ -345,7 +346,7 @@ (def: #export (slice lexer) (-> (Lexer Slice) (Lexer Text)) - (do p.Monad<Parser> + (do p.monad [[basis distance] lexer] (function (_ (^@ input [offset tape])) (case (//.clip basis ("lux i64 +" basis distance) tape) |