tests
[clean-tests.git] / parseclass / expr.icl
index 6d5dad5..e61c41b 100644 (file)
@@ -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']