问题标签 [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.
regex - 使用 Applicative Functor 匹配至少 3 个 Scala 正则表达式中的 1 个
我有三个 Scala 正则表达式,我需要测试它们中的任何一个是否与给定的字符串匹配。
我知道我可以做到以下几点:
但我相信有一种方法可以使用Scalaz库中的 Applicative Functor 或 Monad 来做到这一点。
如何才能做到这一点?
haskell - Control.Applicative.Lift 有什么用?
我在最近的一篇博文中写到transformers
,有人问“人们使用Control.Applicative.Lift做什么?” 我无法回答这个问题,所以我向 StackOverflow 回应了这个问题 - 有什么用 Control.Applicative.Lift
?
我在包中看到了一个使用它的示例,但我似乎无法完全解析它的作用。有谁知道野外的任何其他例子?
haskell - 具有两个参数的构造函数的应用样式解析器
我想为尖括号中的逗号分隔值对编写解析器。我让它使用以下方法:
但是我更喜欢 Foo 构造函数采用两个参数而不是一个元组:
编写这样的解析器的最佳方法是什么?理想情况下,我想重用标准 Parsec 解析器,angles
并尽可能多地使用 applicative。
haskell - 编写 Haskell 过滤器
我正在将zxcvbn 密码强度算法转换为 Haskell。
我有两个函数可以检查所有字符是否为 ASCII 并且可以进行暴力攻击:
和
我将它们组合成一个函数:
我现在需要使用第三个过滤器来组合这些以检查这些术语是否不为空:
我突然想到我正在创建一个过滤器链,并且创建一个单独的函数会更有意义,该函数需要一个过滤器函数列表并按给定的顺序组合它们。
如果我从阅读中回忆起,我相信这是一个应用函子的工作。我可以为此使用应用程序吗?
在过滤之前,我不确定如何处理filterShort
我需要zip
使用基于一个的索引的每个项目的功能。
haskell - Haskell - 在 Applicative 的情况下,效果顺序是否确定?
执行定义的IO动作时,和动作someFun <$> (a :: IO ()) <$> (b :: IO ())
的执行是否有序?也就是说,我可以指望那是在执行之前吗?a
b
a
b
对于 GHC,我可以看到 IO 是使用 State 实现的,在这里也看到它是一个 Applicative 实例,但是找不到实际实例声明的来源。通过 State 实现表明不同的 IO 效果需要是顺序的,但不需要定义它们的顺序。
在 GHCi 中玩耍似乎 Appliative 保留了效果顺序,但这是一些普遍的保证,还是 GHC 特定的?我会对细节感兴趣。
谢谢!
haskell - getZipList 是如何定义的?
我很好奇 getZipList 在 ghc 中的定义位置。Control.Applicative 对 ZipList 有这个定义。
使用 ZipLists 的一种方法是(来自 LYAH):
我很好奇 getZipList 如何知道要返回什么。也许我错过了关于 newtype 关键字的一些东西。谢谢!
haskell - 为什么应用函子可以有副作用,但函子不能?
问这个问题我感觉很傻,但我一直在想这个问题,但我找不到任何答案。
所以问题是:为什么应用函子可以有副作用,但函子不能?
也许他们可以,而我只是从未注意到...?
haskell - 使用 attoparsec 解析固定长度的文本
我需要用 attoparsec 解析固定长度的字段,但我现在正在努力使用编译器。我还是个新手,下面的代码是我最接近的解决方案:
这一切都很好,但它只是返回没有空间的城市。
我尝试使用 applicative 为 City 文本字符串取 20 个字符
乃至do syntax
但两种方法都无法编译并出现此错误:
是什么导致 ghc 在有 类型Text -> Text
时询问?take
Int -> Text -> Text
如何在 applicative 和 do-syntax 中解决它?
haskell - 从单子翻译成应用
好的,所以我知道Applicative
类型类包含什么,以及它为什么有用。但是我不能完全围绕你如何在一个重要的例子中使用它。
例如,考虑以下相当简单的 Parsec 解析器:
Monad
现在,如果不使用实例,你会怎么写Parser
呢?很多人声称这是可以做到的,而且是个好主意,但我不知道具体如何。
haskell - 应用函子更有趣
之前我问过翻译一元代码以仅使用 Parsec 的应用函子实例。不幸的是,我收到了几个答复,这些答复回答了我真正提出的问题,但并没有真正给我太多的见解。所以让我再试一次......
总结我到目前为止的知识,应用函子比单子更受限制。在“少即是多”的传统中,限制代码可以做的事情增加了疯狂代码操作的可能性。无论如何,很多人似乎认为使用 applicative 代替 monad 是一个可能的更好的解决方案。
该类Applicative
在 中定义Control.Applicative
,其 Haddock 的列表有助于将类方法和实用程序函数与它们之间的大量类实例分开,从而难以同时快速查看屏幕上的所有内容。但是相关的类型签名是
完全有道理,对吧?
嗯,Functor
已经给我们了fmap
,基本上就是<$>
。即,给定一个函数 from x
to y
,我们可以将 an 映射f x
到 an f y
。Applicative
添加了两个本质上新的元素。一个是,它与(以及各种范畴论类中的其他几个运算符)pure
具有大致相同的类型。return
另一个是<*>
,它使我们能够获取一个函数容器和一个输入容器,并产生一个输出容器。
使用上面的运算符,我们可以非常巧妙地做一些事情,比如
这允许我们采用 N 元函数并从 N 个函子中获取其参数,这种方式很容易推广到任何 N。
这点我已经明白了。有两件主要的事情我还不明白。
首先,*>
函数<*
和<$
。从它们的类型来看<* = const
,*> = flip const
、 和<$
可能是相似的。大概这并没有描述这些功能实际上做了什么。(??!)
其次,在编写 Parsec 解析器时,每个可解析实体通常最终看起来像这样:
由于应用函子不允许我们以这种方式将中间结果绑定到变量,我对如何为最后阶段收集它们感到困惑。为了理解如何做到这一点,我一直无法完全围绕这个想法。