问题标签 [fp-ts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
910 浏览

arrays - 在 fp-ts 和函数式编程中管理单子数组

我对函数式编程非常陌生,并且在数组上运行遍历时遇到了很多困难。

当我阅读这本书时,似乎我应该能够简单地在 Monad 之间遍历,但我无法用fp-ts来理解这个概念。

有人可以使用或任何其他方式解释以下内容array.traverse/sequence吗?

  1. 我怎样才能从TaskEither<Error, string[]>TaskEither<Error, Either<Error, string>[]>; 还是有更好的方法可以从单个错误变为嵌套错误,同时保持打字简单?
  2. 我怎样才能从TaskEither<Error, Either<Error, string[]>>类似TaskEither<Error, Option<string[]>>或类似的东西?还是我们应该将该函数的结果映射到返回Either

考虑下面的简化代码,以便更好地了解我们正在使用这些数组做什么:

0 投票
1 回答
933 浏览

javascript - 使用 fp-ts 删除 Either 数组中的重复项

在函数式编程中使用删除 Either 数组重复项的最佳方法是什么fp-ts

这是我的尝试:

游乐场链接

0 投票
1 回答
115 浏览

typescript - TypeScript 中函数式编程的相互依赖操作

我正在开发一个使用fp-tsio-ts以功能型 TypeScript 编写的应用程序。我需要检索一组 JSON 配置文件。其中一些 JSON 文件包含检索其他一些 JSON 文件所需的信息。我想知道对于这种依赖关系,什么是好的抽象。

我目前发现自己正在编写定义硬编码阶段的代码(请参阅下面的伪代码)。这种方法的问题在于,这些阶段的名称完全没有意义,表达的是技术细节,而不是代码的预期行为。

我编写了以下帮助函数wheel来解决该问题。剩下的问题是这是否是一项新发明。也许这种编程模式有一个名字。也许它已经以某种形式或形式成为 fp-ts 的一部分。

0 投票
1 回答
1499 浏览

typescript - 如何在 io-ts 中定义混合数组?

使用最新的https://github.com/gcanti/io-ts/,我想建模 to 的属性result包含NodeLsStatusResponse类型NodeStatusNodeStatus404in (t.readonlyArray)

如何定义这种关系io-ts?

0 投票
1 回答
1780 浏览

javascript - 将 fp-ts TaskEither 与右侧的 Either 连接起来

我有 2 个嵌套请求的流程,其中可能是 3 个不同的结果:

  1. 请求之一返回错误
  2. 用户不是匿名的,返回 Profile
  3. 用户是匿名的,返回 false

这两个请求都可能引发错误,并且由于该实现TaskEither

第一个请求返回用户授权的布尔状态。如果用户被授权,第二个请求会加载用户配置文件。

作为回报,我想获得下一个签名,错误或匿名/配置文件:

我试图这样做:

但作为回报,我得到了E.Either<Error, Profile>,女巫不方便,因为我必须Anonymous手动从Error.

如何解决这个问题?

0 投票
2 回答
718 浏览

functional-programming - fp-ts:根据下一个元素过滤数组

我从函数式编程 / 开始fp-ts。我正在尝试编写一个函数,如果满足一个元素的条件,该函数会保留一个元素。

例子:

我可能还需要扩展它,以便同时包含匹配和下一个元素,如:

我不知道如何为两者中的任何一个构建一个适当的纯函数。

欢迎任何提示。

0 投票
1 回答
325 浏览

typescript - 来自分页 API 的 fp-ts 中的延迟评估递归流

我的目标是从 API 请求事务并将它们存储到数据库中。响应是分页的,我想读取每一页并分批存储事务。

因此,对于一个请求/响应周期,我希望在获取下一批之前处理结果并将其存储到数据库中。

我如何在 fp-ts 中以惯用的方式做到这一点?我注入了实际的 HTTP fetch 调用(url:string, init:RequestInit) => TE.TaskEither<Error, Response>,以使其保持可测试性。

到目前为止,我已经测试了 RxJS 和 fp-ts,即使我让它工作起来也有点复杂。

确实尝试了递归函数和生成器,但我没有成功地让它被懒惰地评估。

是否有任何现有的 fp-ts 示例显示每个元素都依赖于前一个元素的延迟评估流?

0 投票
0 回答
232 浏览

typescript - 使用 fp-ts 在单个输入上运行验证函数列表

我正在使用fp-ts来处理我的应用程序中的验证。我想编写一个接受验证器列表并在单个输入上运行所有验证器的函数。

这些是我想使用的类型:

在内部,我想validations根据fp-tsValidation来实现。我正在关注这个例子,但是Validator当我想动态地生成该列表时,它需要静态地知道 s 的列表。

请注意,为简单起见,我将 Validation 类型设置为 NonEmptyArray 错误,因为我主要对如何组合来自动态构造的数组的验证感兴趣。

最后,如果验证列表为空,我们可以假设输入是有效的。

如何validations使用getValidationfrom提供的组合器来实现fp-ts

0 投票
1 回答
367 浏览

typescript - fp-ts 在 mapLeft 中调用异步函数

我是 fp-ts 的新手,所以请帮我解决我的问题:我需要使用异步函数在不同级别上多次记录相同的错误。这是我的示例代码:

我习惯mapLeft这样做,但它不起作用。我需要做什么才能获得err2错误(err1)的价值而不是待定的承诺?

0 投票
1 回答
679 浏览

typescript - 在 fp-ts 中使用 TaskEither 和 fetch API

我想以某种方式将 Fetch API 包装在 fp-ts 中:

  1. 创建请求
  2. 检查状态
  3. 如果状态正常 - 返回 json

在运行 httpGet 后使用此示例,我得到一个响应并需要手动评估 .json() 方法。那么如何避免这种行为并在管道中获取 json 呢?