Parsecにちょっと触ってみる(7): 連接と選択

do 記法を使えば連続してマッチするパーサを作ることが出来ます(連接)。

> :m Text.ParserCombinators.Parsec
>  parseTest (char 'a') "abc"               -- > 'a'
>  parseTest (do{char 'a';char 'b'}) "abc"  -- > 'b'
>  parseTest (do{a<-char 'a';b<-char 'b';return [a,b]}) "abc" -- > "ab"

>  parseTest (do{a<-char 'a';b<-char 'b';s<-string "hello";return ([a,b]++s)}) "abhello"
-- > "abhello"

<|> 演算子を使うとどちらかにマッチする(選択)パーサを作ることが出来ます。

>  parseTest (string "abc"<|> string "hello") "hello" -- > "hello"

>  parseTest (string "abc"<|> string "hello") "abc"   -- > "abc"

>  parseTest (do{str <- string "abc"<|> string "hello";return str}) "abc"
-- > "abc"