Diary?

2009-06-28
Sun

(20:28)

「Haskell は極めて強固な型システムなので、コンパイルさえ通ればほとんどデバッグ不要」とかウソだろ。たかが Wiki 文法のパーザ作ってるだけで、デバッガと深い仲になってるぞ。とりあえず今書いてるのコードは以下のリンクより取得可能。

なんでこんなもんを作り始めたかというと、

  1. 日記のなんちゃって Wiki 記法と bitbucket の Wiki の文法が違うのはあれだなあ ←ここはわかってもらえると思う
  2. 日記の文法を Creole に作り直そうかなあ。だって一応、 Wiki 文法の標準を目指してるみたいだし ←ここもわかってもらえると思う
  3. ってか日記システム自体を作り直そうかなあ ←危険信号
  4. よーし、せっかくだから Haskell で頑張っちゃうぞ ←死亡フラグへ一歩前進
  5. まずは Creole のパーザからだ! ←死亡フラグが完全にたった
  6. やべえ、 Parsec のエラーメッセージが理解不能だ ←今ここ

それで上記のコードから出てくるエラーメッセージは "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 ""

……改めて思う。何やってんだ俺は? なんかすげー意味不明な事やってる。とりあえずこの部分を削除したら動くようになったが、まだまだバグってる(リスト記法が腐ってる)。まあそっちは既にバグの原因を特定してる。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。