Skip to content

Commit 8a7d384

Browse files
committed
chatper 24 - completed the learning parsers exercises
1 parent 1c659a0 commit 8a7d384

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

chapter24/learning-parsers/learning-parsers.cabal

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ executable learning-parsers
1818
main-is: Main.hs
1919
default-language: Haskell2010
2020
build-depends: base >= 4.7 && < 5
21-
, trifecta
21+
, trifecta
22+
, parsers

chapter24/learning-parsers/src/Main.hs

+35-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
module Main where
22

33
import Text.Trifecta
4+
import Text.Parser.Combinators
45

56
stop :: Parser a
67
stop = unexpected "stop"
78

89
one :: Parser Char
910
one = char '1'
11+
two = char '2'
12+
three = char '3'
1013

1114
one' = one >> stop
1215

@@ -19,6 +22,26 @@ testParse :: Parser Char -> IO ()
1922
testParse p =
2023
print $ parseString p mempty "123"
2124

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+
2245
pNL s =
2346
putStrLn ('\n' : s)
2447

@@ -34,4 +57,15 @@ main = do
3457
testParse oneTwo
3558
pNL "oneTwo':"
3659
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]

0 commit comments

Comments
 (0)