@@ -12,13 +12,13 @@ import Text.Parsing.Parser.Combinators
12
12
import Text.Parsing.Parser.Expr
13
13
import Text.Parsing.Parser.String
14
14
15
- parens :: forall m a . (Monad m ) => ({} -> ParserT String m a ) -> ParserT String m a
15
+ parens :: forall m a . (Monad m ) => ParserT String m a -> ParserT String m a
16
16
parens = between (string " (" ) (string " )" )
17
17
18
- nested :: forall m . (Monad m ) => {} -> ParserT String m Number
19
- nested _ = (do
18
+ nested :: forall m . (Monad m ) => ParserT String m Number
19
+ nested = fix $ \ p -> (do
20
20
string " a"
21
- return 0 ) <|> ((+) 1 ) <$> parens nested
21
+ return 0 ) <|> ((+) 1 ) <$> parens p
22
22
23
23
parseTest :: forall s a eff . (Show a ) => Parser s a -> s -> Eff (trace :: Trace | eff ) {}
24
24
parseTest p input = case runParser input p of
@@ -46,11 +46,11 @@ exprTest = buildExprParser [[Infix (string "/" >>= \_ -> return (/)) AssocRight]
46
46
,[Infix (string " *" >>= \ _ -> return (*) ) AssocRight ]
47
47
,[Infix (string " -" >>= \ _ -> return (-) ) AssocRight ]
48
48
,[Infix (string " +" >>= \ _ -> return (+) ) AssocRight ]] digit
49
-
49
+
50
50
main = do
51
- parseTest ( nested {}) " (((a)))"
51
+ parseTest nested " (((a)))"
52
52
parseTest (many (string " a" )) " aaa"
53
- parseTest (parens (const $ do
53
+ parseTest (parens (do
54
54
string " a"
55
55
optionMaybe $ string " b" )) " (ab)"
56
56
parseTest (string " a" `sepBy1` string " ," ) " a,a,a"
0 commit comments