对于返回Either不同值,我有两个验证函数。 如果它们中的一个具有left值,我想抛出一个异常,如果两个都right ,则不执行任何操作。 我以前从未使用过fp-ts,也无法弄清楚如何正确组合左结果。 我当前的解决方案有效,但感觉不到我使用的正确。 import { Either, l ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在寻找具有此行为的fp-ts
函数:
function compute1(arg: number): Option<number>;
function compute2(arg: number): Option<number>;
function compute3(arg: number): Option<number>;
function compute(arg: number): Option<number> {
const first = compute1(arg)
if (isSome(first)) return first
const second = compute2(arg)
if (isSome(second)) return second
const third = compute3(arg)
if (isSome(third)) return third
return none
}
// For example I am looking for this `or` function:
const compute = or([
compute1,
compute2,
compute3,
])
我无法在此处的Option
文档中找到相应的功能。
我认为您正在 Option 库中寻找getLastMonoid
。 这将为您提供最正确的some
值,如下表所示:
× | 是 | 连接(x,y) |
---|---|---|
没有 | 没有 | 没有 |
一些(一) | 没有 | 一些(一) |
没有 | 一些(一) | 一些(一) |
一些(一) | 一些(b) | 一些(b) |
但是,这仅对Option
对有帮助,为了将其应用于Option
数组,您需要依赖Array 中的reduceRight
函数。 与原生 javascript 数组中的 reduce 函数类似,它将采用初始值 B 并将其传递给函数f
直到它遍历整个数组。
将所有这些放在一起,您的计算功能可以替换为以下内容:
import { getLastMonoid, some, none, Option } from "fp-ts/lib/Option";
import { reduceRight } from "fp-ts/lib/Array";
import { pipe } from "fp-ts/lib/function";
const M = getLastMonoid<number>();
const list = [some(1), some(2), some(3)];
const compute = (list: Option<number>[]): Option<number> =>
pipe(list, reduceRight(none, M.concat));
console.log(compute(list)); // some(3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.