数学与计算

关于计算机数学的博客

效率3.0

马蒂亚我很高兴地宣布eff编程语言.

在过去一年左右的时间里,eff已经相当成熟:

评论

Dan Doel公司

几天前在#haskell中提出的一个问题引发了我对Eff的一些思考。问题是:

为什么我们不能用免费的单子F X=Get(S->X)| Put S X为了国家?

答案是,这并不是精确地指定可变细胞的代数,而S->S*X做。我们希望Get和Put以某种方式相互作用,而正确的代数理论是自由代数理论对这两个操作的商。

但是,我突然想到,免费单子正是Eff所做的。您指定get和put存在,但它们之间没有关系,除非我遗漏了什么。假设处理程序能够观察到在商下无法区分的各种get和put序列?

那么,有没有计划在Eff的代数理论中添加方程(或等效的)。或者,我对Eff中所有可能的事情的回忆只是模糊的,而且已经有了一种正确的处理方法?

@丹:你提出了一个重要的问题,理解答案很重要:方程没有位置in有效。方程是关于什么的预期正确实现,即它们是规范。等式并没有告诉我们如何计算事物(除非幸运的是,它们可以被引导,从而成为约简规则)。Eff或任何其他语言应该如何执行等式?

在您的具体示例中放置获取由处理它们的处理程序捕获。有许多处理程序,其中一些满足预期的方程式。对于给定的方程来说,这些可以说是正确的。

我不理解你最后一句关于模糊性的话。

丹·多尔

有很多语言可以让你陈述和执行方程式。例如,大多数依赖类型的语言。我相信莫德也是。内尔·克里斯纳斯瓦米(Neel Krishnaswami)有一篇论文是关于将方程添加到系统F中的。不过,我不知道其中任何一个都适合Eff。

在具体的例子中,状态代数的特征是典型的状态单子,并且a类上的自由状态代数是S->S*a。因此,如果处理程序是从自由代数到另一代数的同态,那么这应该是方程合并状态的来源。然而,我不知道如何从运算+方程中确定这一点;这似乎不是一个容易处理的问题。即使解决了这个问题,确保目标是一个代数并且定义是一个适当的同态也可能不是自动的。

模糊语句只是为了避免我忘记了Eff的一些特性,这些特性可以让你以某种方式指定方程。我已经有一段时间没有读到这件事了。

啊,是的。Eff是一种传统意义上的编程语言,根据它,Coq、Agda等是证明助手,而不是编程语言。

也许以下列方式考虑事情是有用的:在Eff中,有效的方程式是由处理程序导出的方程式。那会让你更快乐吗?

迈克

我有一个问题:资源和可变引用之间有区别吗?资源是否优于可变资源?

资源稍微更通用。您可以使用资源实现引用,但也可以将资源用于其他“类似状态”的事情。您可以使用资源、持久数据结构和自修改结构(例如,展开树)来执行惰性值。当然,如果你有推荐人,你也可以做到这一切。因此,在某种意义上,资源和参考文献同样具有表现力。请注意,也可以原始的(内置)实际与环境交互的资源,例如随机流或通信通道。

如何在此博客上发表评论:目前,由于相关脚本死亡,注释被禁用。如果你在上评论这篇文章乳臭虫提到andrejbauer@mathstodon.xyz,我会的欣然回应。欢迎您加入联系我直接。