due to the use of anonymous functions inside producer, if you have (p1, f1) == (p2, f2) you don't get p1.map(f1) == p2.map(f2). This frustrates the ability to memoize caching, which can in the worst case cause recomputation.
We are running a lot of issues like these down, but the solution we have come up with is to never use anonymous functions inside the planners and instead always use thinks like:
case class GetValue[K, V]() extends Function1[(K, V), V] {
def apply(kv: (K, V)) = kv._2
}
due to the use of anonymous functions inside producer, if you have
(p1, f1) == (p2, f2)
you don't getp1.map(f1) == p2.map(f2)
. This frustrates the ability to memoize caching, which can in the worst case cause recomputation.We are running a lot of issues like these down, but the solution we have come up with is to never use anonymous functions inside the planners and instead always use thinks like: