Я пытаюсь решить следующую ошибку компилятора Scala ниже.метод копирования и полиморфизм подтипа в Scala
case class CC[E](l:List[E])
trait D[E,L<:CC[E]]{
def f(l:L):L = l.copy(l=List()) // does not compile: "found CC[E], required: L"
}
В (псевдо) -Haskell (без суб-типирования), это будет что-то вроде:
data CC = CC {l::[e]}
'makeLens CC
f l = l .~ _e []
В настоящее время я ищу в ScalaZ, Shapeless и Монокль.
На первый взгляд Монокль, кажется, не может быть и речи (не уверен, хотя), пожалуйста, докажите, что я ошибаюсь, если моя интуиция ошибается.
ScalaZ + Shapeless may probably работа, я не уверен, как (никогда не использовал их).
1) Что было бы самым простым способом решить эту проблему в Scala?
2) Будет ли ScalaZ само по себе достаточно? Или просто бесформенность сама по себе? Или это сочетание двух необходимых? Или, может быть, каким-то другим способом?
Ммм это, кажется, ответ http://www.cakesolutions.net/teamblogs/copying-sealed-trait-instances-a-journey-through -generic-programming-and-shapeless – jhegedus
Это также связано: http://stackoverflow.com/a/41000237/1374461 –
Интересно, спасибо за подсказку @ Jasper-M – jhegedus