问题标签 [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.
scala - 如何在不使用 zip() 的情况下将不同类型的 Future 组合成一个 Future
我想Future[(Class1,Class2,Class3)]
从下面的代码中创建一个 Future 类型。然而,我发现这样做的唯一方法是使用 zip()。我发现解决方案很丑陋,而且不是最佳的。任何人都可以启发我。
我也尝试过使用Future.sequence(List(f0, f1, f2))
,但这不起作用,因为新的 Future 将具有Future[List[U]]
where U
is the lub 的类型,Class1/2/3
而我想要一个保留原始类型的 3 元组
haskell - 记录的应用构造函数
我想为 haskell 记录创建应用构造函数,以便为记录创建解析器。
考虑记录:
我想要的构造函数:
给出了基本类型的解析器:
是否有任何图书馆已经可以做到这一点?是否可以为记录定义 getParser ?提前致谢。
haskell - 'Const' 应用函子有什么用?
我刚刚Const
在 的文档中找到了Control.Applicative
,但我很难弄清楚这在哪里有用,而不是直接使用Monoid
。
我错过了什么?
haskell - 禁用窗体/消化函子中的字段?
使用 formlets/digestive-functors,我试图弄清楚如何在运行时选择性地禁用字段。禁用字段将禁用该字段的显示和验证。
人为的示例:假设我们的基本表单数据类型如下所示:
但deptId
仅当用户是员工时才应显示该company
字段,否则应显示该字段。agree
如果用户尚未单击“同意”框,则应显示该字段。
我不想为每个可能的变体创建不同的表单类型:(favcolor,deptId,agree),(favcolor,deptId),(favcolor,company,agree),(favcolor,company)。我还可以做些什么?
function - 是否可以在 Haskell 中的列表上映射函数元组?
我正在尝试找到一种方法来做这样的事情:
生成元组(1, 3)
作为输出。
它在理论上似乎类似于应用函子,但有点倒退。我猜有一个类似的功能可以做到这一点(或某种方法),但我似乎无法找到它/弄明白。
我尝试定义这样的函数:
但 GHC 实际上不会编译这个。
任何帮助都会很棒;谢谢!
编辑(一年后!):
我fmap'
不会编译,因为类型签名是错误的。显然有更好的方法来做我正在做的事情,但我的类型fmap'
应该是:
在这种情况下,它编译并运行得很好。
haskell - 用作应用函子 (Haskell / LYAH)
Learn You a Haskell的第 11 章介绍了以下定义:
在这里,作者进行了一些不寻常的挥手(“<*> 的实例实现有点神秘,所以最好只是[在实际中展示它而不解释它]”)。我希望这里有人可以帮我弄清楚。
根据应用类定义,(<*>) :: f (a -> b) -> f a -> f b
在本例中,替换((->)r)
为f
:r->(a->b)->(r->a)->(r->b)
所以第一个问题是,我如何从那种类型变为f <*> g = \x -> f x (g x)
?
但即使我认为最后一个公式是理所当然的,我也很难让它与我给 GHCi 的例子一致。例如:
这个表达式反而看起来与f <*> g = \x -> f (g x)
(注意在这个版本x
中没有出现在f
.
我意识到这很混乱,所以感谢您对我的包容。
scala - Scalaz 在错误和成功中都有积累吗?
我开始使用 Scalaz 7 验证和/或析取来处理可能失败的操作列表并管理它们的结果。
这种用例有两个有据可查的案例:
1/您想检查某事的条件列表,并累积每个错误(如果有)。在这里,您总是走到列表的末尾,如果出现任何错误,您将作为全局结果失败。这是一个在工作的应用函子。
2/ 你想执行几个可能失败的步骤,并在第一个失败时停止。在这里,我们有一个在 Scala 中很好理解的 monad。
所以,我还有两个相同的用例,但在任何先例情况下似乎都不太合适:我想处理一个可能失败的步骤列表,并累积错误和成功结果(例如:这是对文件的修改列表,可能会发生错误,因为那是外部世界,成功是我想保留以备后用的补丁)。
这两个用例的区别仅在于我想提前停止(在第一个错误上)或转到列表的末尾。
好的,那么正确的做法是什么?
(写这个问题让我认为这只是一个简单的 foldLeft,是吗?我会让这个问题在这里验证,如果有人想知道)
haskell - 应用重写(Haskell)
当我不了解 Haskell 中的表达式如何工作时,我经常发现将其分解为更基本的形式会有所帮助。
使用以下定义
我改写sequenceA [(+3),(+2)] 3
为
然后把它变成(请原谅格式;我不确定分割线的约定是什么)
(\d ->(\c->(\b -> (\a -> (\_ -> (:)) a (+3) a) b (\_ -> (:)) b) c (+2) c) d (\_ -> []) d) 3
当我手动完成它时,这似乎是正确的,但我无法让 GHCi 接受它。我在这里做错了什么?我的第二个问题是如何从这种形式转换为功能组合。我试过用各种组合替换点,但 GHCi 拒绝所有这些....
haskell - 是否可以为应用函子使用括号语法糖?
在McBride 和 Paterson 的“带效果的应用程序编程”中,他们引入了一些可爱的语法糖来提升纯函数:
为了
我记得有人在其他地方使用li f w x y z il
or il f v w x y z li
,我认为/希望这可能是因为它可以使用一些现有的语言特性和 and 的巧妙定义来li
定义il
。
除了论文之外,我找不到任何对此的参考,并且假设[|
并且|]
不太可能很快出现在 ghc 中,是否有可能以li
某种方式实施il
?我想不出适合他们的类型,所以我假设我需要 Template Haskell 或类似的东西,但我知道的还不够多。[af| f x y ]
会很好,但在我开始尝试之前我不知道这是否可能,如果是的话,当然需要帮助。