String, ByteString, FilePathとFilesystemモジュールあたりの話

1
山本和彦 @kazu_yamamoto

String で foo ['a','b',_] = ... とか書いていたのは、Text ではどうやるのが正しい? ByteString では length が使えるから安心。ひょっとして Text でも BS でも isPrefixOf を使う?

2012-06-13 14:02:04
山本和彦 @kazu_yamamoto

.@tanakh String vs ByteString vs Text は、これぐらいのことが分かればいいでしょうかね? http://t.co/gR0dV8Vp

2012-06-13 14:17:40
Hideyuki Tanaka @tanakh

@kazu_yamamoto うーん、あとは使い分けと、相互変換と、エンコーディングと、大体の速度感覚とかそういうのもですかねえ?あとその他のIsStringで割と使われている、Ascii、FilePathとかに対応できるように、そのあたり一般の話とか。

2012-06-13 14:20:17
山本和彦 @kazu_yamamoto

.@tanakh すごいHaskellで、Lazy Text を紹介している意図はなんですか? Lazy は、Builder の内部構造ぐらいの位置づけだと思うんですが。

2012-06-13 14:20:31
Hideyuki Tanaka @tanakh

@kazu_yamamoto Lazyはエラーを考えなければ楽なのです…。

2012-06-13 14:21:11
山本和彦 @kazu_yamamoto

.@tanakh getContents で済んじゃうから、説明が楽という意味ですか?

2012-06-13 14:26:08
Hideyuki Tanaka @tanakh

なんだかんだ言って、書き捨てのスクリプトではまだLazyほげほげをつかってしまう。Conduitでも大して面倒じゃないかもしれないけれども。

2012-06-13 14:29:57
山本和彦 @kazu_yamamoto

.@tanakh System.* には ByteString 版が付いてくるようになりましたが、ByteString 用の FilePath って、まだないんでしょうか?

2012-06-13 14:32:09
Hideyuki Tanaka @tanakh

@kazu_yamamoto あ、すいません。AsciiはByteStringの別名でした…。

2012-06-13 14:32:16
Hideyuki Tanaka @tanakh

@kazu_yamamoto ええとすいません。FilePathってのは、http://t.co/ePXvsyYP これのことです。パス区切りとかに環境依存のものを含んでしまうことを型で弾くために作られた別の型です

2012-06-13 14:33:47
山本和彦 @kazu_yamamoto

.@tanakh FilePath パッケージの件はおいておくとして、僕の質問に対する答えは持ってますか?

2012-06-13 14:37:38
Hideyuki Tanaka @tanakh

@kazu_yamamoto それはないんじゃないんでしょうか?

2012-06-13 14:38:01
山本和彦 @kazu_yamamoto

.@tanakh FilePath パッケージの FilePath は、最終的に何にどうやって変換するのが想定されているんでしょうか? あと、Builder とかを使わなくて、速度は大丈夫ですか?

2012-06-13 14:38:25
山本和彦 @kazu_yamamoto

.@tanakh 分かりました。では、libraries ML 辺りで、どうするつもりか聞いてみます。

2012-06-13 14:39:15
Hideyuki Tanaka @tanakh

@kazu_yamamoto パスは短いものしか想定していないのじゃないでしょうか?カレントパスとか、ホームとか、パス区切り文字やらを環境に合わせて展開したStringに最終的に変換していると思います。

2012-06-13 14:43:37
山本和彦 @kazu_yamamoto

.@tanakh ああ、Filesystem.Path.CurrentOS を import しろということでしたか。

2012-06-13 14:49:31
山本和彦 @kazu_yamamoto

速度を考えないのなら、Filesystem.Path.FilePath を encode して ByteString にし、System.*.ByteString へ渡すのがよさそう。

2012-06-13 14:51:50
山本和彦 @kazu_yamamoto

.@tanakh Filesystem.Path.CurrentOS を読み込まないと、encode する方法がないように見えますけど。

2012-06-13 14:57:10
Hideyuki Tanaka @tanakh

@kazu_yamamoto はい。しかし普通は自分ではencodeせずに、http://t.co/IROEgrGQ これ経由で使いますので。

2012-06-13 14:58:08
山本和彦 @kazu_yamamoto

.@tanakh ああ、直接使える API があるんですね!

2012-06-13 15:06:54
Hideyuki Tanaka @tanakh

@kazu_yamamoto はい。あとこれを使ってる http://t.co/wRamikuy これとか便利に使ってます。

2012-06-13 15:08:49
山本和彦 @kazu_yamamoto

system-fileio は、内部で String に変換している。おしい。GHC 7.4 以上では直接 ByteString にしてほしいところ。

2012-06-13 15:10:52
Hideyuki Tanaka @tanakh

ファイルパスがStringではイカン感じですかね?

2012-06-13 15:11:17