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 ()
@@ -9,7 +9,6 @@ module Text.Parsing.StringParser.Expr
9
9
10
10
import Prelude
11
11
12
- import Data.Either
13
12
import Data.Foldable
14
13
import Data.List (List (..))
15
14
@@ -59,40 +58,40 @@ buildExprParser operators simpleExpr =
59
58
<|> return x
60
59
<?> " operator"
61
60
62
- splitOp :: forall a . Operator a -> SplitAccum a -> SplitAccum a
61
+ splitOp :: forall b . Operator b -> SplitAccum b -> SplitAccum b
63
62
splitOp (Infix op AssocNone ) accum = accum { nassoc = Cons op accum.nassoc }
64
63
splitOp (Infix op AssocLeft ) accum = accum { lassoc = Cons op accum.lassoc }
65
64
splitOp (Infix op AssocRight ) accum = accum { rassoc = Cons op accum.rassoc }
66
65
splitOp (Prefix op) accum = accum { prefix = Cons op accum.prefix }
67
66
splitOp (Postfix op) accum = accum { postfix = Cons op accum.postfix }
68
67
69
- 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
70
69
rassocP x rassocOp prefixP term postfixP = do
71
70
f <- rassocOp
72
71
y <- do
73
72
z <- termP prefixP term postfixP
74
73
rassocP1 z rassocOp prefixP term postfixP
75
74
return (f x y)
76
75
77
- 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
78
77
rassocP1 x rassocOp prefixP term postfixP = rassocP x rassocOp prefixP term postfixP <|> return x
79
78
80
- 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
81
80
lassocP x lassocOp prefixP term postfixP = do
82
81
f <- lassocOp
83
82
y <- termP prefixP term postfixP
84
83
lassocP1 (f x y) lassocOp prefixP term postfixP
85
84
86
- 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
87
86
lassocP1 x lassocOp prefixP term postfixP = lassocP x lassocOp prefixP term postfixP <|> return x
88
87
89
- 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
90
89
nassocP x nassocOp prefixP term postfixP = do
91
90
f <- nassocOp
92
91
y <- termP prefixP term postfixP
93
92
return (f x y)
94
93
95
- 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
96
95
termP prefixP term postfixP = do
97
96
pre <- prefixP
98
97
x <- term
0 commit comments