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

typescript - fp-ts/typescript 避免嵌套管道

在打字稿中使用 fp-ts 时如何避免嵌套管道?做记号?这是我要避免的嵌套管道示例

0 投票
0 回答
87 浏览

typescript - 当第二个函数返回第一个函数的值和第一个函数的参数时,两个函数的无点组合

假设我正在编写一个函数来进行 HTTP 调用以获取数据。我已将 API 调用分解为我编写的更小的函数:

使用flow我已经设法最小化定义输入参数的频率。它只是一个地方,在buildPayload,我没有任何隐含的any论点)。如果出现新需求,这使得更改参数变得容易:更新一个地方,更改会在其余代码中级联。我认为这被称为“无点编程”。

当每一步都依赖于前一步而不依赖于其他步骤时,这很容易。但是假设流程中const foo = (a:A)=>B的第一步是,第二步是const bar = (a:A,b:B)=>C这样,第一步取决于第一步的结果,但也需要与第一步相同的参数。

我怎样才能做到这一点并且仍然是免费的(假设我正确使用了该术语)?

flow(foo, bar)不起作用,因为 thenbar需要接受的返回值foo作为其参数。

我可以将它们定义为foo = (a:A) => ...然后bar = (a:A, b:B) => ...

但现在我必须(inputs:A)在三个地方定义:foobarapiCall. 如果我更改参数,我必须更新三个不同的函数参数列表。

0 投票
0 回答
190 浏览

typescript - 两个功能“组合”(非组合)的无点样式

我在 TypeScript 中执行此操作,但可以使用具有 FP 能力的另一种语言进行响应。

说我有const foo = (a:A) => Mconst bar = (b:B) => N。我想“并行”运行这些函数(不必是实际的并行 IO,但它们不相互依赖),而是通过以无点方式定义“组合”。

如果它们实际上是可组合的(比如a返回B而不是M),我可以写

相反,我想要某种方式将它们组合起来(让我们称之为 this magicCompose),这样我的无点风格就会产生

这是一种可能吗?

fp-ts在 TypeScript 中使用,我sequenceT可以将它们视为读者并像这样组合它们

但是,如果使用不同的参数,这是无效foobar。我可以使用local: (E => R) => (Reader<E, any>) => Reader<R, any>,但是我必须断点来写

这是有效({a:A,b:B}) => [M,N]的,但不幸的是它不是无点的。如果我要制造像_a = Lens.fromProp<{a:A,b:B}>()('a')然后_b = Lens.fromProp<{a:A,b:B}>()('b')

但这似乎是为了获得免费积分而作弊。

0 投票
1 回答
348 浏览

typescript - 在 TaskEithers 数组中获取第一个成功的值

我对函数式编程比较陌生,对fp-ts也很陌生,所以我很难理解提供的 util 函数。我目前正在尝试弄清楚如何将TaskEithers 作为数组中的后备处理。

我有一个函数来获取一些数据id,它返回ErrorSuccess

我想要的是一个函数,它将遍历一些ids 数组(例如[1, 2, 3, 4]),为每个数组请求数据。TaskEither它应该在成功并返回的第一个停止Right<Success>。如果所有的TaskEithers 都失败了,它应该将它们的错误收集到一个Left<Error[]>.

我尝试了类似的方法,但有一些明显的问题(如下所述):

这种方法的问题

  1. getData在所有 ID 上运行,第一次成功时不会短路
  2. 如果有任何getDatas 错误,它就会出错。所以如果有错误,即使成功getData(4)了总体也会出错programgetData(1)
  3. 它不会将错误收集到一个数组中Error[]
0 投票
0 回答
162 浏览

typescript - 如何在服务器上使用 fp-ts 验证用户?

我是函数式编程的新手,所以很多事情对我来说仍然不清楚。我正在尝试使用 fp-ts 编写我的 graphql 服务器,但我遇到了用户授权问题。我期待这样的授权:验证用户数据->检查他是否存在->加密他的密码->创建用户。所以这在类型中看起来像: Either<string, data> -> TaskEither<string, User> -> Either<string, data> -> TaskEither<string, User> 我不知道真正的谁正确链接它而不会出现类型错误,并且如果已经获得 Left(string),则可以忽略管道中的项目。

这是我的数据库代码:

这是我的验证码:

0 投票
2 回答
2204 浏览

typescript - 具有未知键的属性的 Io-ts 接口

我正在尝试创建以下的 io-ts 接口

我的界面.ts

我想把它变成 io-ts 等价物。最终目标是将其与另一个现有的 io-ts 接口结合起来

我的其他interface.ts

我的想法是我需要一个类型来表示一个有效负载,该有效负载将包含一些我们需要且必须有效的字段,以及一些我们不知道且可以是可选的字段。我们希望将这些组合起来,以便稍后在处理中使用,最终存储在 dynamodb 中

0 投票
1 回答
634 浏览

fp-ts - fp-ts 从 Either[] 序列中返回所有左值

我有一个字符串列表,string[]

我映射了一个返回的验证函数Either<Error, string>[]

我想要[Error[], string[]],所有验证错误和所有验证字符串。

可以sequence(Either.Applicative)traverse(Either.Applicative)返回所有遇到的错误吗?我只收到了Either<Error, string[]>,只是返回了第一个错误。我是否需要编写我自己的 Applicative,一个包含左右合并的 Semigroup 的东西?

我可以通过更改map为.reducefold

我还想过反转验证,然后运行两次。一个函数返回有效字符串,一个函数返回错误。

0 投票
1 回答
350 浏览

fp-ts - fp-ts:过滤掉某些左边的值,右边的错误

我想忽略使用 fp-ts 的某些错误(如果它们发生,则表示一切顺利,即在注册过程中缺少帐户)。

我有以下代码:

lookupAccountByEmail函数将返回一个帐户,或者将返回一个错误对象。如果返回一个帐户,我需要返回一个带有代码“帐户存在”的错误。如果返回代码为“account-not-found”的错误对象,我希望一切都继续进行,就好像没有问题一样。如果返回带有任何其他代码的错误对象,它应该仍然是错误的。

在 fp-ts 中处理这个问题的最佳方法是什么?

0 投票
2 回答
825 浏览

typescript - TypeScript 通用运行时类型检查

运行时数据是否可以指定运行时类型检查的类型?希望使用 io-ts?

一个switch语句创建多个位置来添加新类型。查找对象属性,例如types[runtime.type]创建编译时类型检查错误。值可能是未定义的。

运行时数据:

类型:

检查类型后,我还想在通用实现中使用数据:

0 投票
3 回答
100 浏览

fp-ts - 添加两个包裹在 Option Monad 中的值

如果我有两个包含数字的 Option monad,如何在不退出 monad 的情况下将它们相加?

谢谢 :-)