Hi,
What I'm trying to do is create a parser so as when I enter say 1+1 it will return Add(Val 1)(Val 1). A couple of questions do I have to state three basic parser. As in item, fail, synbol and then combine them with below. And by the way the one below seems to be all wrong.
parse :: String -> expr
parse expr = [(expr,string)]
expr :: Parser value
expr = do t <- term
do char '+'
e <- expr
return Add (Val t)(Val e)
+++ return t
(+++) :: Parser a -> Parser a -> Parser a
t +++ w inp = case t inp of
[] -> w inp
[(v,out)] -> [(v,out)]
This is what I mean by item fail and symbol
type Parser s a = [s] -> [(a,[s])]
item [] = []
item (c:cs) = [(c,cs)]
pFail :: Parser s a
pFail = \cs -> []
pSymbol :: Eq s => s -> Parser s s
pSymbol a (b:bs) |a == b = [(b,bs)]
|otherwise = []
I know this is a bit of a mess, but could someone explain where I should start and if I should use any of the code above. Also to point out I want to write the complete parser without using prelude and other built in functions as I will be changing as I go.
John