モナドの章!(教科書にはまだ「モナド」という言葉は出てこないのだけど)
本章のパーサーは、文字列を受け取って、パース結果と残りの文字列の組をリストとして返す。 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
文に少し似ているけど、パターンマッチを使える構文とのこと。