かいた http://t.co/X7ewxjzJ Scalaz 6.0.4 と Haskell (GHC7.4.1) を比べてみる
2012-02-05 03:24:41一度公開したあともどんどん書き足したら、結構な量になったでござる(´・ω・`) http://t.co/X7ewxjzJ っていうかHaskellとあまり比較してないし関係なくなってきている・・・
2012-02-05 04:50:38コメントがっ「述語を量化できる論理体系では、同一性という概念をプリミティブに持たなくても 「XとYが等しいとは、全ての述語Pに対してP(X)ならばP(Y)、が成り立つこと」 という形で定義できる」 http://t.co/vKvJT0My 難しいがちょっとだけ理解が深まったような
2012-02-05 13:42:00@xuwei_k Bifunctor は Data.Traversable モジュールの元ネタの "The essence of the Iterator patter" という論文に出てきます。 http://t.co/JoH3f5Cg
2012-02-05 15:01:19@xuwei_k GHC 本体や Haskell Platform には付属してきませんが、HackageDB には Bifunctor を提供するパッケージがあります。 http://t.co/pulq6JNo
2012-02-05 15:03:00@xuwei_k Pointed,Apply,Bind のように細かくクラス分けしたり、Comonad クラスがあったりするのは、Typeclassopedia の影響でしょうね。 http://t.co/4JbluH5G http://t.co/4RNHd2fj
2012-02-05 15:03:45@xuwei_k FingerTree に関しては、FingerTree を使ったキューの実装が Data.Sequence モジュールにあります。 http://t.co/Tu2lUWLM http://t.co/Pm1Qth0g
2012-02-05 15:05:26@xuwei_k FingerTree はキューを実装するのには良いのですが、優先順位付きキューの実装にはあまり適していない(性能的に別のデータ構造の方が良い)ので、Haskell では割り切って内部実装にしている感じですね。 http://t.co/bDVLDrGt
2012-02-05 15:06:41@xuwei_k あっ、あまり適していないという言い方には語弊がありますか……まあ、優先順位付きキューの実装にはもっと適したデータ構造があるということです。
2012-02-05 15:09:41@xuwei_k .。oO(余談ですが、オリジナルの論文に近い fingertree というパッケージが HackageDB で公開されています。 http://t.co/IWgQYDNo )
2012-02-05 15:09:59@xuwei_k まとめると、Scalaz の作者の方が原理・原典主義的で、Haskell では歴史的理由や実用的な理由からきれいな構造にはなってはいなかったり、原典とは変えてしまっているものも、なるべく本来あるべき(だと考える)姿にしようとしている感じだと思います。
2012-02-05 15:11:28@xuwei_k Lens はこれですね。 http://t.co/0v18hEZy 依存パッケージの方で Comonad とか Cokleisli とか色々出てきます。まあ、どちらも Haskell コミュニティではまだあまり使われていないものですね。
2012-02-05 15:20:31@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@xuwei_k 現在の GHC には付属してこなくて Haskell Platform で提供されているパッケージなので、GHC 単体と比較しようとしたせいで見逃してしまったのだと思いますが。 http://t.co/8yBgWSoB http://t.co/tEZ4n1bE
2012-02-05 15:37:58@xuwei_k "Liskov substitutability" と書いているように、Liskov はオブジェクト指向固有のものですね。Haskell に対応するものが見つからなくて当然です。 http://t.co/KYJQ3r0Y http://t.co/YOrTei5u
2012-02-05 15:43:49@xuwei_k あっ、Apply,Bind っていう分割はこっちにありますね……。 http://t.co/bmGI8lAR Typeclassopedia だけではなく Edward Kmett から多くの影響を受けたみたいですね。 http://t.co/oN4V7Buc
2012-02-05 16:12:42@xuwei_k OptionT や ListT はモナド変換子ですね。 http://t.co/qO5z7uPy http://t.co/fFnp6sjC OptionW や ListW は……Comonad 関係かしら?
2012-02-05 16:15:40@shelarcy @xuwei_k OptionWやListWは、OptionやListをWrapして機能を追加するものなので、Scalaz固有のものだと思います。
2012-02-05 16:21:47@xuwei_k Tree は Data.Tree モジュールの Tree 型相当ですね。Haskell と比較になるように一応。 http://t.co/tW3wQSa1
2012-02-05 16:22:17@halcat0x15a @xuwei_k なるほど、そうでしたか。Comonad ではモナドの m(M) の代わりに w(W) を使ったりするので、「Comonad かしら? それにしては対応関係がおかしいけれど……」と悩んでました。ありがとうございます。
2012-02-05 16:25:03「Haskellの知識無くてライブラリ自体の探し方になれてないから、とりあえずGHCのソースみて似たような名前のもの探してみよう!」 ってやり方だけではちゃんとした比較にならないですね、当たり前ですが(´・ω・`)しかし、あんなレベルでも書くことによって色々教えてもらえてよかった
2012-02-05 16:54:55