Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding FiniteDuration instances #2544

Merged
merged 9 commits into from
Oct 7, 2018
37 changes: 37 additions & 0 deletions kernel/src/main/scala/cats/kernel/instances/finiteDuration.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package cats.kernel
package instances

import scala.concurrent.duration.Duration

import scala.concurrent.duration.FiniteDuration

object finiteDuration extends FiniteDurationInstances

trait FiniteDurationInstances {
implicit val catsKernelStdOrderForDuration: Order[FiniteDuration] with Hash[FiniteDuration] = new FiniteDurationOrder
implicit val catsKernelStdGroupForDuration: CommutativeGroup[FiniteDuration] = new FiniteDurationGroup
}


class FiniteDurationOrder extends Order[FiniteDuration] with Hash[FiniteDuration] {
def hash(x: FiniteDuration): Int = x.hashCode()

def compare(x: FiniteDuration, y: FiniteDuration): Int = x compare y

override def eqv(x: FiniteDuration, y: FiniteDuration): Boolean = x == y
override def neqv(x: FiniteDuration, y: FiniteDuration): Boolean = x != y
override def gt(x: FiniteDuration, y: FiniteDuration): Boolean = x > y
override def gteqv(x: FiniteDuration, y: FiniteDuration): Boolean = x >= y
override def lt(x: FiniteDuration, y: FiniteDuration): Boolean = x < y
override def lteqv(x: FiniteDuration, y: FiniteDuration): Boolean = x <= y

override def min(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x min y
override def max(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x max y
}

class FiniteDurationGroup extends CommutativeGroup[FiniteDuration] {
def empty: FiniteDuration = Duration.Zero
def inverse(x: FiniteDuration): FiniteDuration = -x
def combine(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x + y
override def remove(x: FiniteDuration, y: FiniteDuration): FiniteDuration = x - y
}