我对函数式编程和特别是fp-ts
库非常陌生。
我的问题包括两个部分:
- 我看到了一种将 Monads 从一种类型转换为另一种类型的模式,例如从
Task
toIO
或反之亦然,我们如何管理这一点,我们应该始终保持在一个类型上还是应该随着链条的继续而改变? - 如何简单地使打字稿跟随这些从一个到另一个的类型更改?
例如,假设我们有几个函数,我们想将它们组合在一起,如下所示,我知道这个例子可能不是很实用,但它可以达到目的。
declare function getRnd(min: number, max: number): IO<number>; // Returns a random number within the range
declare function getPage(pageNo: number): TaskEither<Error, string>; // Make an Http request
declare function getLinks(pageContent: string): Option<string[]>; // Returns some links
// Let's say we wanna get a random page number and then return the links on it
// How do we compose these functions?
const getPageLinks = pipe(
getRnd(2, 4),
IO.chain(getPage), // I'm pretty sure TS will yells at me here
TaskEither.chain(getLinks),
log, // ?
)