问题标签 [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 回答
195 浏览

typescript - 在 fp-ts 中的 Either 上使用 getApplicativeValidation 后如何通过管道传输 ap 调用?

昨天我和几个同事试图让一个玩具示例在 fp-ts 中进行应用验证。我们终于让它通过手动将每个中间步骤存储在一个变量中并调用下一步来工作。但是使用 fp-ts 的 pipe 函数会更加优雅。直接使用 Either 可以,但不会将多个 Left 值合并为一个(例如,将数组与字符串错误连接起来)。但是对于 pipe(),ap() 调用需要两个参数,但只能得到一个。我们如何在这里正确使用管道:

0 投票
1 回答
274 浏览

fp-ts - 有没有办法将 IO 转换为 TaskEither

我试图开始使用 fp-ts,但我遇到了副作用。我编写了一个小测试程序,它将读取一个文件,将文件打印到屏幕上并返回一个 Either<Error, string>。

我以基本的do 表示法为例,最后得到了一个看起来像这样的代码

此代码可以编译,但 typescript 推断程序变量的类型为 TE.TaskEither<unknown, string>,而我期待的类型为 TE.TaskEither<Error, string>。

有没有办法将错误类型保留在 TaskEither 中?还是我使用这个库都错了?

ps 我使用的是 fp-ts 2.8.6 版

0 投票
1 回答
150 浏览

typescript - 使用解码器方法验证 ISO-8061 日期

为了简单使用,解码器方法一直在使用io-ts

但是,现在我想更彻底地验证日期。我中途希望能够做这样的事情:

但当然,这并不容易:

很明显,我误解了。是否有使用解码器和日期验证的简单路径struct

编辑:值得注意的是,这确实适用于较旧的非实验方法:

0 投票
1 回答
359 浏览

typescript - fp-ts:给定一个 Option 数组,返回一些项目的值的数组,以便将其键入为字符串数组

我正在尝试使用 fp-ts 验证将命令应用于表示 svg 路径数据的数组的操作。

不幸的是,validationErrors 仍然被视为一个项目列表,其中可能没有。

如何获取表示此操作的任何验证错误的字符串数组(按此类输入)。

我应该使用“应用”函数将参数放入验证函数吗?

如何获得验证器的应用功能?

当第二个函数只是恒等函数时,有没有更好的方法来进行折叠操作?编辑:我在这个视频https://youtu.be/1LCqHnaJJtY?t=2470中回答了这个问题:option.fold(() => undefined, (some) => some) === option.getOrElse(() => undefined) === option.toUndefined

很多问题来自迷失在 fp-ts 丛林中的人,希望您能提供一些见解来帮助我的项目变得有用。示例代码包含在我在这里剪切的一个分支中:https ://github.com/justin-hackin/fp-ts-svg-path-d/tree/validators

0 投票
1 回答
27 浏览

fp-ts - 具有互斥属性的解码器

使用DecoderAPI,有没有办法定义具有互斥属性的解码器?

以上设置了一种情况,其中bc都可以存在,但都是可选的。相反,我怎么能要求其中一个bc 必须存在,而不是两者都存在?

0 投票
1 回答
262 浏览

typescript - io-ts 解析 Eithers/Validations 数组

我正在尝试解析返回用户数组的 API 响应。我发现即使数组中的一个元素验证失败,整个编解码器也会返回错误。我希望错误留在数组中,这样我就可以有类似Array<Either<E, User>>. 我的 API 的响应看起来像这样

或者

所以这是我的编解码器

现在,如果由于某种原因,我们收到一个电子邮件为 null 的用户,则整个响应都会失败。如果我想列出正确解析的用户并在我的 UI 中仅为错误用户显示错误消息怎么办?显而易见的(天真的?)方法是使所有属性都可以为空,但有更好的方法吗?我还考虑过先返回 a 分两步解析响应,t.array(t.unknown)但我不确定这会是什么样子

0 投票
2 回答
397 浏览

fp-ts - 如何折叠/缩小地图?

我希望能够折叠/缩小地图,就像使用 Array 和 Set 一样。我看到的最接近的是一种叫做getFoldableWithIndex但我不知道如何使用它或让它与 Typescript 一起编译的东西。我觉得烦人的一件事是它需要一个 ORD。也许这是使函数更具确定性所必需的,但排序对于许多折叠/归约任务并不重要,并且会降低性能。我的解决方法是离开 fp-ts,生成一个数组或可迭代的 [key,value] 对,并对其进行简单的缩减以找到年龄最大的人。


刚刚注意到一个更新的未发布版本支持减少。仍然不知道为什么需要 ORD 或如何使用 getFolderableWithIndex 或更新版本何时发布。

https://github.com/gcanti/fp-ts/blob/2.11/src/ReadonlyMap.ts

0 投票
1 回答
197 浏览

fp-ts - FP-TS 等效于 Lodash 或 Ramda `cond`?

试图弄清楚如何使用 fp-ts 对多个案例进行建模。不确定我对这个操作的心智模型是否应该在 fp-ts 中有所不同,是否我找不到合适的功能来使用,或者这样的功能不存在。

作为参考,https ://ramdajs.com/docs/#cond(Lodash中的相同签名+行为)

示例案例是加载/加载状态,或在枚举上拆分案例。例如,

0 投票
1 回答
487 浏览

javascript - 交叉口类型的 io-ts 解码器错误

目前我正在开发一个具有 fp-ts 和 io-ts 堆栈的项目。我正在尝试验证我们从后端获得的所有响应io-ts。我开始知道io-ts没有简单的方法来制作optional. typescript并从这个问题中找到了一种解决方法来制作带有可选字段的对象。

我想创建看起来像这样的类型。

在我们的项目中,我们有这个runDecoder函数来验证响应数据的io-ts类型。它适用于非可选的普通io-ts类型。

但是当它试图验证在类型的帮助下成为可选的类型时,问题就出现了t.intersection。这是带有示例的代码

我得到的错误是

我试图理解错误,但我无法用runDecoder方法弄清楚这里有什么问题。这是Codesandbox链接。任何帮助将不胜感激。

0 投票
0 回答
252 浏览

typescript - 如何使用 fp-ts Reader monad 制作单级管道/流?

我试图理解 fp-ts 中的 reader monad,以便我可以注入其他函数的依赖项。目标是组装一个类似于读者的 Do notation 的单级管道。我的代码有效。类型没有。我不明白为什么。

您能帮我理解获得以下 2 个结果所需的正确键入的语法吗?对解决方案中每个功能的作用进行细分的奖励。阅读源代码会R.bind产生不透明的定义,例如bind_(Chain).

谢谢!

下面的示例工作代码。