7

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: _*)
}

我可以用什么代替[?],以便有一些工作机会?

谢谢!

4

1 回答 1

6

请参阅 Miles Sabin 的 Shapeless Shapeless。有一个sybclass测试中的where用法的例子

于 2012-05-03T05:09:18.807 回答