item の型は Parser Char なので、<- で Parser を引きはがすと、文字が返ります。
(x,y) は (Char,Char) であり、return することによって Parser (Char, Char) となります。
これが、パーサー p の型です。

Parser は、状態モナドの一種として実現されています。状態モナドでは、裏でこっそり状態が渡されて行きます。Parser で渡される状態は、入力(パースの対象であるデータ)です。

なぜ、状態をこっそり渡せるのか理解するためには、Parser の >>= の実装を理解する必要があります。以下をみると、少しは分かるかもしれません。

http://d.hatena.ne.jp/kazu-yamamoto/20080604/1212573964

返信