Я использую Memo
из scalaz на некоторое время, однако, здесь ситуация, что я чувствую, я не могу оставаться pure
:.Функциональный дизайн программирование: Дело о Memo в scalaz
def compute(a: Int, b: Int): Int = {a+b} //an expensive computation
val cache = Memo.immutableHashMapMemo[(Int, Int), Int]{
case ((a,b)) => compute(a,b)
}
Теперь у меня есть s1
и s2
оба типа Set[(Int, Int)]
. Например, s1 = Set((1,1), (1,2))
и s2 = Set((1,2), (1,3))
. Каждый список должен быть запущен параллельно:
def computePar(s: Set[(Int, Int)]): Set[Int] = //using compute() in parallel
Так вопрос каждый раз, когда я могу получить только список результатов из списка ввода. Хотя мой Memo
все равно должен быть Map[(Int, Int), Int]
, потому что вы можете повторно использовать compute(1,2)
от s1
для первого элемента в s2
. Использование измененной карты должно решить проблему. Мне просто интересно, есть ли решение FP. Я чувствую, что это может быть связано с Kleisli
или аналогичным.