ekmett 勉強会やろう(提案)
twitter上でいろいろあってekmett 勉強会 開催決定!
「ekmett勉強会だがHaskell勉強会とは書いてない」「ekmettはScalazのコミッターである」「ekmettは、実はgithub上にScalaのリポジトリがいくつかある(超古くて最終更新2年くらいまえだけど)」つまり・・・
2013-03-15 12:15:24 via web
もちろん歓迎される(´・_・`)!!
というわけで盛り上がってました(?)が
URLこんなこと言ったけど当日発表するのは気が引けるし、気が向いたらblogに書こうかな…
というわけなので、blog書いてます。
以前もScalazとHaskellの関連でblog書いたことがありましたが
Scalaz 6.0.4 と Haskell (GHC7.4.1) を比べてみることによってScalazのclassを分類して理解してみる
togetter: ScalazとHaskellの比較記事というか疑問点をいっぱい書いたら、shelarcyさんにいっぱい教えてもらったよ!
もう1年以上まえですし、比べたのはScalaz6ですし、個人的に当時に比べてある程度はHaskellにもScalazにも*1詳しくなってるので、以前とちょっと似たような感じになりますが、今回は「ekmettさんの作ってるライブラリとScalaz *2 の対応付け」という観点で調べて書きだしてみました。
- ekmett/contravariant => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Contravariant.scala
- ekmett/lens => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Lens.scala
- ekmett/comonad => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Comonad.scala
- ekmett/free => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Free.scala
- ekmett/bifunctors => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Bifunctor.scala
- ekmett/comonad-transformers => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/ComonadTrans.scala
- ekmett/adjunctions => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Adjunction.scala
- ekmett/semigroupoids => Apply, Foldable1, Traverse1 など多数
- ekmett/either => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/EitherT.scala
- ekmett/pointed => かつてScalaz7.0.0-M7までは存在したけど消されました
- semigroupoid-extras
- https://github.com/ekmett/semigroupoid-extras/blob/master/src/Data/Semigroupoid/Coproduct.hs => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Coproduct.scala
- https://github.com/ekmett/semigroupoid-extras/blob/master/src/Data/Semigroupoid/Product.hs => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Product.scala
- ekmett/reducers => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Reducer.scala
- ekmett/semigroups => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Semigroup.scala
- ekmett/mtl =>https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/MonadTrans.scala
- ekmett/machines => https://github.com/runarorama/scala-machines もしくは https://github.com/scalaz/scalaz-stream
- ekmett/representable-functors => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Representable.scala
- kan-extensions もしくは category-extras => 最近のScalazには存在しませんが、とても昔に米田さんいました => 復活しました
- profunctors => https://github.com/scalaz/scalaz/blob/v7.0.0-RC1/core/src/main/scala/scalaz/Profunctor.scala
- Cozip => https://github.com/scalaz/scalaz/blob/v7.0.0/core/src/main/scala/scalaz/Cozip.scala
- distributive => https://github.com/scalaz/scalaz/blob/v7.0.1/core/src/main/scala/scalaz/Distributive.scala
それぞれ、全部そのまま対応しているわけではなく、おそらく1割程度しか関連していない場合などもあります。また、Freeやmtlなどのいくつかのライブラリは、同じようなコンセプトでも微妙に違った複数の実装*3があるはずですが、「どの実装がScalazのものに一番近いのか?」とかは考えず*4に、とりあえず少しでも関連していれば挙げてみました。あとHaskellの知識があまりないので、もしかしたらいくつか(名前が同じだけで)ほとんと別のものを挙げてしまっている可能性もあります(その場合はツッコミください)
とりあえず、かるく10個以上は関係していることがわかります。
ツッコミがあったり、あとで自分で気づいたことがあれば、修正するか追記するかもしれません。
あと、これとは別に気が向いたら、ekmettさんのScalaやScalazとの関わり(具体的にScalazのどのあたりにコミットしてたのか?)や、ekmettさんの古いScalaのリポジトリ見てなにか書くかもしれません。