fp-ts 返回从任一 [] 序列的所有左值

标签 fp-ts

我有一个字符串列表,string[]我映射了一个返回 Either<Error, string>[] 的验证函数
我要 [Error[], string[]] ,所有验证错误和所有验证字符串。
可以 sequence(Either.Applicative)traverse(Either.Applicative)返回遇到的所有错误?我只收到Either<Error, string[]> ,仅返回第一个错误。我是否需要编写自己的 Applicative,使用合并左和右的半群的东西?
我可以通过更改 map 来获得所有错误至 reducefold .
我还考虑过反转验证,并运行两次。一个函数返回有效字符串,一个返回错误。

最佳答案

traverse返回 Either ,但您想同时累积 Left s 和 Right s。您可以 map在输入上,然后分离元素。

import * as A from 'fp-ts/lib/Array';
import * as E from 'fp-ts/lib/Either';
import { pipe } from 'fp-ts/lib/function';

declare const input: string[];
declare function validate(input: string): E.Either<Error, string>;

const result = pipe(input, A.map(validate), A.separate);
// result.left: Error[]
// result.right: string[]

关于fp-ts 返回从任一 [] 序列的所有左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182408/

相关文章:

typescript - 从对象中获取可选的通用值

typescript - 如何将静态类型的函数记录应用于 typescript 中的参数

typescript - 将一些异步任务链接到fp-ts中,以保留每个任务的结果

typescript - 在 fp-ts 中,如何组合 2 个(或更多)Ord 实例

typescript - 具有未知键的属性的 Io-ts 接口(interface)

typescript - 如何避免 fp-ts 中带有链的厄运金字塔?

javascript - TaskEither sequenceArray 函数处理不同类型返回类型的问题

typescript - 来自 fp-ts 和 URI 的 typescript 中更高种类的类型