Skip to content

Commit fc2467f

Browse files
committed
chapter 24 - added alt parsing example
1 parent 231d824 commit fc2467f

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

chapter24/learning-parsers/learning-parsers.cabal

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ executable learning-parsers
1919
default-language: Haskell2010
2020
build-depends: base >= 4.7 && < 5
2121
, trifecta
22-
, parsers
22+
, parsers
23+
, raw-strings-qq
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{-# LANGUAGE QuasiQuotes #-}
2+
module AltParsing where
3+
4+
import Control.Applicative
5+
import Text.RawString.QQ
6+
import Text.Trifecta
7+
8+
type NumberOrString =
9+
Either Integer String
10+
11+
eitherOr = [r|
12+
123
13+
def
14+
456
15+
ghi
16+
|]
17+
18+
parseNos :: Parser NumberOrString
19+
parseNos =
20+
skipMany (oneOf "\n")
21+
>>
22+
(Left <$> integer)
23+
<|> (Right <$> some letter)
24+
25+
main = do
26+
print $ parseString parseNos mempty eitherOr
27+
print $ parseString (some (token parseNos)) mempty eitherOr

0 commit comments

Comments
 (0)