@@ -12,13 +12,13 @@ import Text.Parsing.Parser.Combinators
1212import Text.Parsing.Parser.Expr
1313import Text.Parsing.Parser.String
1414
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
1616parens = between (string " (" ) (string " )" )
1717
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
2020 string " a"
21- return 0 ) <|> ((+) 1 ) <$> parens nested
21+ return 0 ) <|> ((+) 1 ) <$> parens p
2222
2323parseTest :: forall s a eff . (Show a ) => Parser s a -> s -> Eff (trace :: Trace | eff ) {}
2424parseTest p input = case runParser input p of
@@ -46,11 +46,11 @@ exprTest = buildExprParser [[Infix (string "/" >>= \_ -> return (/)) AssocRight]
4646 ,[Infix (string " *" >>= \ _ -> return (*) ) AssocRight ]
4747 ,[Infix (string " -" >>= \ _ -> return (-) ) AssocRight ]
4848 ,[Infix (string " +" >>= \ _ -> return (+) ) AssocRight ]] digit
49-
49+
5050main = do
51- parseTest ( nested {}) " (((a)))"
51+ parseTest nested " (((a)))"
5252 parseTest (many (string " a" )) " aaa"
53- parseTest (parens (const $ do
53+ parseTest (parens (do
5454 string " a"
5555 optionMaybe $ string " b" )) " (ab)"
5656 parseTest (string " a" `sepBy1` string " ," ) " a,a,a"
0 commit comments