scalaz.Equal是如何解决的

时间:2012-11-18 13:56:31

标签: scala implicit scalaz

Equal包中有scalaz个对象:

package scalaz

object Equal extends EqualLow {

  // ...

  implicit def Tuple3Equal[A: Equal, B: Equal, C: Equal]: Equal[(A, B, C)] = equal {
    case ((a1, b1, c1), (a2, b2, c2)) => a1 ≟ a2 && b1 ≟ b2 && c1 ≟ c2
  }

  //...
}

编译器知道怎么可能在调用时调用implicit def Tuple3Equal方法:

import scalaz._
import Scalaz._

implicitly[Equal[Tuple3[Int,Int,Int]]]
//or
(1,2,3).=== (1,2,3)

请注意,我只导入scalaz._包和Scalaz._对象,并且没有显式导入scalaz.Equal._,其中包含含义。

1 个答案:

答案 0 :(得分:4)

因为在查找Foo类型的隐含时,始终会检查Foo的伴随对象。有关隐式解决方案的完整说明,请参阅this answer