类型类形态的另一个可爱示例

我读了Max Rabkin最近的帖子漂亮的折叠非常激动。他演示了如何将同一列表上的多个折叠合并为一个过程,这样可以大大减少懒惰函数程序的内存需求。Max的诀窍是为折叠提供一个数据表示,以及一种组合表示的方法,该表示对应于组合折叠。

在过去几年里,我越来越注意到从Max定义背后窥视是一个可爱的模式,即类型类态射.

继续阅读“类型类变体的另一个可爱示例”»

编写备忘录尝试次数

帖子优雅的备忘录功能显示了一种简单的搜索尝试及其在函数记忆中的使用。这篇文章为备忘录尝试提供了一些撰写工具,其定义如下不可避免的,因为它们是由使用类型类形态简化语义.

继续阅读“撰写备忘录尝试”»

使用类型类形态简化语义

当我第一次在Fran及其前辈中使用功能反应性时,我没有意识到事件和反应行为的许多功能可以通过标准类型类进行打包。然后Conor McBride和Ross Paterson向我们介绍应用函子,我记得使用该模式将Fran中的所有起重操作员减少到两个,这对应于纯净的(< *>)在中适用类。因此,在开发一个新的函数式反应式编程(FRP)库时,我认为应该使接口现代化,以尽可能使用标准类型类。

在为这些类的FRP实例拼写精确(指称)语义时,我注意到一个可爱的重复模式:

每个方法的含义对应于相同的含义方法。

在这篇文章中,我将给出一些这个原理的示例,并对其有用性进行一些思考。有关更多详细信息,请参阅论文简单有效的功能反应性.另一篇帖子将开始探索类型类形态和类型组合,并提出我想知道的问题。

继续阅读“使用类型类形态简化语义”»

简单有效的功能反应性

我提交了一篇论文简单有效的功能反应性2008年ICFP.

摘要:

功能反应式编程(FRP)具有简单而强大的语义,但一直阻碍有效的实现。特别是,过去的大多数实现都使用了需求驱动采样,它适应了FRP的连续时间语义,并且很好地符合函数编程的本质。因此,即使输入没有改变,也会浪费重新计算值,并且反应延迟可能与采样周期一样高。

本文提出了一种实现FRP的方法,该方法结合了数据和需求驱动的评估,其中仅在必要时重新计算值,并且反应几乎是瞬时的。该实现基于FRP及其语义的一种新的简单公式,因此易于理解和推理。

在通往效率和简单的道路上,我们将结识一些老朋友(幺半群、函子、应用函子、单子、形态和改进值),并结识一些新朋友(函数未来值、反应范式和并发的“明确选择”)。

未来价值观

A类未来价值(或者简单地说是“未来”)是一个可能要过一段时间才能知道的值,例如“你按下的下一个键的值”,或“下周一中午LambdaPix股票的值”(都是从你第一次读这句话时算起的),或“我下一个生日蛋糕上的蜡烛要吹灭多少次”。与命令式计算不同,每个未来都有一个唯一的值,尽管您可能还不知道该值是什么反应性.

编辑:

  • 2008-04-04:调整标签;删除了第一节标题。

继续阅读“未来价值”»