0

我试图理解 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"}
4

0 回答 0