在 scalaz 中,endo
函数 inFunction1Ops
是这样实现的:
def endo(implicit ev: R =:= T): Endo[T] =
Endo.endo(t => ev(self(t)))
我很好奇为什么在Endo.endo
函数体中,不只是简单地将 self... as Endo.endo(self)
,其行为与Endo.endo(t=> ev(self(t)))
.
这是我的模仿实现,我认为两者之间没有区别。我错过了什么?
def endo[R, T](f: R => T)(implicit ev: T =:= R) = (x: R)=> ev(f(x))
def endo2[R, T](f: R => T)(implicit ev: T =:= R) = f
此外,第一个实现不会在运行时增加一些开销吗?