mapHaskell には、ボトムアップまたはトップダウンのいずれかで、コレクション内のすべてのノードでのようなものを呼び出すことができる、このクールで一般的なトラバーサル機能があります。それが呼び出され、次のeverywhereようなことを行いeverywhere f tree、fツリー内のすべてのノードで呼び出されます。
Scala で for と同等のものを書くのTraversableは簡単ですが、Haskell のものはタプルや case クラスと同等のもの、またはより一般的には Scala が s と呼ぶものでも機能しますProduct。
Productメソッドを使用して要素をトラバースすることはできますがproductIterator、コンストラクター (実際にはメソッドだと思います) への引数がどうあるべきかがわかったら、タプルまたはケースクラスを元に戻す簡単な方法はありapplyますか?
def mapOnProduct[X](f: X -> X, prod: Product) {
val newArgs = prod.productIterator.map {
case x: X => f(x)
case id => id
}.toList
[?].apply(newArgs: _*)
}
これが機能する可能性があるように、何に置き換えることができ[?]ますか?
ありがとう!