aboutsummaryrefslogtreecommitdiff
path: root/Sil/Util
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Util')
-rw-r--r--Sil/Util/Parser.dcl1
-rw-r--r--Sil/Util/Parser.icl5
2 files changed, 5 insertions, 1 deletions
diff --git a/Sil/Util/Parser.dcl b/Sil/Util/Parser.dcl
index 14dc022..e0046fa 100644
--- a/Sil/Util/Parser.dcl
+++ b/Sil/Util/Parser.dcl
@@ -47,6 +47,7 @@ satisfy :: (a -> Bool) -> Parser a a
check :: (a -> Bool) -> Parser a a
(until) infix 2 :: (Parser a b) (Parser a c) -> Parser a [b]
item :: a -> Parser a a | ==, name, toString a
+anyItem :: ([a] -> Parser a a) | ==, name, toString a
list :: [a] -> Parser a [a] | ==, name, toString a
seplist :: a (Parser a b) -> Parser a [b] | ==, name, toString a
seplistUntil :: a a (Parser a b) -> Parser a [b] | ==, name, toString a
diff --git a/Sil/Util/Parser.icl b/Sil/Util/Parser.icl
index e730313..154a989 100644
--- a/Sil/Util/Parser.icl
+++ b/Sil/Util/Parser.icl
@@ -1,6 +1,6 @@
implementation module Sil.Util.Parser
-from StdFunc import iter
+from StdFunc import iter, o
import StdList
import StdOverloaded
@@ -140,6 +140,9 @@ where
item :: a -> Parser a a | ==, name, toString a
item a = satisfy ((==) a) <#> name a
+anyItem :: ([a] -> Parser a a) | ==, name, toString a
+anyItem = foldr (<|>) empty o map item
+
list :: [a] -> Parser a [a] | ==, name, toString a
list as = mapM item as