第8章 関数型パーサー #1

モナドの章!(教科書にはまだ「モナド」という言葉は出てこないのだけど)

本章のパーサーは、文字列を受け取って、パース結果と残りの文字列の組をリストとして返す。 Maybeの代わりにリストで成功・失敗を表現するところが興味深い。まあリストもモナドなんだけどね。

type Parser a = String -> [(a, String)]

なんか、脚注には「この章のプログラムは動かない。」と書いてある…… まあ、気にせず進めよう。

基本的なパーサー

しれっとreturnが出てきたw気づかないふりをしよう。

type Parser a = String -> [(a, String)]

return' :: a -> Parser a
return' v = \inp -> [(v, inp)]

failure :: Parser a
failure = \inp -> []

item :: Parser Char
item = \inp -> case inp of
                 [] -> []
                 (x : xs) -> [(x, xs)]

parse :: Parser a -> String -> [(a, String)]
parse p inp = p inp

case文はif文に少し似ているけど、パターンマッチを使える構文とのこと。