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