scala で型のところに出てくる #
# というのはこういうやつ → ({type λ[α]=State[S, α]})#λ
先日のscalaz勉強会でも質問があって触れられていましたが(↓)
http://t.co/GoCDB4TGVu "Scalaにおける型パラメータの部分適用 [({type F[X] = G[A,X]})# F] について" #scalaz
— Kenji Yoshida (@xuwei_k) 2014, 7月 13
type HogeF[A] = Hoge[F, A]みたいなのよくあるな、というのは最近scalazとか見ていて思っていて、それが型パラメータの部分で適用できないからというのもわかってきてたのでこれもそういうだったのかということで納得。
これ # なのでぐぐっても調査がしにくいので以前困った。yuroyoroさんの記事にはたどりつけなかったなぁ。。
Type Projection SimpleType ::= SimpleType ‘#’ id A type projection T#x references the type member named
言語仕様的には#は Type Projectionというもの。
#
で調べていたらひしだまさんのこれにたどりついて、これ見てもどう関係があるのか全くわからなかったけど、型パラメータを部分適用したtypeを持ってる匿名クラス(? 構造的部分型?)を定義して、#を使ってその内部クラス(型)にアクセスしてそれを型として指定して使うっていう感じか。
そういえばIterator パターンの本質でも匿名型としてこの書き方について触れてた