peek en check Parsers toegevoegd
[cc1516.git] / src / yard.icl
index bded7fb..81e5883 100644 (file)
@@ -24,7 +24,7 @@ runParser (Parser f) i = f i
 instance + Error where
     (+) ParseError r = r 
     (+) r ParseError = r
-    (+) _ r          = r
+    (+) r _          = r
  
 instance Functor (Parser a) where
     fmap f m = liftM f m
@@ -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)