【发布时间】:2020-06-19 17:29:22
【问题描述】:
给定一个未初始化的抽象类型成员 =:= 等于存在类型
implicitly[Undefined =:= x forSome { type x }] // ok
那么为什么它们之间似乎存在差异
object O {
type Undefined
implicitly[Undefined =:= _] // ok
def g[F[_]](fun: F[_] => F[_]) = ???
def h[F[_]](fun: F[Undefined] => F[Undefined]) = ???
g[List](l => List(42)) // ok
h[List](l => List(42)) // error
}
注意g 是如何编译的,而h 会引发类型不匹配错误。进一步考虑
object O {
type Undefined
type Existential = x forSome { type x }
implicitly[Undefined =:= x forSome { type x }] // ok
implicitly[Undefined =:= Existential] // error
}
如果Undefined等于x forSome { type x },而x forSome { type x }等于Existential,那么为什么Undefined不等于Existential?
【问题讨论】:
-
@DmytroMitin
implicitly[Undefined =:= _]是什么意思?
标签: scala types equivalent existential-type type-alias