【发布时间】:2020-04-18 22:39:18
【问题描述】:
我有 3 个函数,f1、f2、f3。
f1 和 f3 是同步的并返回 Option<string> 但 f2 是异步函数返回 Promise<Option<string>>。
我应该如何在一个管道中使用这三个函数?
这是我的代码:
import {some, chain} from 'fp-ts/lib/Option';
import {pipe} from 'fp-ts/lib/pipeable';
const f1 = (input: string) => {
return some(input + " f1")
};
const f2 = async (input: string) => {
return some(input + " f2")
};
const f3 = (input: string) => {
return some(input + " f3");
};
const result = pipe(
"X",
f1,
chain(f2),
chain(f3),
);
console.log("result", result);
【问题讨论】:
-
您有两个嵌套效果(异步和可选),因此您需要组合两个 monad。由于 monad 不能机械地组成,因此您必须使用 monad 转换器。我确信 FP-TS 提供
OptionT. -
是的,FP-TS 中有
OptionT,但我不明白我应该如何使用它。你能告诉我如何在上面的示例代码中使用OptionT吗?谢谢。 -
我不知道fp-ts library。非常有趣。
-
请阅读它的文档并帮助我解决我的问题
标签: typescript asynchronous functional-programming pipe fp-ts