构造scalaz.Equal [Foo]的实现

时间:2015-04-17 21:11:33

标签: implicit scalaz

鉴于以下课程:

scala> class Foo(x: Int) { def getX = x }
defined class Foo

我创建了implicit Equal[Foo]以便能够使用===

scala> implicit val FooEq: Equal[Foo] = Equal.equal(_.getX == _.getX)
FooEq: scalaz.Equal[Foo] = scalaz.Equal$$anon$7@6a246ad

有效。

scala> new Foo(10) === new Foo(10)
res2: Boolean = true

scala> new Foo(10) === new Foo(4545)
res3: Boolean = false

但是,我对如何创建FooEq感到困惑。

Equal.equal(_.getX == _.getX)发生了什么?我不确定该语句如何返回Equal[Foo]

1 个答案:

答案 0 :(得分:1)

Equal.equal的类型签名是def equal[A](f: (A, A) => Boolean): Equal[A]。因此,您传递的方法需要花费两个Foo s并将Boolean返回给equals,这会返回Equal[Foo]的实例。那是什么,以及该陈述如何返回Equal[Foo]

Here's some code that you've written using similar syntax.