Получение предиката из Refined

Можно ли извлечь границы из предиката/свидетеля уточненной переменной во время выполнения? Что-то вроде следующего.

      // Should return L as a Double
def getLowerBound[L, H](v: Refined[Double, Interval.Closed[L, H]]): Double = ???

val v: Refined[Double, Interval.Closed[0.5, 1.0]] = 0.94
val lowerBound = getLowerBound(v)
lowerBound shouldBe 0.5

1 ответ

Вы можете использовать связанный тип, чтобы сообщить компилятору Lбудет Doubleа затем используйтеValueOf typeclass для извлечения значения буквального типа; как это:

      def getLowerBound[L <: Double, H](v: Refined[Double, Interval.Closed[L, H]])
                                 (implicit ev: ValueOf[L]): Double =
  ev.value

Вы можете увидеть работающий код здесь.

Другие вопросы по тегам