76ページで、関数をパーサーとして定義します。item
これは、を取り、String
返す[(Char, String)]
か[]
、失敗した場合に返される関数です。
sat
78ページで、述語を取り、p
その周りにパーサー構造を「ラップ」する関数を定義します。
p :: (Char -> Bool) -> Parser Char
sat p = do x <- item
if p x then return x else failure
私が理解していないのはの魔法<-
ですか?の結果がitem
空でない場合、この演算子はリストをアンラップし、タプルから最初の項目をフェッチする必要があります。そうでない場合は、述語を詰まらせないものを生成する必要があります。私は何が欠けていますか?