<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Idris</id>
	<title>Idris - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Idris"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Idris&amp;action=history"/>
	<updated>2026-07-17T05:16:15Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Idris&amp;diff=2265828&amp;oldid=prev</id>
		<title>imported&gt;ExultantEditor 来自 2025年12月26日 (五) 16:55</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Idris&amp;diff=2265828&amp;oldid=prev"/>
		<updated>2025-12-26T16:55:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox programming language&lt;br /&gt;
| name                   = Idris&lt;br /&gt;
| logo                   = &lt;br /&gt;
| paradigm               = [[函数式编程]]&lt;br /&gt;
| year                   = &lt;br /&gt;
| designer               = Edwin Brady&lt;br /&gt;
| developer              = &lt;br /&gt;
| released = {{Start date and age|2007}}&amp;lt;ref&amp;gt;{{cite web |last=Brady |first=Edwin |date=2007-12-12 |title=Index of /~eb/darcs/Idris |url=http://www-fp.cs.st-and.ac.uk/~eb/darcs/Idris/ |website=[[University of St Andrews]] School of Computer Science |archive-url=https://web.archive.org/web/20080320233322/http://www-fp.cs.st-and.ac.uk/~eb/darcs/Idris/ |archive-date=2008-03-20 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| latest_release_version = 1.3.3&amp;lt;ref&amp;gt;{{cite web|title=Release 1.3.3|url=https://github.com/idris-lang/Idris-dev/releases/tag/v1.3.3/|access-date=2020-05-25|archive-date=2021-02-04|archive-url=https://web.archive.org/web/20210204084713/https://github.com/idris-lang/Idris-dev/releases/tag/v1.3.3}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| latest_release_date = {{Start date and age|2020|05|24}}&lt;br /&gt;
| latest_test_version    = &lt;br /&gt;
| latest_test_date       = &lt;br /&gt;
| typing                 = [[静态类型]], [[强类型]], [[依赖类型]]&lt;br /&gt;
| implementations        = &lt;br /&gt;
| dialects               = &lt;br /&gt;
| influenced             = &lt;br /&gt;
| influenced_by          = [[Agda]], [[Coq]], {{le|Epigram (编程语言)|Epigram (programming language)|Epigram}}, [[Haskell]], [[ML语言|ML]]&lt;br /&gt;
| license                = BSD-3&lt;br /&gt;
| website                = [http://idris-lang.org/ Idris]&lt;br /&gt;
| file ext               = .idr, .lidr&lt;br /&gt;
| operating_system       = [[跨平台]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Idris&amp;#039;&amp;#039;&amp;#039;是一个通用的[[依赖类型]][[纯函数式编程语言]]，其[[类型系统]]与[[Agda]]以及{{le|Epigram (编程语言)|Epigram (programming language)|Epigram}}相似。&lt;br /&gt;
&lt;br /&gt;
Idris语言具备堪与[[Coq]]媲美的交互式定理证明能力，自带tactics，而其设计目标侧重于通用系统编程更甚于辅助证明。Idris的其他设计目标还包括“可观的”代码性能，对[[函数副作用|副作用]]的控制，以及对于实现嵌入式[[领域特定语言]]（Embedded Domain Specific Language，EDSL）的支持。&lt;br /&gt;
&lt;br /&gt;
Idris通过一个依赖类型的核心语言TT生成[[C语言]]的中间代码并编译到本地机器码，并利用了一个基于[[Cheney算法]]的[[垃圾回收_(計算機科學)|垃圾收集器]]实现。Idris亦拥有 [[JavaScript]]、[[Java]]和[[LLVM]]的编译器后端。&amp;lt;ref&amp;gt;{{cite web|url=http://idris-lang.org/news|title=Idris - News|access-date=2013-12-24|archive-url=https://web.archive.org/web/20131224124749/http://www.idris-lang.org/news/|archive-date=2013-12-24|dead-url=yes}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Idris的名字来自于20世纪70年代的英国儿童动画片《{{link-en|火车头艾弗|Ivor_the_Engine#Idris_the_Dragon}}》里，一条会唱歌的[[龙_(西方)|龙]]。&amp;lt;ref&amp;gt;{{cite web|url=http://idris-lang.org/documentation/faq|title=Idris - FAQ|deadurl=yes|archiveurl=https://web.archive.org/web/20120311111339/http://idris-lang.org/documentation/faq|archivedate=2012-03-11|accessdate=2013-12-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 语言特性 ==&lt;br /&gt;
&lt;br /&gt;
=== 依赖类型 ===&lt;br /&gt;
&lt;br /&gt;
Idris 支持对[[依赖类型]]（&amp;lt;math&amp;gt;\lambda \Pi&amp;lt;/math&amp;gt;）的定义。如下定义了&amp;lt;math&amp;gt;\mbox{Vec}(a,n)&amp;lt;/math&amp;gt;，即元素类型 &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; 的 &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-元组类型：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
data Nat = O | S Nat&lt;br /&gt;
infixr 5 ::&lt;br /&gt;
&lt;br /&gt;
data Vect : Type -&amp;gt; Nat -&amp;gt; Type where&lt;br /&gt;
    VNil : Vect a O&lt;br /&gt;
  | (::) : a -&amp;gt; Vect a k -&amp;gt; Vect a (S k)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 嵌入式领域特定语言（EDSL） ===&lt;br /&gt;
&lt;br /&gt;
Idris 对嵌入式领域特定语言的支持主要包括以下方面&amp;lt;ref&amp;gt;{{cite web|url=http://www.cs.st-andrews.ac.uk/~eb/writings/dtp11.pdf|title=Slides from Systems Programming with Dependent Types at DTP11}}{{dead link|date=2017年11月 |bot=InternetArchiveBot |fix-attempted=yes }}&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
# [[编译期间]]求值。&lt;br /&gt;
# 可[[重载]]的语法。&lt;br /&gt;
# 与C语言库的接口，以及高效的[[代码生成]]。&lt;br /&gt;
&lt;br /&gt;
=== 类型提供器（Type Provider） ===&lt;br /&gt;
&lt;br /&gt;
Idris 拥有与 [[F♯|F#]] 相似的类型提供器，它允许编译器在编译期间根据所执行代码的需求而生成新的类型信息。这使得静态类型系统更具可扩展性。&amp;lt;ref&amp;gt;{{cite journal|last=Christiansen|first=David|title=Dependent type providers|year=2013|url=http://itu.dk/people/drc/pubs/dependent-type-providers.pdf|journal=|access-date=2014-08-26|archive-date=2017-08-09|archive-url=https://web.archive.org/web/20170809082518/http://www.itu.dk/people/drc/pubs/dependent-type-providers.pdf|dead-url=yes}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 示例 ==&lt;br /&gt;
=== 语法 ===&lt;br /&gt;
Idris 的语法与 [[Haskell]] 有许多相似之处。一个最简单的 [[Hello World]] 程序如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
module Main&lt;br /&gt;
&lt;br /&gt;
main : IO ()&lt;br /&gt;
main = putStrLn &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
该程序与 Haskell 的等效写法仅有两点不同：类型签名使用单个冒号“:”而不是双冒号“::”；开头的模块声明中不必使用 where 从句。&lt;br /&gt;
&lt;br /&gt;
Idris 亦支持 where 从句、let 表达式、with 规则、简单的 case 表达式和模式匹配等。&lt;br /&gt;
&lt;br /&gt;
=== 依赖类型 ===&lt;br /&gt;
一个在 Idris 中使用依赖类型的示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
total&lt;br /&gt;
append : Vect n a -&amp;gt; Vect m a -&amp;gt; Vect (n + m) a&lt;br /&gt;
append Nil       ys = ys&lt;br /&gt;
append (x :: xs) ys = x :: append xs ys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
该函数将一个包含 m 个类型 a 的元素的 vector 连接到一个包含 n 个类型 a 的元素的 vector 之后。由于输入 vector 的确切类型依赖于它的值，故在编译（类型检查）时即可保证输出的 vector 必将包含 (n + m) 个类型 a 的元素。&lt;br /&gt;
&lt;br /&gt;
关键字“total”将会执行函数的完整性（totality）检查。若函数定义未涵盖所有可能的情形（partial function），则检查器会报错。&lt;br /&gt;
&lt;br /&gt;
另一个使用依赖类型的示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
total&lt;br /&gt;
pairAdd : Num a =&amp;gt; Vect n a -&amp;gt; Vect n a -&amp;gt; Vect n a&lt;br /&gt;
pairAdd Nil       Nil       = Nil&lt;br /&gt;
pairAdd (x :: xs) (y :: ys) = x + y :: pairAdd xs ys&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Num a 标志着类型 a 属于 {{link-en|Type class|Type class}} Num。注意在这里，该函数被认为是完整的（total），尽管并未定义一个参数是 Nil 而另一个参数非 Nil 的模式。原因在于两个作为参数的 vector 只能具备相同的长度，这一点通过依赖类型系统得到了保证，因此在编译时两者长度不同的情形绝无可能发生。这使得该函数定义仍然是完整的。&lt;br /&gt;
&lt;br /&gt;
=== 求值策略 ===&lt;br /&gt;
Idris 默认采取[[及早求值]]（Eager evaluation），而非 Haskell 的[[惰性求值]]（Lazy evaluation）方式。Idris 支持使用 Lazy 关键字显式地指定惰性求值：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
data Lazy : Type -&amp;gt; Type where&lt;br /&gt;
  Delay : (val : a) -&amp;gt; Lazy a&lt;br /&gt;
&lt;br /&gt;
Force : Lazy a -&amp;gt; a&lt;br /&gt;
&lt;br /&gt;
boolCase : Bool -&amp;gt; Lazy a -&amp;gt; Lazy a -&amp;gt; a;&lt;br /&gt;
boolCase True t e = t;&lt;br /&gt;
boolCase False t e = e;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://idris-lang.org/ The Idris homepage]{{Wayback|url=http://idris-lang.org/ |date=20201112032249 }}, including documentation, frequently asked questions and examples&lt;br /&gt;
* [http://hackage.haskell.org/package/idris Idris at the Hackage repository]{{Wayback|url=http://hackage.haskell.org/package/idris |date=20201127003350 }}&lt;br /&gt;
* [https://web.archive.org/web/20120315161110/http://www.cs.st-andrews.ac.uk/~eb/writings/idris-tutorial.pdf Idris Tutorial]&lt;br /&gt;
&lt;br /&gt;
{{程序设计语言|Idris}}&lt;br /&gt;
&lt;br /&gt;
[[Category:程序设计语言]]&lt;br /&gt;
[[Category:函数式编程语言]]&lt;br /&gt;
[[Category:2007年建立的程式語言]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ExultantEditor</name></author>
	</entry>
</feed>