ScalazとHaskellの比較記事というか疑問点をいっぱい書いたら、shelarcyさんにいっぱい教えてもらったよ!

ありがとうございます!
13
Kenji Yoshida @xuwei_k

かいた http://t.co/X7ewxjzJ Scalaz 6.0.4 と Haskell (GHC7.4.1) を比べてみる

2012-02-05 03:24:41
Kenji Yoshida @xuwei_k

一度公開したあともどんどん書き足したら、結構な量になったでござる(´・ω・`) http://t.co/X7ewxjzJ っていうかHaskellとあまり比較してないし関係なくなってきている・・・

2012-02-05 04:50:38
Kenji Yoshida @xuwei_k

コメントがっ「述語を量化できる論理体系では、同一性という概念をプリミティブに持たなくても 「XとYが等しいとは、全ての述語Pに対してP(X)ならばP(Y)、が成り立つこと」 という形で定義できる」 http://t.co/vKvJT0My 難しいがちょっとだけ理解が深まったような

2012-02-05 13:42:00
Kenji Yoshida @xuwei_k

Leibniz Equality でググったら Coq がたくさんでてくる・・・

2012-02-05 13:45:25
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k Bifunctor は Data.Traversable モジュールの元ネタの "The essence of the Iterator patter" という論文に出てきます。 http://t.co/JoH3f5Cg

2012-02-05 15:01:19
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k GHC 本体や Haskell Platform には付属してきませんが、HackageDB には Bifunctor を提供するパッケージがあります。 http://t.co/pulq6JNo

2012-02-05 15:03:00
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k Pointed,Apply,Bind のように細かくクラス分けしたり、Comonad クラスがあったりするのは、Typeclassopedia の影響でしょうね。 http://t.co/4JbluH5G http://t.co/4RNHd2fj

2012-02-05 15:03:45
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k FingerTree に関しては、FingerTree を使ったキューの実装が Data.Sequence モジュールにあります。 http://t.co/Tu2lUWLM http://t.co/Pm1Qth0g

2012-02-05 15:05:26
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k FingerTree はキューを実装するのには良いのですが、優先順位付きキューの実装にはあまり適していない(性能的に別のデータ構造の方が良い)ので、Haskell では割り切って内部実装にしている感じですね。 http://t.co/bDVLDrGt

2012-02-05 15:06:41
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k あっ、あまり適していないという言い方には語弊がありますか……まあ、優先順位付きキューの実装にはもっと適したデータ構造があるということです。

2012-02-05 15:09:41
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k .。oO(余談ですが、オリジナルの論文に近い fingertree というパッケージが HackageDB で公開されています。 http://t.co/IWgQYDNo )

2012-02-05 15:09:59
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k まとめると、Scalaz の作者の方が原理・原典主義的で、Haskell では歴史的理由や実用的な理由からきれいな構造にはなってはいなかったり、原典とは変えてしまっているものも、なるべく本来あるべき(だと考える)姿にしようとしている感じだと思います。

2012-02-05 15:11:28
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k Lens はこれですね。 http://t.co/0v18hEZy 依存パッケージの方で Comonad とか Cokleisli とか色々出てきます。まあ、どちらも Haskell コミュニティではまだあまり使われていないものですね。

2012-02-05 15:20:31
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k Identitiy は、Haskell Platform に付属の mtl で提供されている恒等モナドじゃないでしょうjか? http://t.co/UmjdDMiN http://t.co/Tx4H9ko6 http://t.co/vHJgDCa5

2012-02-05 15:33:46
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k 現在の GHC には付属してこなくて Haskell Platform で提供されているパッケージなので、GHC 単体と比較しようとしたせいで見逃してしまったのだと思いますが。 http://t.co/8yBgWSoB http://t.co/tEZ4n1bE

2012-02-05 15:37:58
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k "Liskov substitutability" と書いているように、Liskov はオブジェクト指向固有のものですね。Haskell に対応するものが見つからなくて当然です。 http://t.co/KYJQ3r0Y http://t.co/YOrTei5u

2012-02-05 15:43:49
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k あっ、Apply,Bind っていう分割はこっちにありますね……。 http://t.co/bmGI8lAR Typeclassopedia だけではなく Edward Kmett から多くの影響を受けたみたいですね。 http://t.co/oN4V7Buc

2012-02-05 16:12:42
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k OptionT や ListT はモナド変換子ですね。 http://t.co/qO5z7uPy http://t.co/fFnp6sjC OptionW や ListW は……Comonad 関係かしら?

2012-02-05 16:15:40
ねこはる @halcat0x15a

@shelarcy @xuwei_k OptionWやListWは、OptionやListをWrapして機能を追加するものなので、Scalaz固有のものだと思います。

2012-02-05 16:21:47
shelarcy(しぇらーしぃ) @shelarcy

@xuwei_k Tree は Data.Tree モジュールの Tree 型相当ですね。Haskell と比較になるように一応。 http://t.co/tW3wQSa1

2012-02-05 16:22:17
shelarcy(しぇらーしぃ) @shelarcy

@halcat0x15a @xuwei_k なるほど、そうでしたか。Comonad ではモナドの m(M) の代わりに w(W) を使ったりするので、「Comonad かしら? それにしては対応関係がおかしいけれど……」と悩んでました。ありがとうございます。

2012-02-05 16:25:03
ねこはる @halcat0x15a

Leibnizって制限を強くした=:=的なものなのか。

2012-02-05 16:27:32
ねこはる @halcat0x15a

Liskovは<:<に対応するのか。 ふむふむ。

2012-02-05 16:29:25
ねこはる @halcat0x15a

LensというかStateモナド自体Scalaで使うことがなさそう。

2012-02-05 16:32:10
Kenji Yoshida @xuwei_k

「Haskellの知識無くてライブラリ自体の探し方になれてないから、とりあえずGHCのソースみて似たような名前のもの探してみよう!」 ってやり方だけではちゃんとした比較にならないですね、当たり前ですが(´・ω・`)しかし、あんなレベルでも書くことによって色々教えてもらえてよかった

2012-02-05 16:54:55