我试图理解 fp-ts 中的 reader monad,以便我可以注入其他函数的依赖项。目标是组装一个类似于读者的 Do notation 的单级管道。我的代码有效。类型没有。我不明白为什么。
您能帮我理解获得以下 2 个结果所需的正确键入的语法吗?对解决方案中每个功能的作用进行细分的奖励。阅读源代码会R.bind
产生不透明的定义,例如bind_(Chain)
.
谢谢!
flowReader(readEnvVars)()
// {account: "123", region: "456", foo: "foo123", bar: "bar"}
flowReader()(readEnvVars)
// {account: "123", region: "456", foo: "foo123", bar: "bar"}
下面的示例工作代码。
import {IO} from 'fp-ts/IO'
import {Reader,bind,apS,of} from 'fp-ts/Reader'
type envVars = {
account: string,
region: string
}
const readEnvVars: IO<envVars> = ()=>({account:'123',region:'456'})
// note that this pipe is single level (0 nested callbacks). I'm trying to use reader to avoid nested callbacks for simpler code.
const flowReader : Reader<IO<envVars>, envVars & unknown> = flow(
bind('foo',({account})=>of('foo'+account)),
apS('bar',of('bar')),
);
// flowReader(readEnvVars)() yields
// {account: "123", region: "456", foo: "foo123", bar: "bar"}