diff options
Diffstat (limited to 'Sil/Util/Parser.dcl')
-rw-r--r-- | Sil/Util/Parser.dcl | 33 |
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 () |