问题标签 [folktale]

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 投票
3 回答
1613 浏览

javascript - 在 Javascript 中映射一组任务

所以我开始研究 Ramda / Folktale。我在尝试映射来自目录的一组任务时遇到问题。我正在尝试解析文件内容。

我正在读取目录中的文件并返回一个任务。当这个问题解决时,它应该进入 readFile 函数(它返回一个新任务)。一旦它读取文件,我希望它只解析其中的一些位。

具有以下内容:

它进入了 readFile 函数,但 'file' 是一个文件数组,所以它会出错。

和:

我们从来没有进入 fs.readfile(),但 'file' 是实际的文件名。

我对此感到非常困惑,文档令人困惑。欢迎任何建议。

谢谢

0 投票
1 回答
1404 浏览

javascript - 民间故事有 IO 单子吗?

我一直在探索民间故事图书馆,发现了许多有用的结构。通过control.asyncdata.task使用任务后,我想使用 IO monad,但似乎找不到它。鉴于民间故事有多么丰富,我很惊讶,想知道我是否只是没有看到它。

民间故事中有 IO 单子吗?

0 投票
0 回答
230 浏览

functional-programming - 处理不同级别任务的分叉

我真的坚持在 Ramda 中处理不同级别的任务。我正在尝试构建一个脚本来解析 LESS 文件以获取评论,并从评论中的数据和示例文件中的内联 HTML 构建模式库站点。除了内联示例文件内容外,一切正常(在 SO 的帮助下)。

我可以浏览、阅读目录、打开文件(返回一个新任务)并从评论中提取模板路径。然后我在路径上运行(我认为)parseFile(它返回一个任务),这就是它失败的地方。我正在努力获取示例模板任务分叉,以便我可以使用内容。

我对任何建议持开放态度,但怀疑问题出R.map(writeTemplate, data)在最初的成功分支中,但我现在有点超出我的深度。

0 投票
2 回答
274 浏览

javascript - 使用 Either 并立即返回错误

我有一个函数,它返回一个 Either 实例,其中左侧表示异常/错误,而第二侧存储返回值。

如果 Either 实例已被实例化到 Error 分支,我想立即返回。如果该实例已被 Right 实例化,我想将其包装在 Maybe 中并继续(因为它作为 Maybe 进入函数,并且仅在它为 Nothing 时才被查找)。

这是根据我的测试用例工作的:

  1. isNothing 传入 :: 查找错误
  2. isNothing 传入 :: 查找成功
  3. isJust(22) 被传入(查找不执行)

代码感觉不错,但我不怀疑我可能会错过 Folktale data.either 库的一些细节。

我将 ES6(节点 4.1)与 Folktale 结合起来:data.either 和 data.maybe。我的目标是真正提高我对如何以这种风格正确写作的理解


更新问题有点复杂我背靠背独立查找,我觉得可以链接在一起:

它的背靠背事件使代码超级难看......

0 投票
2 回答
307 浏览

javascript - 将包含单个数据数组的任务链接(或映射)到任务数组

学习 Fanatasy Land/Folk Tale 的一部分使我创建了一些代码。我基本上是在扫描我的网络(通过 someLib)并将结果上传到 mongo 存储库。扫描返回一系列结果,而 mongo 的 upsert 需要独立处理结果(猫鼬 - 这也是我第一次使用这个库,所以我可能会误会)。在传统的承诺基础模型中,我会

就其本身而言,这是一个非常干净的表示,但我想推动我对这些功能技术的理解。我的工作版本还有一些不足之处,因为我似乎无法从 someLibTask 函数返回的任务中得到,该函数包含一个对象数组到一个代表各个 upsert 的任务数组。我觉得这里必须有更好的方法是有效的:

理想情况下,我可以将 dataTask 中的结果链接(或映射)到持久化中,这会将单个任务转换为一组 upsert 任务。然后我可以等待。我很想看到类似的东西:

0 投票
1 回答
318 浏览

javascript - `Either` 类型可以转换为 `Task` 类型吗?

如果我有一个Task具有Either err b正确(成功)值的值,我该如何组合/合并/转换它们,以便成功值可以直接在 中使用.fork(),而不是包含在 中Either

0 投票
1 回答
146 浏览

javascript - λ:folktale data.task - 应用未知数量的任务

我想将 id 的列表转换为 的列表Tasks,并同时运行它们,类似于Promise.all. 我知道应用程序,但我想应用未知数量的任务,所以我认为这不是最好的方法。

假设我有一个Task包含Task's 的数组。

有没有办法将任务折叠成一个单独的任务来运行它们,或者有更好的方法来处理数据转换。

data.Task如果您想提供示例,您可以复制该片段。

http://folktalegithubio.readthedocs.io/en/latest/api/data/task/

0 投票
1 回答
224 浏览

functional-programming - 普通对象中的 Immutablejs - Monads

redux 最佳实践表明不要将纯 javascript 对象与 immutablejs 对象混合。我正在尝试函数式编程,似乎单子需要将计算/值存储在对象或某种容器中。AFAIK immutablejs 地图无法存储方法。使用像 Folktale 这样的 FP 库有什么问题吗?我没有注意到基本的 todo 应用程序有任何明显的问题(这是我目前可以尝试的全部),所以我希望对 immutablejs 最佳实践进行一些澄清,希望 FP 倾斜。

永远不要将纯 JavaScript 对象与 Immutable.JS 混合

0 投票
1 回答
472 浏览

javascript - 通过使用带有folktale2的函数式编程javascript,如何优雅地访问先前任务的结果?

一个任务有几个步骤,如果每个步骤的输入只是直接来自最后一步,那很容易。然而,更多的时候,一些步骤不仅仅依赖于直接的最后一步。

我可以通过多种方式解决,但最终都会得到丑陋的嵌套代码,我希望任何人都可以帮助我找到更好的方法。

我创建了以下类似登录的示例来演示,该过程分为以下 3 个步骤:

  1. 获取数据库连接 (() -> 任务连接)
  2. 查找帐户(连接 -> 任务帐户)
  3. 创建令牌(连接 -> accountId -> 任务令牌)

#step3 不仅取决于步骤#2,还取决于步骤#1。

下面是使用folktale2的笑话单元测试

  • 尝试#1 是对的,但我必须将非常早的步骤的输出传递到需要它的步骤,如果它跨越许多步骤,那很烦人。

  • 尝试#2 也是正确的,但以嵌套代码告终。

  • 我喜欢尝试#3,它使用一些变量来保存值,但不幸的是,它不起作用。

Update-1 我认为另一种方法可以将所有输出置于将通过的状态,但它可能非常相似的尝试#1

update-2 通过使用@Scott 的do方法,我对以下方法非常满意。它又短又干净。

0 投票
1 回答
127 浏览

javascript - Folktale 的嵌套验证

我一直在一个新项目中使用FolktaleValidation并且我发现它非常有用,但是我遇到了需要顺序验证的问题。我有一个配置对象,我需要执行以下验证:

  • 是一个对象吗?
  • 对象的密钥是否有效(它们是否出现在白名单中)?
  • 键的值是否有效?

每个验证都依赖于先前的验证 - 如果项目不是对象,验证其键是没有意义的(并且会出错),如果对象没有键,验证它们的值是没有意义的。实际上,如果验证失败,我想短路验证。

我最初的想法是使用Result而不是在其他地方定义和使用的 Validatio , but mixing the two types feels confusing, and I already havevalidateIsObject`。

我目前(工作但丑陋)的解决方案在这里:

我最初采用了使用嵌套matchWiths 的方法,但这更难阅读。

我该如何改进这个解决方案?