以下の 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、Monocle を検討しています。
一見、モノクルは論外のように見えますが (確かではありませんが)、私の直感が間違っている場合は、私が間違っていることを証明してください。
ScalaZ + Shapeless はおそらく機能する可能性がありますが、どのように機能するかはわかりません (使用したことはありません)。
1) Scala でこれを解決する最も簡単な方法は何ですか?
2) ScalaZ 自体で十分でしょうか? それとも、Shapeless だけで十分ですか?それとも2つの組み合わせが必要ですか?それとも他の方法ですか?