考虑以下代码行:
def fixBr[U](v: U)(implicit l: Lens[U, String]): U = ???
def fixAsterisk[U](show: Boolean)(v: U)(implicit l: Lens[U, String]): U = ???
def fixLinks[U](v: U)(implicit l: Lens[U, String]): U = ???
def fix1[T](show: Boolean)(what: List[T])(implicit l: Lens[T, String]) =
what ∘ fixAsterisk(show) ∘ fixBr[T] ∘ fixLinks[T]
def fix2[T](show: Boolean)(what: List[T])(implicit l: Lens[T, String]) =
what ∘ fixAsterisk(show) ∘ fixBr ∘ fixLinks
(这个有趣的unicode角色∘只是一张scalaz地图)
为什么fix1
是一个有效的Scala代码,并且在fix2
情况下编译器抱怨缺少对函数l
和fixBr
的隐式参数fixLinks
?在我看来,编译器应该能够看到U == T