diff options
author | Camil Staps | 2017-07-17 21:48:37 +0000 |
---|---|---|
committer | Camil Staps | 2017-07-17 21:48:37 +0000 |
commit | 9f95fa78463d7e6b047485bdce28f1a970a45fd2 (patch) | |
tree | f0daf60bcfec390bf828178d2c75b486447ad708 /Sil/Parse/Parser.dcl |
Initial commit
Diffstat (limited to 'Sil/Parse/Parser.dcl')
-rw-r--r-- | Sil/Parse/Parser.dcl | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Sil/Parse/Parser.dcl b/Sil/Parse/Parser.dcl new file mode 100644 index 0000000..cdeaf49 --- /dev/null +++ b/Sil/Parse/Parser.dcl @@ -0,0 +1,33 @@ +definition module Sil.Parse.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 () |