问题标签 [applicative]

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 投票
4 回答
8472 浏览

scala - 如何在不使用 zip() 的情况下将不同类型的 Future 组合成一个 Future

我想Future[(Class1,Class2,Class3)]从下面的代码中创建一个 Future 类型。然而,我发现这样做的唯一方法是使用 zip()。我发现解决方案很丑陋,而且不是最佳的。任何人都可以启发我。

我也尝试过使用Future.sequence(List(f0, f1, f2)),但这不起作用,因为新的 Future 将具有Future[List[U]]where Uis the lub 的类型,Class1/2/3而我想要一个保留原始类型的 3 元组

0 投票
2 回答
1379 浏览

haskell - 记录的应用构造函数

我想为 haskell 记录创建应用构造函数,以便为记录创建解析器。

考虑记录:

我想要的构造函数:

给出了基本类型的解析器:

是否有任何图书馆已经可以做到这一点?是否可以为记录定义 getParser ?提前致谢。

0 投票
4 回答
365 浏览

scala - 如何在 Scala 中编写此配置逻辑?

这是我之前的问题的后续

假设我使用以下逻辑(在准 Java 中)来获取配置参数MyParam

如何在 Scala 中编写此逻辑?在这里适用吗Applicative

0 投票
4 回答
3010 浏览

haskell - 'Const' 应用函子有什么用?

我刚刚Const在 的文档中找到了Control.Applicative,但我很难弄清楚这在哪里有用,而不是直接使用Monoid

我错过了什么?

0 投票
1 回答
120 浏览

haskell - 禁用窗体/消化函子中的字段?

使用 formlets/digestive-functors,我试图弄清楚如何在运行时选择性地禁用字段。禁用字段将禁用该字段的显示和验证。

人为的示例:假设我们的基本表单数据类型如下所示:

deptId仅当用户是员工时才应显示该company字段,否则应显示该字段。agree如果用户尚未单击“同意”框,则应显示该字段。

我不想为每个可能的变体创建不同的表单类型:(favcolor,deptId,agree),(favcolor,deptId),(favcolor,company,agree),(favcolor,company)。我还可以做些什么?

0 投票
4 回答
807 浏览

function - 是否可以在 Haskell 中的列表上映射函数元组?

我正在尝试找到一种方法来做这样的事情:

生成元组(1, 3)作为输出。

它在理论上似乎类似于应用函子,但有点倒退。我猜有一个类似的功能可以做到这一点(或某种方法),但我似乎无法找到它/弄明白。

我尝试定义这样的函数:

但 GHC 实际上不会编译这个。

任何帮助都会很棒;谢谢!

编辑(一年后!):

fmap'不会编译,因为类型签名是错误的。显然有更好的方法来做我正在做的事情,但我的类型fmap'应该是:

在这种情况下,它编译并运行得很好。

0 投票
4 回答
5181 浏览

haskell - 用作应用函子 (Haskell / LYAH)

Learn You a Haskell的第 11 章介绍了以下定义:

在这里,作者进行了一些不寻常的挥手(“<*> 的实例实现有点神秘,所以最好只是[在实际中展示它而不解释它]”)。我希望这里有人可以帮我弄清楚。

根据应用类定义,(<*>) :: f (a -> b) -> f a -> f b

在本例中,替换((->)r)fr->(a->b)->(r->a)->(r->b)

所以第一个问题是,我如何从那种类型变为f <*> g = \x -> f x (g x)

但即使我认为最后一个公式是理所当然的,我也很难让它与我给 GHCi 的例子一致。例如:

这个表达式反而看起来与f <*> g = \x -> f (g x)(注意在这个版本x中没有出现在f.

我意识到这很混乱,所以感谢您对我的包容。

0 投票
4 回答
1362 浏览

scala - Scalaz 在错误和成功中都有积累吗?

我开始使用 Scalaz 7 验证和/或析取来处理可能失败的操作列表并管理它们的结果。

这种用例有两个有据可查的案例:

1/您想检查某事的条件列表,并累积每个错误(如果有)。在这里,您总是走到列表的末尾,如果出现任何错误,您将作为全局结果失败。这是一个在工作的应用函子。

2/ 你想执行几个可能失败的步骤,并在第一个失败时停止。在这里,我们有一个在 Scala 中很好理解的 monad。

所以,我还有两个相同的用例,但在任何先例情况下似乎都不太合适:我想处理一个可能失败的步骤列表,并累积错误和成功结果(例如:这是对文件的修改列表,可能会发生错误,因为那是外部世界,成功是我想保留以备后用的补丁)。

这两个用例的区别仅在于我想提前停止(在第一个错误上)或转到列表的末尾。

好的,那么正确的做法是什么?

(写这个问题让我认为这只是一个简单的 foldLeft,是吗?我会让这个问题在这里验证,如果有人想知道)

0 投票
3 回答
291 浏览

haskell - 应用重写(Haskell)

当我不了解 Haskell 中的表达式如何工作时,我经常发现将其分解为更基本的形式会有所帮助。

使用以下定义

我改写sequenceA [(+3),(+2)] 3

然后把它变成(请原谅格式;我不确定分割线的约定是什么)

(\d ->(\c->(\b -> (\a -> (\_ -> (:)) a (+3) a) b (\_ -> (:)) b) c (+2) c) d (\_ -> []) d) 3

当我手动完成它时,这似乎是正确的,但我无法让 GHCi 接受它。我在这里做错了什么?我的第二个问题是如何从这种形式转换为功能组合。我试过用各种组合替换点,但 GHCi 拒绝所有这些....

0 投票
3 回答
976 浏览

haskell - 是否可以为应用函子使用括号语法糖?

McBride 和 Paterson 的“带效果的应用程序编程”中,他们引入了一些可爱的语法糖来提升纯函数:

为了

我记得有人在其他地方使用li f w x y z ilor il f v w x y z li,我认为/希望这可能是因为它可以使用一些现有的语言特性和 and 的巧妙定义来li定义il

除了论文之外,我找不到任何对此的参考,并且假设[|并且|]不太可能很快出现在 ghc 中,是否有可能以li某种方式实施il?我想不出适合他们的类型,所以我假设我需要 Template Haskell 或类似的东西,但我知道的还不够多。[af| f x y ]会很好,但在我开始尝试之前我不知道这是否可能,如果是的话,当然需要帮助。