11module Main where
22
3- import Prelude
43import Data.Array
54import Data.Either
65import Data.Maybe
6+
77import Control.Monad.Eff
88import Control.Monad.Identity
9+
910import Debug.Trace
11+
1012import Text.Parsing.Parser
1113import Text.Parsing.Parser.Combinators
1214import Text.Parsing.Parser.Expr
@@ -16,7 +18,7 @@ parens :: forall m a. (Monad m) => ParserT String m a -> ParserT String m a
1618parens = between (string " (" ) (string " )" )
1719
1820nested :: forall m . (Functor m , Monad m ) => ParserT String m Number
19- nested = fix $ \p -> (do
21+ nested = fix $ \p -> (do
2022 string " a"
2123 return 0 ) <|> ((+) 1 ) <$> parens p
2224
@@ -30,23 +32,23 @@ opTest = chainl char (do string "+"
3032 return (++)) " "
3133
3234digit :: Parser String Number
33- digit = (string " 0" >>= \_ -> return 0 )
34- <|> (string " 1" >>= \_ -> return 1 )
35- <|> (string " 2" >>= \_ -> return 2 )
36- <|> (string " 3" >>= \_ -> return 3 )
37- <|> (string " 4" >>= \_ -> return 4 )
38- <|> (string " 5" >>= \_ -> return 5 )
39- <|> (string " 6" >>= \_ -> return 6 )
40- <|> (string " 7" >>= \_ -> return 7 )
41- <|> (string " 8" >>= \_ -> return 8 )
42- <|> (string " 9" >>= \_ -> return 9 )
35+ digit = (string " 0" >>= \_ -> return 0 )
36+ <|> (string " 1" >>= \_ -> return 1 )
37+ <|> (string " 2" >>= \_ -> return 2 )
38+ <|> (string " 3" >>= \_ -> return 3 )
39+ <|> (string " 4" >>= \_ -> return 4 )
40+ <|> (string " 5" >>= \_ -> return 5 )
41+ <|> (string " 6" >>= \_ -> return 6 )
42+ <|> (string " 7" >>= \_ -> return 7 )
43+ <|> (string " 8" >>= \_ -> return 8 )
44+ <|> (string " 9" >>= \_ -> return 9 )
4345
4446exprTest :: Parser String Number
4547exprTest = buildExprParser [[Infix (string " /" >>= \_ -> return (/)) AssocRight ]
4648 ,[Infix (string " *" >>= \_ -> return (*)) AssocRight ]
4749 ,[Infix (string " -" >>= \_ -> return (-)) AssocRight ]
4850 ,[Infix (string " +" >>= \_ -> return (+)) AssocRight ]] digit
49-
51+
5052main = do
5153 parseTest nested " (((a)))"
5254 parseTest (many (string " a" )) " aaa"
@@ -57,6 +59,6 @@ main = do
5759 parseTest (do
5860 as <- string " a" `endBy1` string " ,"
5961 eof
60- return as) " a,a,a,"
62+ return as) " a,a,a,"
6163 parseTest opTest " a+b+c"
6264 parseTest exprTest " 1*2+3/4-5"
0 commit comments