こんにちは、高度な Scala の本を読んでいますが、scalaz ソースからのこのコードを理解するのに苦労しています。
object Tag {
/** `subst` specialized to `Id`.
*
* @todo According to Miles, @specialized doesn't help here. Maybe manually specialize.
*/
@inline def apply[@specialized A, T](a: A): A @@ T = a.asInstanceOf[A @@ T]
// ...
}
どのように機能しますか?a.asInstanceOf[A @@ T]
ClassCastException で失敗するはずですよね?
使用例は次のとおりです。
Multiplication(2) |+| Multiplication(3)
この場合a
は Int ですが、どのように@@[Int, Multiplication]
( Tagged[Int, Multiplication]
)に変換できますか?
助けてくれてありがとう。