@@ -16,6 +16,7 @@ import Text.Parsing.Parser
1616import Text.Parsing.Parser.Combinators
1717import Text.Parsing.Parser.Expr
1818import Text.Parsing.Parser.String
19+ import Text.Parsing.Parser.Token
1920
2021parens :: forall m a . (Monad m ) => ParserT String m a -> ParserT String m a
2122parens = between (string " (" ) (string " )" )
@@ -58,6 +59,23 @@ manySatisfyTest = do
5859 string " ?"
5960 return r
6061
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+
6179main = do
6280 parseTest nested " (((a)))"
6381 parseTest (many (string " a" )) " aaa"
@@ -72,3 +90,22 @@ main = do
7290 parseTest opTest " a+b+c"
7391 parseTest exprTest " 1*2+3/4-5"
7492 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