aboutsummaryrefslogtreecommitdiff
path: root/Sil/Util/Parser.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Util/Parser.icl')
-rw-r--r--Sil/Util/Parser.icl19
1 files changed, 9 insertions, 10 deletions
diff --git a/Sil/Util/Parser.icl b/Sil/Util/Parser.icl
index 95b0813..3f32882 100644
--- a/Sil/Util/Parser.icl
+++ b/Sil/Util/Parser.icl
@@ -10,7 +10,6 @@ import Data.Error
from Data.Func import $
import Data.Functor
import Data.List
-import Data.Maybe
import Sil.Error
@@ -33,10 +32,10 @@ makeParseState i =
, ps_commits = []
}
-nextToken :: (ParseState a) -> (Maybe a, ParseState a)
-nextToken ps=:{ps_input=[]} = (Nothing, ps)
+nextToken :: (ParseState a) -> (?a, ParseState a)
+nextToken ps=:{ps_input=[]} = (?None, ps)
nextToken ps=:{ps_input=[i:is]} = case i of
- PI_Token t -> (Just t, {advance & ps_pos=ps.ps_pos + 1})
+ PI_Token t -> (?Just t, {advance & ps_pos=ps.ps_pos + 1})
PI_NewLine -> nextToken {advance & ps_line=ps.ps_line + 1}
where
advance = {ps & ps_read=[i:ps.ps_read], ps_input=is}
@@ -114,13 +113,13 @@ fail = empty
top :: Parser a a
top = Parser \st -> case nextToken st of
- (Nothing, st) -> (Error $ UnknownError "top in Parser failed", st)
- (Just x, st) -> (Ok x, st)
+ (?None, st) -> (Error $ UnknownError "top in Parser failed", st)
+ (?Just x, st) -> (Ok x, st)
peek :: Parser a a
peek = Parser \st -> case nextToken st of
- (Nothing, st) -> (Error $ UnknownError "peek in Parser failed", st)
- (Just x, st) -> (Ok x, tokenBack st)
+ (?None, st) -> (Error $ UnknownError "peek in Parser failed", st)
+ (?Just x, st) -> (Ok x, tokenBack st)
satisfy :: (a -> Bool) -> Parser a a
satisfy f = top >>= \r -> if (f r) (pure r) fail
@@ -170,5 +169,5 @@ where
eof :: Parser a () | toString a
eof = Parser \st=:{ps_line,ps_pos} -> case nextToken st of
- (Nothing, st) -> (Ok (), st)
- (Just t, st) -> (Error $ P_Expected (errpos {pp_line=ps_line,pp_token=ps_pos}) "eof" t, st)
+ (?None, st) -> (Ok (), st)
+ (?Just t, st) -> (Error $ P_Expected (errpos {pp_line=ps_line,pp_token=ps_pos}) "eof" t, st)