首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell缺少什么来进行总体检查?

Haskell缺少什么来进行总体检查?
EN

Stack Overflow用户
提问于 2017-02-10 05:09:51
回答 1查看 3.4K关注 0票数 37

一种完全(功能)语言是一种可以显示一切终止的语言。显然,有很多地方我不希望这样-抛出的异常有时很方便,web服务器不应该终止等等。但是有时,我想要一个本地的总体检查,以支持某些优化。例如,如果我有一个可证明的全函数

代码语言:javascript
复制
commutativity :: forall (n :: Nat) (m :: Nat). n + m :~: m + n
commutativity = ...

然后,由于),GHC可以优化

代码语言:javascript
复制
gcastWith (commutativity @n @m) someExpression
  ==>
someExpression

我对交换性的证明是从O(n)运行时成本增加到免费的。所以,现在我的问题是:

在为Haskell做一个总体检查时,有哪些微妙的困难?

显然,这样的检查器是保守的,所以每当GHC不确定某物是否完全(或懒得检查)时,它就可以假定它不是.在我看来,拼凑一个不那么聪明的检查工具可能并不太困难,因为它仍然非常有用(至少,消除我所有的算术证明应该是直接的)。然而,我似乎找不到任何努力来构建这样的东西到GHC,所以很明显,我错过了一些相当大的限制。去吧,粉碎我的梦想。:)

相关但不是最近的:尼尔·米切尔,2005

EN

回答 1

Stack Overflow用户

发布于 2017-02-10 11:22:06

液体Haskell有总体检查:https://github.com/ucsd-progsys/liquidhaskell#termination-check

默认情况下,对所有递归函数执行终止检查。 使用“不终止”选项禁用检查。 液体--无终止test.hs 在递归函数中,第一个代数或整数参数应该是递减的。 列表的默认递减度量是长度和整数它的值。

(我包括了截图和后人引用。)

类似于Agda或其他具有总体检查的语言,函数的参数必须在结构上随着时间的推移变得更小,才能到达基本情况。与总体检查器相结合,可以对许多功能进行可靠的检查。LH还支持通过指示事物如何减少来帮助检查器,这可以使用不透明的抽象数据类型或FFI。这真的很实用。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42151927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档