X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=parseclass%2Fexpr.icl;h=e61c41b7e3b7bfb3e1b7e411961f4cc760b8c4a3;hb=0a29dac39a56a8a23dee0b3fcf74ad6cd96f38dd;hp=6d5dad529e4e7b2b92277dfd32417d64bae3dc80;hpb=90c1712ad176aff581b04e1e0915acda319226d2;p=clean-tests.git diff --git a/parseclass/expr.icl b/parseclass/expr.icl index 6d5dad5..e61c41b 100644 --- a/parseclass/expr.icl +++ b/parseclass/expr.icl @@ -54,10 +54,18 @@ instance eq (MaybeError String) where (==.) l r = (==) <$> l <*> r pToken c = pSatisfy ((==)c) -class parseExpr a :: Parser Char a -instance parseExpr a:: parseExpr -parseExpr :: Parser Char (v a) | expr, div v & parsable, ==, +, /, zero, toString a -parseExpr = foldr ($) parseBasic +class parseExpr v a | expr, div v +where + parseExpr :: Parser Char (v a) +instance parseExpr v Int | expr, div v where + parseExpr = parseE +instance parseExpr v Real | expr, div v where + parseExpr = parseE +//instance parseExpr (v Real) where +// parseExpr + +parseE :: Parser Char (v a) | expr, div v & parsable, ==, +, /, zero, toString a +parseE = foldr ($) parseBasic [ flip pChainl1 (pToken '+' $> (+.)) , flip pChainl1 (pToken '/' $> (/.)) ] @@ -66,6 +74,7 @@ where class parsable a :: Parser Char a instance parsable Int where parsable = foldl (\a b->10*a+digitToInt b) 0 <$> some pDigit +instance parsable Real where parsable = foldl (\a b->10*a+digitToInt b) 0 <$> some pDigit Start :: Either [Error] (Print Int) Start = parse parseExpr ['42+42']