Parsec のこころ

Parsec の使い方とか使いどころとか。
1
専門性・売上・原稿 @golden_lucky

parsecでもByteStringを読むことはできるけれど、Parser ByteStringみたいなのが欲しかったらattoparsecを使うしかない、という理解でいいのかな。

2013-11-07 12:06:56
山本和彦 @kazu_yamamoto

.@golden_lucky 効率を気にしないなら、Parsec の内部で String を pack して ByteString を返せばいいだけです。

2013-11-07 12:10:37
専門性・売上・原稿 @golden_lucky

@kazu_yamamoto ありがとうございます。テキストでないデータをパースしたい場合、bytestring+attoparsecなんでしょうか?

2013-11-07 14:30:51
山本和彦 @kazu_yamamoto

.@golden_lucky Parsec は、入力として String、ByteString、Text が取れます。 http://t.co/LGs1xodnLZ

2013-11-07 14:50:07
山本和彦 @kazu_yamamoto

.@golden_lucky 基本的に上位の型が Parsec ByteString になるのはおかしいです。自分で定義したデータ型になるはずです。

2013-11-07 14:51:17
山本和彦 @kazu_yamamoto

.@golden_lucky 自分が定義した型に対して、ByteString から変換するのがパーサー。ByteString へ変換するのがプリティプリンタ(ビルダー)です。

2013-11-07 14:52:22
山本和彦 @kazu_yamamoto

.@golden_lucky ビルダーには BlazeBuilder がよく使われています。最新の ByteString には、自前の Builder も提供されています。

2013-11-07 14:53:14
山本和彦 @kazu_yamamoto

型が豊かでない言語を使うと整数や文字列を乱用してしまいがちです。型が豊かな言語では、まず自分の理想の型を定義することからプログラミングを始めましょう。

2013-11-07 14:55:42
専門性・売上・原稿 @golden_lucky

@kazu_yamamoto なるほど!あらためて考えると、Parser ByteStringが必要だと思ったのが勘違いでした。Attoparsecは効率を気にする場合にだけ手を出せばいいんですね。

2013-11-07 16:10:14
専門性・売上・原稿 @golden_lucky

どのみち入力はバイト単位で消費するしかないし、それをどういう単位でまとめるかは別の話だった

2013-11-07 16:14:04
山本和彦 @kazu_yamamoto

.@golden_lucky Parsec はエラー処理が充実しているが遅い、attoparsec は速いがエラー処理は充実していない。サーバーでのパース処理に組み込むなら attoparsec ですが、一回しかパースしない設定ファイルの処理には Parsec を使います。

2013-11-07 16:14:53