是否有任何Idris的例子可以用来研究,或者将它用于通用/“现实世界”的应用? 我在Haskell方面非常精通,Idris似乎借用了很多,官方FAQ /文档相当不错,但是有一些更大的例子可以帮助我们探索。 目标是尝试使用Idris进行实际的软件开发。 TIA。
我一直在研究依赖types,我理解以下内容: 为什么通用量化被表示为依赖函数types。 ∀(x:A).B(x)意思是“对于所有typesA x有一个typesB(x) ” 。 因此,它被表示为一个函数,当给定的任何值typesA返回typesB(x) 。 为什么存在量化表示为从属对types。 ∃(x:A).B(x)表示“存在typesA的x ,其typesB(x) ” 。 因此,它被表示为一个对,其第一个元素是一个特定值x的A型A而其第二个元素是一个B(x)型的值。 另外:有趣的是,通用量化总是与物质含义 一起使用,而存在量化总是与逻辑连接一起使用 。 无论如何,维基百科有关依赖types的文章指出: 与依赖types相反的是依赖对types , 依赖和types或sigmatypes 。 它类似于联产品或不相交的联合。 一个对types(通常是一个产品types)是如何类似于不相交的联合(这是一个和types)? 这一直困扰着我。 另外,依赖函数types与产品types相似如何?
有一个伊德里斯教程,Agda教程和许多其他的教程风格的论文和介绍性材料,永无止境的参考事物还没有学习。 我在这些中间爬行,大部分时间我都被math符号和新术语突然出现,没有任何解释。 也许我的math糟透了:-) 有没有任何有纪律的方法来进行依赖型编程? 就像你想要学习Haskell一样,你从“自学一个Haskell”开始,当你想学习Scala的时候,你从Odersky的书开始,对于Ruby来说,你会看到那个奇怪的教程,里边有变异的bug。 但是我不能用他们的书来启动Agda或Idris。 他们高于我的头。 我尝试了Coq,并陷入了所有关于TeX的certificate风格。 阿格达需要一个巨大的math背景和伊德里斯,好吧,让我们暂时离开! 我非常了解静态types系统,我对Scala非常熟练,如果需要,我可以使用Haskell。 我理解function范式并日复一日地使用它,我理解代数数据types和GADT(实际上相当顺利),而且我最近设法理解了Lambda Cube。 虽然我缺乏math和逻辑部分。
相关types通常被广告作为一种方式,使您能够断言程序是否符合规范是正确的。 所以,例如,你被要求编写一个sorting列表的代码 – 你可以通过将“sort”的概念编码为一个types来certificate代码是正确的,并且编写一个函数,比如List a -> SortedList a 。 但是,如何certificate规范SortedList是正确的呢? 难道不是这种情况:你的规格越复杂,这个规格的types编码就越可能是不正确的?
Edwin C.Brady关于Idris中效应的文章“用代数效应和依赖types进行编程和推理”包含了(未被引用的)声明: 虽然[效果器和单声道变压器]在功率上并不相同,但单声道和单声道变压器可以expression更多的概念 – 许多常见的有效计算被捕获。 有什么样的例子可以用单子变换器来模拟,但不是影响?
我开始深入依赖types编程,并发现Agda和Idris语言是最接近Haskell,所以我开始在那里。 我的问题是:他们之间的主要区别是什么? 这两种types的系统是否同样expression? 对收益进行全面的比较和讨论是非常好的。 我已经能够发现一些: Idris的Haskelltypes类,而Agda带有实例参数 伊德里斯包括一元和适用的符号 他们两个似乎都有某种可重新expression的语法,虽然不太确定它们是否相同。 编辑 :在这个问题的Reddit页面有更多的答案: http : //www.reddit.com/r/dependent_types/comments/q8n2q/agda_vs_idris/