OCaml で Parsec っぽく

OCaml で Parsec っぽいことをやろうとしていましたが、中途半端な状態で終わってしまいました。State モナドっぽいやつを作って、bind とか return も定義して、いくつかの基本的なパーサコンビネータと選択演算子はできたんですが、パースを失敗したときにエラーが外まで出てこないことがあるという問題に遭遇したりいろいろあったりして挫折。そのうちまたやってみることにしよう。というか、まずは Parsec のソースをしっかり読むことが必要だなぁ。