Enum

Формальное определение

Члены типа Enum, расширяющего тип Order и Bothable, представляют собой последовательно упорядоченные типы — их можно перечислить.

Основное преимущество класса типов Enum заключается в том, что мы можем использовать его типы в диапазонах списков. У них также есть определенные преемники (successors) и предшественники (predecessors), которые вы можете получить с помощью функций succ и pred. И возможно существование минимального и максимального элементов.

Enum должен удовлетворять следующим законам (помимо законов Order и Equal):

Определение в виде кода на Scala

trait Equal[A]:
  def equal(a1: A, a2: A): Boolean

enum Ordering:
  case LT
  case EQ
  case GT

trait Order[A] extends Equal[A]:
  def order(x: A, y: A): Ordering

trait Predecessible[A]:
  def pred(a: A): A

trait Successible[A]:
  def succ(a: A): A

trait Bothable[A] extends Predecessible[A], Successible[A]

trait Enum[A] extends Order[A], Bothable[A]:
  def min: Option[A]
  def max: Option[A]

Реализация

Реализация в ScalaZ

import scalaz.*
import Scalaz.*
1 |-> 2        // [1,2]
1 |--> (2, 5)  // [1,3,5]
1.pred         // 0
1.predx        // Some(0)
1.succ         // 2
1.succx        // Some(2)
Enum[Int].min  // Some(-2147483648)
Enum[Int].max  // Some(2147483647)

Ссылки: