可重用语言组件的潜在影响,作者:Birthe van den Berg、Tom Schrijvers、Casper Bach Poulsen、Nicolas Wu:
编程语言的开发可能相当复杂且成本高昂。因此,人们致力于对语言特性进行模块化定义,这些特性可以以各种组合方式重用,以定义新的语言并对其语义进行实验。这些努力的一个显著成果是基于代数的“数据类型”点菜法(DTC)。当与代数效应相结合时,DTC可以对广泛的通用语言特征进行建模。不幸的是
当前技术水平不包括将执行延迟到适当点的高级控制流机制的模块化定义,例如按名称调用和按需要调用评估,以及(多)分段。本文定义了潜在效应,这是此类控制流机制的一类泛型。我们演示了如何使用潜在效果以模块化方式表达函数抽象、延迟计算和类似MetaML的分段,以及如何以各种方式组合它们以获得复杂语义。我们通过一系列示例提供了我们的效果和处理程序的完整Haskell实现。
看起来像是代数效应对更微妙的背景所采取的基本方法的一个很好的概括。代数效应已经在这里讨论过很多次了我认为第2.3节中的描述对他们的方法进行了很好的概述:
LE&H基于与AE&H的自由单子不同的、更复杂的结构。此结构支持非原子操作(例如,函数抽象、thunking、引用),这些操作包含或限定可能延迟执行的计算。此外,分层处理也是不同的。这个想法仍然是一样的,用它的意义来一点一点地替换树的结构。然而,虽然AE&H在不断缩小的树周围增加了含义,但LE&H在树中剩余的单个节点周围,而不仅仅是根周围,增加了很少的“意义口袋”。后者支持延迟效果,因为后期处理程序仍然可以重新排列早期处理程序创建的语义口袋。