All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalaz.std.java.time.scala Maven / Gradle / Ivy

package scalaz
package std.java

import java.time._

trait TimeInstances {

  private[this] def orderFromInt[A](f: (A, A) => Int): Order[A] = new Order[A] {
    def order(x: A, y: A) = Ordering.fromInt(f(x, y))
  }

  implicit val localDateTimeInstance: Order[LocalDateTime] = orderFromInt[LocalDateTime](_ compareTo _)
  implicit val offsetDateTimeInstance: Order[OffsetDateTime] = orderFromInt[OffsetDateTime](_ compareTo _)
  implicit val offsetTimeInstance: Order[OffsetTime] = orderFromInt[OffsetTime](_ compareTo _)
  implicit val zonedDateTime: Order[ZonedDateTime] = orderFromInt[ZonedDateTime](_ compareTo _)
  implicit val zoneOffsetInstance: Order[ZoneOffset] = orderFromInt[ZoneOffset](_ compareTo _)

  implicit val dayOfWeekInstance: Enum[DayOfWeek] = new Enum[DayOfWeek] {
    override val max = Some(DayOfWeek.SUNDAY)
    override val min = Some(DayOfWeek.MONDAY)
    override def pred(a: DayOfWeek) = a.minus(1)
    override def succ(a: DayOfWeek) = a.plus(1)
    override def order(x: DayOfWeek, y: DayOfWeek) =
      Ordering.fromInt(x compareTo y)
  }

  implicit val instantInstance: Order[Instant] = orderFromInt[Instant](_ compareTo _)

  implicit val durationInstance: Monoid[Duration] with Order[Duration] =
    new Monoid[Duration] with Order[Duration] {
      override def zero = Duration.ZERO
      override def append(f1: Duration, f2: => Duration) = f1 plus f2
      override def order(a1: Duration, a2: Duration) = Ordering.fromInt(a1 compareTo a2)
    }

  implicit val periodInstance: Monoid[Period] with Equal[Period] =
    new Monoid[Period] with Equal[Period] {
      override def zero = Period.ZERO
      override def append(f1: Period, f2: => Period) = f1 plus f2
      override def equal(a1: Period, a2: Period) = a1 == a2
    }

  implicit val yearMonthInstance: Enum[YearMonth] = new Enum[YearMonth] {
    override def pred(a: YearMonth) = a.minusMonths(1)
    override def succ(a: YearMonth) = a.plusMonths(1)
    override def order(x: YearMonth, y: YearMonth) =
      Ordering.fromInt(x compareTo y)
  }

  implicit val monthDayInstance: Order[MonthDay] = orderFromInt[MonthDay](_ compareTo _)
  implicit val localTimeInstance: Order[LocalTime] = orderFromInt[LocalTime](_ compareTo _)

  implicit val yearInstance: Enum[Year] = new Enum[Year] {
    override def pred(a: Year) = a.minusYears(1)
    override def succ(a: Year) = a.plusYears(1)
    override def order(x: Year, y: Year) =
      Ordering.fromInt(x compareTo y)
  }

  implicit val localDateInstance: Enum[LocalDate] = new Enum[LocalDate] {
    override def pred(a: LocalDate) = a.minusDays(1)
    override def succ(a: LocalDate) = a.plusDays(1)
    override def order(x: LocalDate, y: LocalDate) =
      Ordering.fromInt(x compareTo y)
  }

  implicit val monthInstance: Enum[Month] = new Enum[Month] {
    override val max = Some(Month.DECEMBER)
    override val min = Some(Month.JANUARY)
    override def pred(a: Month): Month = a.minus(1)
    override def succ(a: Month): Month = a.plus(1)
    override def order(x: Month, y: Month) =
      Ordering.fromInt(x compareTo y)
  }

}

object time extends TimeInstances




© 2015 - 2025 Weber Informatics LLC | Privacy Policy