1
11
从 Time flies like an applicative functor 康纳·麦克布莱德:
和
阅读整篇文章。为了回答眼前的问题,作者的结论是
|
2
9
我最近在
背景是;我正在解析一些旧数据,数据中的日期格式不明确。数据中的每个日期都可以解析为四种可能,存储在四元表中。然后我想验证四元中的每个日期,以消除语义上无效的日期。(没有32天的月份,没有34个月,没有第5个季度等)最后,我想取数据集中的每个日期,并将整个集合缩减为四元,表示哪些日期格式对整个集合有效。然后,我从这些选项中选择最好的格式,并假设这就是数据集的日期格式。 整个操作很容易表示为四元结构上的应用操作。 下面是代码的基本形状: 我的新类型:
一些先决条件“纯”功能:
所以一旦我们有了四个解析日期(从
(到目前为止这只是一个函子,但你也可以写
同样值得注意的是,一个
元素,并验证集合中的每个元素——若要验证一个元素,可以编写
接下来的步骤是进行一组有效的解析并折叠 最终结果:
所以现在你可以从
所以不管怎样,这篇文章有点长,但是我的想法是
应用实例允许我用大约3行代码来解决问题
代码的。我的问题域在
容器,这就是应用函子所做的。没有
|
3
5
Conal Elliott writes about signal processors and how they're applicatives
. 类似于
我在一个未完成但很可爱的游戏中经常使用这个概念(
应用程序样式用法的代码段/示例:
|
4
4
Formlets 是对HTML表单的抽象,用组合应用程序的方式来描述。formlet应用程序是组成名称生成应用程序(生成表单元素名称)、xml编写器应用程序(生成html)和环境应用程序(提供提交的表单值)的结果。 可以通过组合其他应用程序来扩展formlet,例如实现验证。 库珀、瓦德勒等人在论文中指出,形式不能表示为单子。 表单已经在haskell中实现了, here is the package . |
5
4
swierstra和duponcheel定义了一种高效的解析器样式,这个解析器几乎是arrows的早期海报子代,但是它不需要arrow中的任何东西,它不能从applicative中获得这些东西。然而,当时还没有发明应用程序。 它有效地为ll(1)解析器计算“first”集,并使用它进行更智能的分支选择。然而,你不能计算这些集合时,你的工作单。 这可能不是一个非常公平的例子,因为swierstra/duponcheel解析器允许静态和动态解析器的混合,而且它只是一个仅限于应用的静态解析器。 有了Observable sharing,您可以进一步进行解析器设计,还可以计算“follow”集(只要您小心不要构建无限上下文无关语法)。这为解析上下文无关文法提供了很好的渐近保证,在使用一元(上下文敏感)解析器设计进行解析时,这些保证是不可用的。 同样有趣的是,考虑applicative的<*>可用的结构,而不是纯结构。许多comonad承认类似于(<*>)的定义,它尊重comonad的结构,但是没有一个合理的定义来定义“pure”。我的半群体包和无数依赖它的包进一步探索了这个想法。 |
6
1
我相信箭是有用的函子。control.applicative中当然有wraparow类型。 |
7
1
麦克布莱德和帕特森 http://www.soi.city.ac.uk/~ross/papers/Applicative.pdf 证明一个幺半群可以被当作一个应用函子,但一般情况下它不是一个单子。 |
trpnd · 如何定义由两个任意单声道变压器组成的单声道变压器? 2 年前 |
Fabus1184 · Haskell mapM_不打印 2 年前 |
Gotthold · 基于范数约束向量的类型 2 年前 |
jian · haskell将另一个函数用作输入参数 2 年前 |
Jocafrei · 用Haskell函数实现最大公约数函数 6 年前 |