テストするコード:
import scalaz.{Reader, Applicative}
class ReaderInstanceTest {
type IntReader[A] = Reader[Int, A]
val a = Applicative[({type l[A] = Reader[Int, A]})#l] // fine
val b = Applicative[IntReader]
// ^ ambigous implicit values
// both method kleisliMonadReader ..
// and method kleisliIdMonadReader ..
}
これは、Scala の型コンストラクター推論チケットの高次統合に関連していますか? もしそうなら(そうでなくても)、a と b のケースでここで何が起こるか説明できますか?
いつラムダ型を使用し、いつ型エイリアスを使用して、予期しないエラーなしですべてがうまくいくかについてのガイドラインはありますか?