2
我想在Scala中有一个返回类型lambda而不是类型的类型lambda。在Scala中返回一个类型lambda的类型lambda
def f[A](implicit ev1: Eq[A], ev2: ClassTag[A])
我想将这两个隐含的证据结合成一个证据变量。我试图
trait Ev2[E1[_], E2[_], T] extends Product2[E1[T], E2[T]] {
def canEqual(that: Any) = false
}
object Ev2 {
implicit def ev2[T, E1[_], E2[_]](implicit e1: E1[T], e2: E2[T]) = new Ev2[E1, E2, T] {
def _1 = e1
def _2 = e2
}
}
然后
type &[E1[_], E2[_]] = ({type λ[T] = Ev2[E1, E2, T]})#λ
我想写上述功能f
作为
def f[A: Eq & ClassTag]
不过,我所定义的&
型拉姆达不能编译。有没有办法编写这样的返回类型为lambda的类型lambda(类型为* => *
)?
如果你的目标是简化第1行,那你为什么不直接写'def f [A:Eq: ClassTag] = ???' –
@MichaelZajac我试图用无证据统一函数,用1或2个证据。 –