ケースクラスの引数を一般的に置き換えることは可能ですか? より具体的には、「検索」ケース・クラスと「置換」ケース・クラス (文法規則の左側と右側のようなもの)、およびターゲット・ケース・クラスを受け取る代替関数が必要であるとします。検索ケース・クラスの引数を置換ケース・クラスに置き換えた新しいケース・クラス? この関数は、単純にケース クラス (Product?) と、ケース クラスのすべての引数/製品に適用される関数を受け取ることもできます。
明らかに、特定のケース クラスがあれば、unapply と apply を使用できますが、この種の関数を一般的に (任意のケース クラスを指定して) 記述する最善/最も簡単/その他の方法は何ですか?
Scala 2.10 のリフレクション機能または shapeless の Iso.hlist を使用する良い解決策があるかどうか疑問に思っています。
たとえば、私が本当にできるようにしたいのは、次のようなクラスが与えられた場合です...
class Op[T]
case class From(x:Op[Int]) extends Op[Int]
case class To(x:Op[Int]) extends Op[Int]
case class Target(a:Op[Int], b:Op[Int]) extends ...
// and lots of other similar case classes
... 任意のケース クラスを取り、From 型の要素を To 型のインスタンスに置き換えたコピーを返すことができる関数があります。