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

typescript - 不知何故最终得到了一个承诺> 而不是 TaskEither

我对 FP-TS(或一般的函数式编程)还不是很满意,所以我可能在这里做错了一些事情。

我有以下函数,我想返回 aTaskEither<Errors, Job>但我似乎无法让它工作。

这个返回Promise<Either<Errors, Job>>

再次尝试(仅更改了最后一个管道,添加map)我确实返回TaskEither<Error, TaskEither<Errors, Job>>

对于之后的第二个,flatten在地图之后添加一个似乎也不起作用。

0 投票
2 回答
458 浏览

typescript - fp-ts:如何将嵌套的`Either`/`TaskEither`“拉起”到外部类型?

我正在学习一些fp-ts。要创建我遇到的问题的程式化版本,假设我想创建一个不存在的表,所以我必须查询数据库:一个容易出错的异步操作。如果该表不存在,我想创建它:另一个容易出错的异步操作。进一步假设错误类型都是字符串(尽管我也想知道如何在需要时创建联合错误类型),并且成功创建时返回的值是数字 ID。

简而言之,看看表是否存在,如果不存在,就创建它——在整个过程中都有可能出错。关键是我希望这两个错误都反映在最外面的类型中: a TaskEither<string, Option<number>>。问题是我不确定如何避免获得TaskEither<string, Option<TaskEither<string, number>>>. 也就是说,我不知道将错误拉入内部Option并将其合并为最外层错误的最佳方法。

(也许这涉及序列或可遍历?我仍在学习这些。)

关于一些代码:

0 投票
1 回答
108 浏览

typescript - RxJs mergeMap 中的 Reader monad

我正在使用rxjs并希望使用包中的Readermonadfp-ts作为依赖注入解决方案。

这是我的代码:

fn1函数具有使用Readermonad注入的依赖项

问题是当我在 amergeMap中使用此函数时,返回值是 aReaderObservable而不是 anObservable并导致错误。

我怎样才能ReaderObservable在里面使用mergeMap

0 投票
1 回答
116 浏览

typescript - 将 Option monad 合并到 IOEither 中?

当我遇到障碍时,我正试图在fp-tslocalStorage中编写一个包装器。我想处理值以及抛出的异常,所以我从这段代码开始:nulllocalStorage

上面的函数有一个返回签名IOEither<Error, Option<string>>。我想将 合并Option到 中IOEither,即得到一个IOEither<Error, string>. 我将如何实现这一目标?

PS 我想上述问题在TaskEither<Error, Option<string>>.

0 投票
1 回答
848 浏览

typescript - fp-ts - 不推荐使用管道

"fp-ts": "^2.10.5"在我的 typescript/react 项目中使用,我收到警告说“管道”已被弃用。下面的代码来自教程关于使用 fp-ts 进行错误处理和验证:

记录此弃用的变更日志指出:

弃用可管道模块,改用特定的帮助器

什么是“特定助手”?我该如何解决这个警告?

0 投票
1 回答
607 浏览

typescript - 什么是 fp-ts 谓词?

我正在尝试使用 fp-ts 实现一些简单的数据验证,并遇到了这个代码框示例

是什么Predicate?在这个例子中使用它有什么作用?我在文档中没有看到任何关于它的作用的解释,只是它是API 的一部分,并且它似乎修改了提供的接口。

0 投票
1 回答
405 浏览

typescript - 如何在 fp-ts 中将一个参数分派给多个函数

我有以下代码

上面的函数getPostData()retun

现在我必须在返回的结果中添加一些文件,比如说content,结果看起来像

我写了一个新函数getContent = (matter: matter.GrayMatterFile<string>) => {...},现在如何将这个函数添加到组合函数中getPostData

我想问的主要问题是如何将值划分为不同的函数以在组合函数中进行处理。

因为里面的getFileContents函数chain(getFileContents)需要读取文件,所以我不想读取这个文件两次

0 投票
1 回答
80 浏览

typescript - 如何使用 monoid concat 生成列表?

我从事函数式编程已经有一段时间了,但我对幺半群和其他纯抽象还是陌生的。我想知道是否有一种方法可以通过使用concat为 monoid 定义的函数来生成值列表?

例如,以 0 作为单位(单位)和+作为concat,整数成为一个幺半群。如果我想要一个有序整数序列,我可以应用+到我需要的第一个整数和1(这将是这里的一个步骤),然后对结果重复该过程,依此类推。这将生成一个类似的列表[1, 2, 3, 4, 5, ...]

类似地,对于更复杂的 monoid,如果定义了 Event monoid,具有特殊值作为标识,并且concat它需要两个事件并产生一个保持相同间隔的新事件,我可以有一个序列[ Event(Today, 12:00), Event(Today, 12:10), Event(Today, 12:20) ](所以间隔是 10 分钟)。

我的问题是:是否有任何标准模式/抽象/通过应用于concat上一个项目和步骤/间隔来生成此类序列的方式?我正在使用fp-ts图书馆,我试图找到可以做到的东西,但没有任何运气。我可以unfold用来生成一个值数组,但是这个函数只将一个值传递给回调,而我需要两个值concat才能工作

0 投票
1 回答
250 浏览

fp-ts - 弃用 getFoldableComposition、option、array 等后的重构

去年我花了一些时间尝试学习 fp-ts。我终于开始在一个项目中使用它,由于最近的重构,我的很多示例代码都被破坏了。我已经修复了一些破损,但正在与其他破损作斗争。毫无疑问,它突出了我的 FP 知识中的一个巨大的整体!

我有这个:

getFoldableComposition、option 和 array 现在已弃用。getFoldableComposition 上的评论说要使用 reduce、foldMap 或 reduceRight,所以,除此之外,我尝试了这个。

那甚至都没有编译,所以显然我离基地很远。

有人可以告诉我正确的替换方法吗?getFoldableComposition在我们讨论的时候,解释一下“使用小而具体的实例”是什么option意思array?另外,还有什么我显然做错了吗?

谢谢!

0 投票
1 回答
97 浏览

typescript - 如何正确输入 fp-ts ObservableEither#fold?

我正在尝试使用 fp-ts 和 redux-observable 来构建一些处理一些 api 请求的史诗。我遇到了fp-ts-rxjs/ObservableEither#fold的问题,如果我不将我的操作转换为类型AnyAction,我会收到一个类型错误,指出这两种类型应该是相同的。

我也尝试过使用fp-ts-rxjs/ObservableEither#bimap因为它期望返回两种不同的类型。但是,这会导致运行时错误,指出操作不能具有未定义的类型。我也不确定那里到底发生了什么。

LoginSlice.ts

LoginService.ts

LoginEpics.ts

有没有办法避免将动作转换成AnyAction? 任何见解将不胜感激。