У меня есть следующие черты (упрощенный пример)Параметризованные оценки типа
trait F[A, M[_] <: Option[A]] {
def v: A
def f: A => M[A]
}
Я хочу, чтобы иметь возможность создать такую черту
trait G[A] extends F[A, Some]
Но это дает следующее сообщение об ошибке
Error:(18, 20) type arguments [A,Some] do not conform to trait F's type parameter bounds [A,M[_] <: Option[A]]
Как я могу связать пункт M[_]
измерительный тип?
Edit:
F[A, M[_] <: Option[_]]
тип будет работать. Но я на самом деле есть еще одна функция в моей черты
trait F[A, M[_] <: Option[_]] {
def v: A
def f: A => M[A]
def f2: A => A = {
(a: A) => f(a).get
}
}
И в этом случае в f2
, get
не возвращает значение типа A
, даже если f
возвращает M[A]
Error:(17, 20) type mismatch;
found : _$1
required: A
(a: A) => f(a).get
Можете ли вы просто сменить M [_] на M [A]? –
Спасибо, Rich, изменение 'M [_]' на 'M [A]' фактически работает. – synapski