typescript - 如何使用 fp-ts 将 TaskOption 转换为 TaskEither?

标签 typescript functional-programming fp-ts

我有一个函数,可用于在数据库中查找对象并返回一个 TaskOption:

find: (key: SchemaInfo) => TO.TaskOption<Schema>

还有另一个保存它的:

register: (schema: Schema) => TE.TaskEither<Error, void>

在我的 register 实现中,我想检查我尝试保存的 Schema 是否存在(我想使用 find),但我不知道如何将 TaskOption 映射到 TaskEither。我尝试这样做:

pipe(
    findSchema(schema.info),
    TE.fromTaskOption,
    TE.swap
)

但是 TE.fromTaskOption 没有返回我期望的 TaskEither 。我也尝试过 TE.fromTaskOptionK ,但它也不起作用,它返回一个奇怪的形状函数。

我的用例是,如果 TaskOptionnone 我尝试保存(这意味着架构尚未注册),否则我返回错误(架构已经注册)。我该如何解决这个问题?

最佳答案

当 TO 为 None

时,

TE.fromTaskOption 需要将一个值放入 Left

试试这个:

pipe(
    findSchema(schema.info),
    TE.fromTaskOption(() => "No schema"),
    TE.swap
)

关于typescript - 如何使用 fp-ts 将 TaskOption 转换为 TaskEither?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69637285/

相关文章:

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

angular - 如何使用 Angular Material 将数据表导出为pdf

javascript - 如何使用包含键作为字符串和值作为映射迭代的 ngFor 循环映射进行迭代

javascript - Angular 2 - 如何在等待 http 请求完成时阻止 GUI 渲染

functional-programming - Kotlin中如何用动态编程实现纯函数?

typescript - 如何正确输入 fp-ts ObservableEither#fold?

typescript - 如何推断 TypeScript 中的可选属性?

javascript - js模式问题

tree - 从列表构建二叉树(预序)

functional-programming - 将任一<E,A> 数组转换为任一<E,A[]>(Scalaz 中的序列函数)