问题标签 [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.
typescript - 来自 fp-ts 和 URI 的打字稿中的更高种类的类型
在 fp-ts 中,他们为更高种类的类型提供了这种解决方法:
它可以像这样使用:
什么是成员_URI
,什么是_A
?
typescript - Maybe monad 的另一个名字是什么?
我知道在 FP 中,有时会用多个术语来表示一件事。因此,当我开始学习 fp-ts API ( https://github.com/gcanti/fp-ts/blob/master/docs/index.md ) 时,我找不到 Maybe monad。所以也许它还有另一个名字?
typescript - 我想发明的 FP 的轮子叫什么名字?(见代码)
所需的最终打字稿代码是:
到目前为止我已经写了下面的代码,我感觉我在发明轮子,即这样的东西必须已经在FP中实现了,但我不知道它是如何调用的。谁能告诉可以使用https://gcanti.github.io/fp-ts/中的哪个工具?
javascript - 函数式编程中的nodejs createReadStream
我想听听您对TaskEither
使用fp-ts或其他函数式编程库进行学习的反馈:
- 我
Promise
在处理nodejs流时使用aPromise
,以这种方式使用a是一个好的解决方案吗?最直接的选择是什么? - 我正在使用
.run().then(...)
,.fold
您知道使用我的功能的更简洁的方法吗? - 相同的代码可以在
Either
没有 ? 的情况下重写Promise
?你能给我一个样品吗?
typescript - 使用 TypeScript 和 fp-ts 进行类型建模以及使用 Either 时出现错误
我正在尝试使用 TypeScript 并尝试使用fp-ts
类型对域逻辑进行建模,但我遇到了这个问题:
编译器对我大喊大叫,因为:
Type '(t: MyType) => Either<Error, { id: string; isValid: boolean; }>' is not assignable to type 'Either<Error, CreateMyValidType>'.
如果我删除Either
并且我只返回 sum 类型Error | MyValidType
就可以了。
它在里面时似乎无法识别正确的类型Either
!
我找到了通过指定right
调用时的类型来避免问题的方法,但我不完全理解其中的含义,所以我不知道这是否是一个坏主意:
处理此问题并使其编译的正确方法是什么?谢谢!
typescript - 如何避免 fp-ts 中的嵌套 Monad 或优雅地处理它们?
我有一系列代码需要经过以下步骤(伪代码):
如果我将这些步骤映射/链接在一起,我最终会得到一个TaskEither<IError, Either<IError, TaskEither<IError, IOpenJob>>>
显然有点尴尬的类型。
我目前将所有这些扁平化为简单TaskEither<IError, IJobOpenedEvent>
类型的解决方案如下所示(真实代码):
我的问题是 - 有没有更好的方法来处理这种嵌套?我觉得我做错了,因为我是函数式编程的新手并且不了解所有理论。拥有所有嵌套flatten(taskEither)
调用并将 anEither
转换为TaskEither
withfromEither
对我来说似乎很糟糕。
任何帮助深表感谢!
typescript - 使用 fp-ts 重写一个用记录器包装的小函数
我想尝试使用 fp-ts 重写我的代码的某些部分,并考虑重构以下方法:
在阅读了有关IO
副作用的类型后,我尝试按如下方式使用它:
在最后一个链调用中随意使用map方法来管道通过apiServer对象只是为了在接收它和进一步发送它之间登录,感觉很奇怪。我想知道这是否正确或者是否有任何不同的模式。
concurrency - 如何在 fp-ts 中限制并发
我们的团队开始学习 fp-ts,我们从一些基本的异步示例开始(大部分来自这里)。依次运行一组Task就很棒了,看起来array.sequence(task)(tasks)
问题来了,在fp-ts中执行并行Task时,限制并发的惯用方式是什么?例如,Promise.map(在 bluebird 中)允许您设置并发限制,例如{concurrency: 4}
.
一种解决方案可能是将数组拆分为块,然后使用序列和 flatMap 迭代这些块。但是,这意味着每个块中的每个任务都必须在移动到下一个块之前完成 - 一个长时间运行的任务可能会阻止整个操作。
一定有一些我们缺少的抽象——我们都是 FP 的新手,所以希望这里有更多经验的人可以提供帮助。
typescript - FP-TS 中的任务、提升和复杂单子
我有以下代码:
1) savePerson 函数没有运行,但是返回类型是 Promise
2) Fp-Ts 库表明不推荐使用 liftA2 类型,我应该改用 sequenceT。然而,从签名中不清楚 sequenceT 将如何应用于 buildPerson 的参数,如 liftA2
3)有没有更好的方法来组合功能?