aboutsummaryrefslogtreecommitdiff
path: root/Sil/Util/Parser.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'Sil/Util/Parser.dcl')
-rw-r--r--Sil/Util/Parser.dcl33
1 files changed, 33 insertions, 0 deletions
diff --git a/Sil/Util/Parser.dcl b/Sil/Util/Parser.dcl
new file mode 100644
index 0000000..361fa83
--- /dev/null
+++ b/Sil/Util/Parser.dcl
@@ -0,0 +1,33 @@
+definition module Sil.Util.Parser
+
+from StdOverloaded import class ==
+
+from Control.Applicative import class Applicative, class Alternative
+from Control.Monad import class Monad
+from Data.Error import :: MaybeError
+from Data.Functor import class Functor
+
+from Sil.Parse import :: ParseError
+
+:: Parser a b = Parser ([a] -> (MaybeError ParseError b, [a]))
+
+instance Functor (Parser a)
+instance Applicative (Parser a)
+instance Monad (Parser a)
+instance Alternative (Parser a)
+
+class name a :: a -> String
+instance name String
+
+runParser :: (Parser a b) [a] -> (MaybeError ParseError b, [a])
+(<?>) :: (Parser a b) ParseError -> Parser a b
+fail :: Parser a b
+top :: Parser a a
+peek :: Parser a a
+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 a
+list :: [a] -> Parser a [a] | ==, name a
+seplist :: a (Parser a b) -> Parser a [b] | ==, name a
+eof :: Parser a ()