Можно ли выразить это обобщенным образом, используя кошки или скалязы, это?
val common: F[Common] = ...
val a: F[A] = common.flatMap(commonToA)
val b: F[B] = common.flatMap(commonToB)
val result: F[(A,B)] = a someFunctionToProduct b
И убедиться, что эффект common
эффективно выполняется только один раз?