File tree 2 files changed +37
-2
lines changed
chapter24/learning-parsers
2 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -18,4 +18,5 @@ executable learning-parsers
18
18
main-is : Main.hs
19
19
default-language : Haskell2010
20
20
build-depends : base >= 4.7 && < 5
21
- , trifecta
21
+ , trifecta
22
+ , parsers
Original file line number Diff line number Diff line change 1
1
module Main where
2
2
3
3
import Text.Trifecta
4
+ import Text.Parser.Combinators
4
5
5
6
stop :: Parser a
6
7
stop = unexpected " stop"
7
8
8
9
one :: Parser Char
9
10
one = char ' 1'
11
+ two = char ' 2'
12
+ three = char ' 3'
10
13
11
14
one' = one >> stop
12
15
@@ -19,6 +22,26 @@ testParse :: Parser Char -> IO ()
19
22
testParse p =
20
23
print $ parseString p mempty " 123"
21
24
25
+ testEOF :: Parser () -> IO ()
26
+ testEOF p =
27
+ print $ parseString p mempty " 123"
28
+
29
+ testString' :: Parser String -> IO ()
30
+ testString' p =
31
+ print $ parseString p mempty " 123"
32
+
33
+ oneString :: Parser String
34
+ oneString = string " 1"
35
+
36
+ oneTwoString :: Parser String
37
+ oneTwoString = string " 12"
38
+
39
+ oneTwoThreeString :: Parser String
40
+ oneTwoThreeString = string " 123"
41
+
42
+ -- oneTwoThreeString' :: Parser String
43
+ -- oneTwoThreeString' = string "123" <|> string "12" <|> string "1"
44
+
22
45
pNL s =
23
46
putStrLn (' \n ' : s)
24
47
@@ -34,4 +57,15 @@ main = do
34
57
testParse oneTwo
35
58
pNL " oneTwo':"
36
59
testParse oneTwo'
37
-
60
+ pNL " oneTwoStop:"
61
+ testEOF (oneTwo >> eof)
62
+ pNL " oneString"
63
+ testString' oneString
64
+ pNL " oneTwoString"
65
+ testString' oneTwoString
66
+ pNL " oneTwoThreeString"
67
+ testString' oneTwoThreeString
68
+ pNL " oneTwoThreeString'"
69
+ testString' $ choice [oneTwoThreeString, oneTwoString, oneString]
70
+ pNL " oneTwoThreeChar'"
71
+ testString' $ choice [one >> two >> three, one >> two, one]
You can’t perform that action at this time.
0 commit comments