如何确保Scala中的类型参数不同?

kar*_*rlf 4 generics scala

通过以下定义,可以确保具体类型参数相等:

trait WithEqual[T1 >: T2 <: T2, T2]
Run Code Online (Sandbox Code Playgroud)

所以行

type A = WithEqual[Int, Int]
Run Code Online (Sandbox Code Playgroud)

将是合法的.现在我的问题是:如何实现恰恰相反?因此,以下行应该不会编译:

type B = WithUnequal[Int, Int]
Run Code Online (Sandbox Code Playgroud)

ret*_*nym 10

这在Scala中非常棘手,你必须诉诸于故意模糊.这是这种技术的一个例子.

马克哈拉已经在他的操场上推广了类型级别的hackery,Up.

这可能适用于您的问题,但我现在没有时间尝试.