Parsec3!」と思い立ちました。試してみることにします。プログラマは型宣言を省略するのが通常になってます」と書いてあったりして、パーサーの型シグネチャをはしょって生きてきました。その感覚でこのコードをコンパイルしたところ、こんなクレームが。Char)ってなんだろう。なる言語拡張を導入すれば解決するらしい(参照)。いう行を追加すると、確かにコンパイルに通ります。さんからヒントをもらいました(ありがとうございます)。型定義が与えられていない関数の型を推論する際に、多相的な型が想定できる場合でもデフォルトの型(Integerなど)に決めうちする、という規則らしいです。いうことらしいhttp://twitter.com/#!/bonotake/status/108445024378818562つまり型推論のときの付加的なルールとして単相性制限というのがあり、それを無効にするためのオプションがこのおまじないみたい。インスタンスがないというエラーの関係はさっぱりわかりません。単相性制限のことはいったん忘れて、パーサーの型を明示することに挑戦します。型を教えてもらいます。教えてくれた型を明示してコンパイルしなおしてみます。[Char]制約に型変数じゃないものがあるとな。回避したければやっぱりおまじないを唱えろと。何ものかを調べてきっちりナシを通すことにします。ドキュメントを眺めます。すると次のことがわかりました。これはモナド変換子である。抽象化された入力の型。この抽象化された入力をストリームという。パース時に好きな状態を格納しておく容器の型。モナド変換子にとって基盤となるモナド。いうストリームを用立てるための型クラスがあって、そのインスタンスを作ることでパーサーへの入力の型が決まるようです。くるんだものをさらに基盤となるモナドでくるむので、そのモナドも与えます)。