|
1 | 1 | -- | This module defines helper functions for defining parsers using operator tables.
|
2 | 2 |
|
3 |
| -module Text.Parsing.StringParser.Expr |
| 3 | +module Text.Parsing.StringParser.Expr |
4 | 4 | ( Assoc(..)
|
5 | 5 | , Operator(..)
|
6 | 6 | , OperatorTable()
|
@@ -58,40 +58,40 @@ buildExprParser operators simpleExpr =
|
58 | 58 | <|> return x
|
59 | 59 | <?> "operator"
|
60 | 60 |
|
61 |
| - splitOp :: forall a. Operator a -> SplitAccum a -> SplitAccum a |
| 61 | + splitOp :: forall b. Operator b -> SplitAccum b -> SplitAccum b |
62 | 62 | splitOp (Infix op AssocNone) accum = accum { nassoc = Cons op accum.nassoc }
|
63 | 63 | splitOp (Infix op AssocLeft) accum = accum { lassoc = Cons op accum.lassoc }
|
64 | 64 | splitOp (Infix op AssocRight) accum = accum { rassoc = Cons op accum.rassoc }
|
65 | 65 | splitOp (Prefix op) accum = accum { prefix = Cons op accum.prefix }
|
66 | 66 | splitOp (Postfix op) accum = accum { postfix = Cons op accum.postfix }
|
67 | 67 |
|
68 |
| - rassocP :: forall a b c. a -> Parser (a -> a -> a) -> Parser (b -> c) -> Parser b -> Parser (c -> a) -> Parser a |
| 68 | + rassocP :: forall b c d. b -> Parser (b -> b -> b) -> Parser (c -> d) -> Parser c -> Parser (d -> b) -> Parser b |
69 | 69 | rassocP x rassocOp prefixP term postfixP = do
|
70 | 70 | f <- rassocOp
|
71 | 71 | y <- do
|
72 | 72 | z <- termP prefixP term postfixP
|
73 | 73 | rassocP1 z rassocOp prefixP term postfixP
|
74 | 74 | return (f x y)
|
75 | 75 |
|
76 |
| - rassocP1 :: forall a b c. a -> Parser (a -> a -> a) -> Parser (b -> c) -> Parser b -> Parser (c -> a) -> Parser a |
| 76 | + rassocP1 :: forall b c d. b -> Parser (b -> b -> b) -> Parser (c -> d) -> Parser c -> Parser (d -> b) -> Parser b |
77 | 77 | rassocP1 x rassocOp prefixP term postfixP = rassocP x rassocOp prefixP term postfixP <|> return x
|
78 | 78 |
|
79 |
| - lassocP :: forall a b c. a -> Parser (a -> a -> a) -> Parser (b -> c) -> Parser b -> Parser (c -> a) -> Parser a |
| 79 | + lassocP :: forall b c d. b -> Parser (b -> b -> b) -> Parser (c -> d) -> Parser c -> Parser (d -> b) -> Parser b |
80 | 80 | lassocP x lassocOp prefixP term postfixP = do
|
81 | 81 | f <- lassocOp
|
82 | 82 | y <- termP prefixP term postfixP
|
83 | 83 | lassocP1 (f x y) lassocOp prefixP term postfixP
|
84 | 84 |
|
85 |
| - lassocP1 :: forall a b c. a -> Parser (a -> a -> a) -> Parser (b -> c) -> Parser b -> Parser (c -> a) -> Parser a |
| 85 | + lassocP1 :: forall b c d. b -> Parser (b -> b -> b) -> Parser (c -> d) -> Parser c -> Parser (d -> b) -> Parser b |
86 | 86 | lassocP1 x lassocOp prefixP term postfixP = lassocP x lassocOp prefixP term postfixP <|> return x
|
87 | 87 |
|
88 |
| - nassocP :: forall a b c d e. a -> Parser (a -> d -> e) -> Parser (b -> c) -> Parser b -> Parser (c -> d) -> Parser e |
| 88 | + nassocP :: forall b c d. b -> Parser (b -> b -> b) -> Parser (c -> d) -> Parser c -> Parser (d -> b) -> Parser b |
89 | 89 | nassocP x nassocOp prefixP term postfixP = do
|
90 | 90 | f <- nassocOp
|
91 | 91 | y <- termP prefixP term postfixP
|
92 | 92 | return (f x y)
|
93 | 93 |
|
94 |
| - termP :: forall a b c. Parser (a -> b) -> Parser a -> Parser (b -> c) -> Parser c |
| 94 | + termP :: forall b c d. Parser (b -> c) -> Parser b -> Parser (c -> d) -> Parser d |
95 | 95 | termP prefixP term postfixP = do
|
96 | 96 | pre <- prefixP
|
97 | 97 | x <- term
|
|
0 commit comments