@@ -16,6 +16,7 @@ import Text.Parsing.Parser
16
16
import Text.Parsing.Parser.Combinators
17
17
import Text.Parsing.Parser.Expr
18
18
import Text.Parsing.Parser.String
19
+ import Text.Parsing.Parser.Token
19
20
20
21
parens :: forall m a . (Monad m ) => ParserT String m a -> ParserT String m a
21
22
parens = between (string " (" ) (string " )" )
@@ -58,6 +59,23 @@ manySatisfyTest = do
58
59
string " ?"
59
60
return r
60
61
62
+ data TestToken = A | B
63
+
64
+ instance showTestTokens :: Show TestToken where
65
+ show A = " A"
66
+ show B = " B"
67
+
68
+ instance testTokensEq :: Eq TestToken where
69
+ (==) A A = true
70
+ (==) B B = true
71
+ (==) _ _ = false
72
+ (/=) a b = not $ a == b
73
+
74
+ isA :: TestToken -> Boolean
75
+ isA A = true
76
+ isA _ = false
77
+
78
+
61
79
main = do
62
80
parseTest nested " (((a)))"
63
81
parseTest (many (string " a" )) " aaa"
@@ -72,3 +90,22 @@ main = do
72
90
parseTest opTest " a+b+c"
73
91
parseTest exprTest " 1*2+3/4-5"
74
92
parseTest manySatisfyTest " ab?"
93
+
94
+ print " should be A"
95
+ parseTest token [A , B ]
96
+ print " should be B"
97
+ parseTest token [B , A ]
98
+
99
+ print " should be A"
100
+ parseTest (when isA) [A , B ]
101
+ print " should fail"
102
+ parseTest (when isA) [B , B ]
103
+
104
+ print " should be A"
105
+ parseTest (match A ) [A ]
106
+ print " should be B"
107
+ parseTest (match B ) [B ]
108
+ print " should be A"
109
+ parseTest (match A ) [A , B ]
110
+ print " should fail"
111
+ parseTest (match B ) [A , B ]
0 commit comments