问题标签 [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 投票
2 回答
366 浏览

javascript - 将 Fluture Future 转换为民间故事结果

我有以下示例代码来获取 uuid:

结果不是可映射类型,并在我调用时引发错误result.map

0 投票
1 回答
238 浏览

javascript - 民间故事/幻想世界可能没有按预期工作

阅读Frisbys 函数式编程指南,目前在关于Maybe. 在附录中,本书建议使用民间故事幻想世界。

然而,这两个图书馆Maybe似乎都不像书中描述的那样工作。

在从书中复制的这个示例中,第一个语句可以正常工作,但第二个得到一个TypeError. 这似乎完全违背了 的宗旨Maybe。还是我误解了什么?

示例 repl.it

0 投票
1 回答
63 浏览

javascript - 从 data.task 迁移到处理拒绝的民间故事

data.task包中,我可以解决或拒绝 api 调用,如下所示:

我将如何在新folktale版本中实现这一点Task?我可以解决请求,但如何拒绝?我尝试了以下方法:

当我提供一个不存在的文件时,不会调用 onRejected 处理程序。

我希望看到什么: 由于我让程序读取了一个不存在的文件,因此它应该运行 onRejected 并记录something went wrong.

我现在看到了什么: 什么都没有。该程序不会出错,但它也不会产生任何东西,它只是正常运行。

使用data.task(旧版本的任务)时,我可以使用拒绝,这就是它仍然在那里工作的原因。我现在如何使用新版本的 Task 执行此操作?

0 投票
0 回答
223 浏览

javascript - Javascript 中的纯异步任务

结合RamdaFolktale函子

_fetchLists是一个执行异步操作的函数,它接受以下参数:

  1. fetchAlllists: 一个异步函数,使用列表对象数组的Result函子解析
  2. listIds: listIds 数组

    它是列表对象数组的returnsResult函子

    • _fetchLists认为是纯函数吗?
    • fetchAlllists实现返回一个用Result解决的承诺,使用Task仿函数而不是普通的承诺有什么好处吗?
0 投票
1 回答
363 浏览

javascript - 民间故事的未来是为了什么?

背景

我正在阅读每一寸文档,并尽可能多地了解 Folktale。最近,我决定试试Future

我们需要未来吗?

现在,虽然我了解and 之间的区别Taskand (支持取消)但我不清楚and之间的区别。PromiseTaskFutureFuturePromise

为什么我要使用 aFuture而不是 a Promise?我会有什么好处?好吧,你可以说:“这样你实际上有一个单子,而不是单子的抱歉借口”。

这本身就是一个很好的论点,但是......记住我总是需要从 Promise 转换为其他东西(到 future )并且Future's API 几乎相同,我不清楚,因为一个新人,我为什么要关心Future

代码示例

假设我有这个函数,其中request是一个发出请求并返回一些结果的函数。

extractRequestInfo是一个从响应对象中提取数据的函数。如果出现故障,我catch会出错并返回一个包含所有数据、badId 和错误的对象。

鉴于这是一个 HTTP 请求,我知道我不需要 a Task,因为我在这里无法取消。所以我的选择是PromiseFuture

问题

  1. 我将如何Future在此示例中使用?
  2. 既然这可能会失败,我也应该使用Result吗?
0 投票
2 回答
96 浏览

javascript - IO 作为组合链中的第一个

我有兴趣在我的 JavaScript 函数组合中尝试类似 Haskell 的 IO monad。

FolktaleTask似乎与 Haskell 的 IO 相似,因为它是惰性的,因此在技术上是纯粹的。它代表将来可能发生的动作。但我有几个问题。

当所有后面的函数都依赖于组合中初始不纯函数的返回值时,如何形成函数组合?必须首先运行实际的任务,将返回的数据隐式传递给更远的函数。一个人不能只是传递一个未解决的任务来做任何有用的事情,或者可以吗?它看起来像。

我可能遗漏了一些关键的东西,但这样做有什么好处?

一个相关的问题是对不纯函数的惰性求值有什么具体优势?当然,它提供了引用透明性,但理解问题的核心是不纯函数返回的数据结构。后面所有通过管道传输数据的函数都依赖于数据。那么不纯函数的引用透明性对我们有什么好处呢?

编辑:所以在查看了一些答案之后,我能够通过链接轻松地编写任务,但我更喜欢使用 compose 函数的人体工程学。这行得通,但我想知道它是否对函数式程序员来说是惯用的:

然后,另一个可能与风格更相关的问题是,现在我们必须编写所有处理任务的函数,这似乎不如那些处理数组/对象的函数那么优雅和通用。

0 投票
2 回答
264 浏览

javascript - 如何将对象的属性应用于函数?

我想对某些对象属性应用不同的功能。假设我有这个对象:

我有一些我想应用于这些属性的功能:

这应该是结果:

使用函数式编程和无点实现这一目标的最佳方法是什么,如果您可以包含使用 Ramda 的示例,我将不胜感激,谢谢!

0 投票
1 回答
248 浏览

javascript - 如何从 Crocks javascript 库中的 Monad 中提取值

我知道 monad 通常不想解开底层价值,因为它可能存在也可能不存在。在我的用例中,我想使用函数式编程技术,将 ramda 用于函数库,将 Crocks 用于代数数据结构库,以在功能不完整的代码库中编写代码。我通常会使用 Either、IO 和 Maybe monad 来编写我的代码,然后从结果 monad 中提取最终结果,这样我就可以将值返回给尚未接受 monad 的函数。

Folktale 有一个叫做getOrElse返回值或未定义/错误字符串的东西。这非常有用,允许我在不期望处理 monad 的环境中进行函数式编写。Crocks 是否有类似的东西,或者是否有其他方法可以解开 Either、IO 或 Maybe?

我想在 Crocks 中复制的民间故事示例:

0 投票
0 回答
98 浏览

javascript - 民间故事:结合结果和任务(或只是承诺)

这是一口损坏的代码:

这个想法是从上下文中获取一些值,发出请求并返回带有补充数据的上下文。但它返回一个处于待处理状态的 Promise。我做错了什么?