【发布时间】:2017-02-26 22:03:55
【问题描述】:
我想在 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(* => * 类型)的类型 lambda?
【问题讨论】:
-
如果你的目标是简化第 1 行,那你为什么不直接写
def f[A : Eq : ClassTag] = ??? -
@MichaelZajac 我正在尝试统一没有证据、1 或 2 证据的函数。