Haskell 有这个很酷的通用遍历的东西,可以让你map在集合中的每个节点上调用类似的东西,无论是自下而上还是自上而下。它被调用everywhere,你会做类似的事情,everywhere f tree并且f会在你的树中的每个节点上被调用。
在 Scala 中编写等价的 forTraversable很容易,但 Haskell 也适用于元组和 case 类的等价物,或者更一般地,Scala 称之为Products 的东西。
Product您可以使用该方法遍历 a 中的元素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: _*)
}
我可以用什么代替[?],以便有一些工作机会?
谢谢!