diff options
Diffstat (limited to 'Sil/Util/Parser.icl')
-rw-r--r-- | Sil/Util/Parser.icl | 19 |
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) |