【发布时间】:2021-07-17 14:54:50
【问题描述】:
我正在学习一些fp-ts。要创建我遇到的问题的程式化版本,假设我想创建一个不存在的表,所以我必须查询数据库:一个容易出错的异步操作。如果该表不存在,我想创建它:另一个容易出错的异步操作。进一步假设错误类型都是字符串(尽管我也想知道如何在需要时创建联合错误类型),并且成功创建时返回的值是数字 ID。
简而言之,看看表是否存在,如果不存在,则创建它——在整个过程中都有可能出现错误。关键是我希望两个错误都反映在最外面的类型中:TaskEither<string, Option<number>>。问题是我不确定如何避免获得TaskEither<string, Option<TaskEither<string, number>>>。也就是说,我不知道将Option 中的错误拉起并将其合并为最外层错误的最佳方法。
(也许这涉及到序列或可遍历?我还在学习这些。)
关于一些代码:
import { taskEither as TE, option as O } from "fp-ts";
import { pipe } from "fp-ts/lib/function";
// tableExists: () => TE.TaskEither<string, boolean>
// createTable: () => TE.TaskEither<string, number>
// I want this to represent both possible errors. Currently a type error.
// -------------------------------vvvvvv
const example = (): TE.TaskEither<string, O.Option<number>> => {
return pipe(
tableExists(),
// How to pull the possible `left` up to the outermost type?
// ------------------------------------------vvvvvvvvvvvvv
TE.map((exists) => (exists ? O.none : O.some(createTable()))
);
};
【问题讨论】:
标签: typescript fp-ts