操作 A.sequenceT 允许将类型化 Monad 的序列转换为类型化元组的 Monad,例如在这个 Option 示例中:
const sequenceO = A.sequenceT(O.Apply);
const o1: Option<number> = O.some(1);
const o2: Option<string> = O.some("1");
const o12: Option<[number, string]> = sequenceO(o1, o2);
逆运算的最佳表示是什么?
作为 Option 的特例,我能做的最好的是:
const unsequenceO = O.fold<[number, string], [Option<number>, Option<string>]>(() => [O.none, O.none], ([s1, s2]) => [O.some(s1), O.some(s2)]);
const [u1, u2] = unsequenceO(o12);
但我想知道是否存在一个概念(以及更通用的实现)。