Skip to content

Commit

Permalink
Merge pull request #1399 from durban/topic/uuidInstances
Browse files Browse the repository at this point in the history
UUID instances
  • Loading branch information
peterneyens committed Oct 24, 2016
2 parents 049546f + 5b80f3c commit 79e2f69
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 1 deletion.
1 change: 1 addition & 0 deletions core/src/main/scala/cats/instances/all.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ trait AllInstances
with FutureInstances
with TryInstances
with TupleInstances
with UUIDInstances
3 changes: 2 additions & 1 deletion core/src/main/scala/cats/instances/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ package object instances {
object bigInt extends BigIntInstances
object bigDecimal extends BigDecimalInstances

object try_ extends TryInstances
object try_ extends TryInstances
object tuple extends TupleInstances
object uuid extends UUIDInstances
}
9 changes: 9 additions & 0 deletions core/src/main/scala/cats/instances/uuid.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package cats
package instances

import java.util.UUID

trait UUIDInstances extends cats.kernel.instances.UUIDInstances {
implicit val catsStdShowForUUID: Show[UUID] =
Show.fromToString[UUID]
}
9 changes: 9 additions & 0 deletions kernel-laws/src/test/scala/cats/kernel/laws/LawTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import org.scalatest.FunSuite
import scala.util.Random
import scala.collection.immutable.BitSet

import java.util.UUID

class LawTests extends FunSuite with Discipline {

// The scalacheck defaults (100,100) are too high for scala-js.
Expand All @@ -33,6 +35,9 @@ class LawTests extends FunSuite with Discipline {
implicit val arbitrarySymbol: Arbitrary[Symbol] =
Arbitrary(arbitrary[String].map(s => Symbol(s)))

implicit val arbitraryUUID: Arbitrary[UUID] =
Arbitrary(Gen.uuid)

// this instance is not available in scalacheck 1.13.2.
// remove this once a newer version is available.
implicit val cogenBigInt: Cogen[BigInt] =
Expand All @@ -46,6 +51,9 @@ class LawTests extends FunSuite with Discipline {
implicit val cogenSymbol: Cogen[Symbol] =
Cogen[String].contramap(_.name)

implicit val cogenUUID: Cogen[UUID] =
Cogen[(Long, Long)].contramap(u => (u.getMostSignificantBits, u.getLeastSignificantBits))

{
// needed for Cogen[Map[...]]
implicit val ohe: Ordering[HasEq[Int]] = Ordering[Int].on(_.a)
Expand Down Expand Up @@ -78,6 +86,7 @@ class LawTests extends FunSuite with Discipline {
laws[OrderLaws, Long].check(_.order)
laws[OrderLaws, BitSet].check(_.partialOrder)
laws[OrderLaws, BigInt].check(_.order)
laws[OrderLaws, UUID].check(_.order)
laws[OrderLaws, List[Int]].check(_.order)
laws[OrderLaws, Option[String]].check(_.order)
laws[OrderLaws, List[String]].check(_.order)
Expand Down
7 changes: 7 additions & 0 deletions kernel/src/main/scala/cats/kernel/Order.scala
Original file line number Diff line number Diff line change
Expand Up @@ -203,4 +203,11 @@ object Order extends OrderFunctions[Order] {

override def toOrdering: Ordering[A] = ev
}

def fromComparable[A <: Comparable[A]]: Order[A] = {
new Order[A] {
override def compare(x: A, y: A): Int =
x compareTo y
}
}
}
1 change: 1 addition & 0 deletions kernel/src/main/scala/cats/kernel/instances/all.scala
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ trait AllInstances
with SymbolInstances
with TupleInstances
with UnitInstances
with UUIDInstances
with VectorInstances
11 changes: 11 additions & 0 deletions kernel/src/main/scala/cats/kernel/instances/uuid.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package cats.kernel
package instances

import java.util.UUID

package object uuid extends UUIDInstances

trait UUIDInstances {
implicit val catsKernelStdOrderForUUID: Order[UUID] =
Order.fromComparable[UUID]
}

0 comments on commit 79e2f69

Please sign in to comment.