X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=src%2Fyard.icl;h=81e58837495df4a2fa86e9f7c817835b8cda89fa;hb=7c16c9353b324301ee8c028e39c33aa2a46895f8;hp=b5e3c61f885002285eab6d8c6fc38aa6bd189385;hpb=43d45105726b3ad3e5cc5165f8c9b066ec8d2790;p=cc1516.git diff --git a/src/yard.icl b/src/yard.icl index b5e3c61..81e5883 100644 --- a/src/yard.icl +++ b/src/yard.icl @@ -60,9 +60,17 @@ top = Parser \i -> case i of [] = (Left ParseError, []) [x:xs] = (Right x, xs) +peek :: Parser a a +peek = Parser \i -> case i of + [] = (Left ParseError, []) + [x:xs] = (Right x, [x:xs]) + satisfy :: (a -> Bool) -> Parser a a satisfy f = top >>= \r -> if (f r) (return r) fail +check :: (a -> Bool) -> Parser a a +check f = peek >>= \r -> if (f r) (return r) fail + item :: a -> Parser a a | Eq a item a = satisfy ((==)a)