PartialOrder 

Order の他に、Cats は PartialOrder も定義する。

scala> import cats._, cats.data._, cats.implicits._
import cats._
import cats.data._
import cats.implicits._

scala> 1 tryCompare 2
res0: Option[Int] = Some(-1)

scala> 1.0 tryCompare Double.NaN
res1: Option[Int] = Some(-1)

PartialOrderOption[Int] を返す tryCompare 演算を可能とする。 algebra によると、オペランドが比較不能な場合は None を返すとのことだ。 だけど、1.0Double.NaN を比較しても Some(-1) を返しているので、何が比較不能なのかは不明だ。

scala> def lt[A: PartialOrder](a1: A, a2: A): Boolean = a1 <= a2
lt: [A](a1: A, a2: A)(implicit evidence$1: cats.PartialOrder[A])Boolean

scala> lt[Int](1, 2.0)
<console>:22: error: type mismatch;
 found   : Double(2.0)
 required: Int
       lt[Int](1, 2.0)
                  ^

scala> lt(1, 2)
res3: Boolean = true

PartialOrder は他にも >, >=, <, そして <= 演算子を可能とするが、これらは気をつけないと標準の比較演算子を使うことになるのでトリッキーだ。

Contents