Я хочу использовать абстрактный тип Value
, ограниченный принадлежностью к типу класса Show
от cats.Использование абстрактных типов с классами типов в Scala
Моя первая попытка будет что-то вроде:
package examples
import cats._
import cats.data._
import cats.implicits._
class UsingShow1 {
type Value <: Show[Value] // Not sure if this declaration is right
def showValues(vs: List[Value]): String =
vs.map(implicitly[Show[Value]].show(_)).mkString // Error line
}
Но компилятор не находит неявный параметр Show[Value]
.
Я знаю, что я могу определить предыдущий пример:
class UsingShow2[Value: Show] {
def showValues(vs: List[Value]): String =
vs.map(implicitly[Show[Value]].show(_)).mkString
}
Однако, я хотел бы знать, если это возможно, использовать абстрактные типы вместо параметров типа.
Спасибо, второй стиль - это то, что я искал. Я хотел бы выразить ограничение на 'Show' для' Value' в объявлении абстрактного типа с использованием одной строки. Во всяком случае, добавление 'implicit def showValue: Show [Value]' тоже в порядке. – Labra