X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=src%2Fparse.icl;h=f5cb0c855a7f411e2e18dd9c101dbf1c6f76b28d;hb=178532b9e5843308b2b076b4d8881f6971cd718c;hp=bc93239ce593a977e713e887dfef96072be1c53a;hpb=051a7614b88beaea2912dd9f76d04d9a90ec2f99;p=cc1516.git diff --git a/src/parse.icl b/src/parse.icl index bc93239..f5cb0c8 100644 --- a/src/parse.icl +++ b/src/parse.icl @@ -12,6 +12,7 @@ import Control.Applicative import Data.Func from Data.List import intercalate, replicate, instance Functor [] from Text import class Text(concat), instance Text String +import GenPrint import yard import lex @@ -172,8 +173,9 @@ trans2 t f = satTok t >>= \(_, r).pure (f r) trans1 :: TokenValue a -> Parser Token a trans1 t r = trans2 t $ const r +derive gPrint TokenValue satTok :: TokenValue -> Parser Token Token -satTok t = satisfy ((===) t) +satTok t = top >>= \tok=:(pos, tv) -> if (t === tok) (return tok) (fail (printToString t, pos)) parseSepList :: TokenValue (Parser Token a) -> Parser Token [a] parseSepList sep p =