首页 > 解决方案 > 如何使用 fp-ts 将 TaskOption 变成 TaskEither?

问题描述

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

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

另一个保存它:

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

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

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

TE.fromTaskOption不返回TaskEither我所期望的。我也尝试过TE.fromTaskOptionK,但也没有用,而是返回了一个形状怪异的函数。

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

标签: typescriptfunctional-programmingfp-ts

解决方案


TE.fromTaskOptionLeft当 TO为None

尝试这个:

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

推荐阅读