测试代码:
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 情况下会发生什么吗?
您是否有关于何时使用类型 lambda 以及何时使用类型别名的指导方针,以便从长远来看一切正常而不会出现意外错误?