https://gist.github.com/3300312
元記事は2010年7月2日と、(このblog書いてる時点から)もう2年以上前の記事ですが、未だに日本語の情報少ないというか、まぁ(頻繁に必要になるものでもないからだろうから)それほど理解している人少ないので。ちょっとまえのScala勉強会でも話題になっていたらしいし。
ちなみに元記事のblogは以前も紹介しましたが
Scala上級者になるために読んでおくべき海外blogまとめ
Scalazのコミッターの人です。
これら rank-2 polymorphism などの、HaskellなどではHaskellでGHC拡張使えば第一級で文法としてサポートされている機能だが、Scalaだと自前で trait 作ってゴニョゴニョしないときけない場合がある程度ある。
Haskellだと @mr_konn さんのPFIセミナーでのHaskellを例にした型システムの話での、このスライド http://www.slideshare.net/konn/how-wonderful-to-be-statically-typed/39
の39ページから、60ページあたりとか。
その後の実際のrank 2の応用例としてリソースアクセスとかリージョンについて話してるところも関連。
それらrank 2などは、もちろん未だにScalaの標準ライブラリには入っていないし、入る予定も無さそう。
Scalaz(6にも、開発中の7にも)には、色々含まれてる
https://github.com/scalaz/scalaz/blob/v6.0.4/core/src/main/scala/scalaz/Category.scala
https://github.com/scalaz/scalaz/blob/v6.0.4/core/src/main/scala/scalaz/Forall.scala
https://github.com/scalaz/scalaz/blob/v7.0.0-M2/core/src/main/scala/scalaz/NaturalTransformation.scala
https://github.com/scalaz/scalaz/blob/v7.0.0-M2/core/src/main/scala/scalaz/package.scala#L92
4年も前に @kmizu さんが触れていたりする*1
http://d.hatena.ne.jp/kmizushima/20080530/1212121329
shapelessというライブラリにもある
http://www.chuusai.com/2012/05/10/shapeless-polymorphic-function-values-2/
最後に重要なのが、このblogの最後で
I wonder if we can use this to get static guarantees of safe resource access, as in the SIO monad detailed in Lightweight Monadic Regions.
となっている、いわゆるRegionが、現在開発中のScalaz7ですでに実装されているということ
だれかこれの、わかりやすい使い方を・・・。
閉じたリソースにアクセスするのを型で防ぐという点だけ聞くと、ある意味ローンパターンと目的は同じというか、共通する部分はあるのだろうけど、それに加えて、Monadになっていて、pureに操作できて、遅延評価もできたりして、色々汎用的なのかな?とか勝手に思ってる