「Haskell は極めて強固な型システムなので、コンパイルさえ通ればほとんどデバッグ不要」とかウソだろ。たかが Wiki 文法のパーザ作ってるだけで、デバッガと深い仲になってるぞ。とりあえず今書いてるのコードは以下のリンクより取得可能。
なんでこんなもんを作り始めたかというと、
それで上記のコードから出てくるエラーメッセージは "Main: Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string." というものなのだが、一体何が原因でそうなってるのか見当がつかん。しょうがねえからデバッガを起動しているのだが、 Haskell プログラマ Lv1 の俺がなんでデバッガを使ってるんだか。そもそも Haskell でのデバッガはどんな種類があって何がいいのかわかんないから、とりあえず ghci を使ってる。使い方は ghci 上で :? と打てばヘルプが出てくるので、それ見ながらやれば一通りの機能は使えるだろ。
ところで事前にコンパイルしたモジュールを ghci で読み込むと、デバッグ情報が埋め込まれていないのでブレークポイントが設定できないようだ。コンパイルオプションとかまだよくわからないので、そういう時はコンパイル時に生成されるファイルを全部消して、改めて ghci でロードするようにしてる。他にやり方がありそうな気もしないけど、ひとまずはいいや。
追記@30分ぐらい後:デバッガで追って行った結果、バグを特定。 56 行目あたりの以下のコードがバグの原因。
<|> do e <- eof
return $ Text ""
……改めて思う。何やってんだ俺は? なんかすげー意味不明な事やってる。とりあえずこの部分を削除したら動くようになったが、まだまだバグってる(リスト記法が腐ってる)。まあそっちは既にバグの原因を特定してる。
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。