问题标签 [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 - 应用函子如何与并行算法联系起来?(斯卡拉和斯卡拉兹)
来自 Josh Suereth 的“Scala in Depth”:
“应用函子提供了一种方法来进行两个计算并使用函数将它们连接在一起。Traversable 示例强调了如何将两个集合并行化成对。应用函子和并行处理就像面包和黄油一样结合在一起。”
我对整个 functors/monads/applicative 的东西有一个模糊的概念,但对它的掌握并不完全(对整个 monad、functor 的东西来说都是新手)。我对单子(flatten,flatMap)和单子工作流程以及仿函数(地图)的概念有所了解。
任何人都可以详细说明它是如何完成的、示例和/或它与“传统”并行化相比的好处吗?
haskell - Haskell 应用变压器的例子
www.haskell.org 上的 wiki 告诉我们以下有关 Applicative Transformers 的信息:
那么应用变压器在哪里呢?答案是,我们不需要针对应用函子的特殊转换器,因为它们可以以通用方式组合。 http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfomers
我尝试了以下方法来尝试组合一堆应用函子。但我得到的只是一堆错误。这是代码:
这会产生很多类型错误,虽然我可以部分理解,但我根本无法解决它们。
错误在最后给出。
那么,例如,我如何结合 Maybe Applicative 和 List Applicative 呢?
例如,如何将 State Applicative 和 List Applicative 结合起来?还有其他例子吗,比如说,结合了 Maybe 和 List,Maybe 和 State,最后是可怕的 IO 和 State 应用程序?
谢谢。
GHCi 错误消息如下。
haskell - haskell 实例的适用法律证明
我们通过 Haskell 平台获得的 Applicative 类型类的所有 Haskell 实例是否已被证明满足所有 Applicative 定律?如果是,我们在哪里可以找到这些证据?
Control.Applicative的源代码似乎不包含任何证据证明适用于各种情况的法律确实成立。它只是提到
然后它只是在评论中说明法律。
对于其他类型类(Alternative 和 Monad)的实例,我也发现了类似的情况。
这些图书馆的用户是否应该自己验证这些法律?
但我想知道这些法律的严格证明是否已经由开发商在其他地方给出?
同样,我知道对于 IO Monad 的应用(或 Monad)定律的严格证明,一般来说,它涉及与外部世界的对话,可能非常复杂。
谢谢。
haskell - 中缀运算符的应用风格?
有没有办法在处理中缀运算符时进行应用性使用<$>
并看起来不错?<*>
我觉得
然后看起来更混乱
所以我想知道是否有更好的方法。
haskell - Parsec 和 Applicative 风格
有人可以帮助我了解如何使用 Applicative 样式来编写 Parsec 解析器吗?这是我的代码:
但是当我尝试编译它时,我得到以下信息:
这个想法是我希望 cmdParse2 做与 cmdParse 相同的事情,但是使用应用程序......我的方法可能完全错误,我是 haskell 的新手
haskell - 什么是 Monad 的一个例子,它是一个 Alternative 但不是 MonadPlus?
Edward Kmett在回答“类型类、和? 之间的区别”</a> 问题时说MonadPlus
Alternative
Monoid
此外,即使
Applicative
是 的超类Monad
,你最终还是需要这个MonadPlus
类,因为服从不足以证明
因此,声称某物是 a
MonadPlus
比声称它是 强Alternative
。
很明显,任何不是monad 的 applicative functor 都会自动成为 an which is not a的一个例子,但 Edward Kmett 的回答暗示存在一个monad,它是 an但不是 a :它并且会满足定律,1但不是法律。2 我自己想不出这样的例子;有人知道吗?Alternative
MonadPlus
Alternative
MonadPlus
empty
<|>
Alternative
MonadPlus
1我无法找到一组Alternative
法律的规范参考,但我列出了我认为它们大约是我对“类型类的含义及其与其他类型的关系感到困惑”问题的答案的一半类”</a>(搜索短语“右分布”)。我认为应该遵守的四项法则是:Alternative
- (的)右分配
<*>
:(f <|> g) <*> a = (f <*> a) <|> (g <*> a)
- 右吸收(对于
<*>
):empty <*> a = empty
- 左分布(的
fmap
):f <$> (a <|> b) = (f <$> a) <|> (f <$> b)
- 左吸收(对于
fmap
):f <$> empty = empty
我也很乐意接受获得一套更有用的Alternative
法律。
2我知道法律是什么有些含糊不清MonadPlus
;我对使用左分布或左捕获的答案感到满意,尽管我更喜欢前者。
parsing - 如何在不假设 Monad 的情况下为解析器实现 Applicative 实例?
我不知道如何Applicative
为这个解析器实现一个实例:
不假设Monad m
。我预计只需要假设Applicative m
,因为Functor
实例只需要假设Functor m
。我终于结束了:
我该怎么做呢?我尝试手动替换>>=
,但总是在试图减少 a 时陷入困境join
——这也需要Monad
.
我也咨询了Parsec,但即使这样也没有多大帮助:
我问这个问题的原因纯粹是为了自学。
haskell - applicative functor 和 monad 的等价性
人们说 monad 是应用函子的扩展,但我不这么认为。让我们举一个应用函子的例子:(<*>) :: f(a->b) -> f a -> f b
现在,我也希望我可以做和 monad 一样的事情,这意味着我可以应用 2 个参数:一个上下文包含一个函数,另一个上下文来获取一个上下文。但对于 monad,我不能。我所需要的只是编写一个像这样丑陋的函数:
是的,当然,你可以说这[(+3)]
等价于[\x->(x+3)]
. 但至少,这个函数是在上下文中的。
最后,我在这里看不到等价或扩展。Monad 是一种不同的风格,在另一个故事中很有用。
对不起我的无知。
haskell - applicative 到底有多少是关于应用而不是“组合”?
对于不确定性传播Approximate
类型,我希望有Functor
through的实例Monad
。然而,这不起作用,因为我需要包含类型的向量空间结构,所以它实际上必须是类的受限版本。由于似乎仍然没有这些标准库(或者是否存在?请指出我。有rmonad,但它使用*
而不是Constraint
作为上下文类型,这对我来说似乎已经过时了),我编写了自己的版本暂时。
这一切都很容易Functor
但直接翻译Applicative
,如
不可能,因为函数a->b
没有必要的向量空间结构* FScalarBasisSpace
。
然而,起作用的是改变受限应用类的定义:
然后定义<*>#
而不是cliftA2
作为自由函数
而不是一种方法。没有约束,这是完全等价的(事实上,很多Applicative
实例都是这样),但在这种情况下,它实际上更好:(<*>#)
仍然有无法满足的约束a->b
,Approximate
但这不会伤害应用实例,而且我仍然可以做有用的事情,比如
我认为CApplicative
对于. Set
_
所以我的问题:
比? <*>
_liftA2
同样,在不受约束的情况下,它们无论如何都是等价的。我实际上发现liftA2
更容易理解,但在 Haskell 中,考虑传递“函数容器”而不是对象容器和一些“全局”操作来组合它们可能更自然。并<*>
直接引出所有liftAμ
对于μ ∊ ℕ,而不仅仅是liftA2
; 从liftA2
only这样做是行不通的。
但是,这些受约束的类似乎对liftA2
. 特别是,它允许所有s 的CApplicative
实例,这在基方法时不起作用。而且我认为我们都同意应该始终比.CMonad
<*>#
Applicative
Monad
范畴论者会对这一切说什么?有没有办法在liftAμ
不需要a->b
满足相关约束的情况下获得将军?
*这种类型的线性函数实际上确实具有向量空间结构,但我绝对不能局限于这些。
haskell - 应用函子和左从
我一直在阅读这本很棒的好书,但我在 Applicative Functors 上有些挣扎。
在下面的示例max
中应用了两个 Maybe 函子的内容并返回Just 6
。
为什么在以下示例中Left "Hello"
返回而不是 Either 仿函数的内容:Left "Hello World"
?