Хочу сделать обобщенную функцию, формирующую ленивый список чисел Фибоначчи произвольного типа T, поддерживающего метод +. Пытаюсь так:
object Test {
def makeFib[T <: Any { def + (that:T):T } ](current: T, pred: T): Stream[T] = {
Stream.cons[T]( current, makeFib[T](current + pred , current) )
}
def main(args: Array[String]) {
print (makeFib[Long](1, 0).take(100).last)
}
}
Компилятор ругается:
[error] /home/oleg/IdeaProjects/learning-scala/src/main/scala/org/ovk/learningscala/Test.scala:15: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
[error] def makeFib[T <: Any { def + (that:T):T } ](current: T, pred: T): Stream[T] = {
[error] ^
[error] one error found
Можно это как-нибудь обойти?