Idris

Idris
编程范型函数式编程
設計者Edwin Brady
发行时间2007年,​18年前​(2007[1]
当前版本
  • 1.3.3(2020年5月23日)[2]
編輯維基數據鏈接
型態系統静态类型, 强类型, 依赖类型
操作系统跨平台
許可證BSD-3
文件扩展名.idr, .lidr
網站Idris
啟發語言
Agda, Coq, Epigram英语Epigram (programming language), Haskell, ML

Idris是一个通用的依赖类型纯函数式编程语言,其类型系统Agda以及Epigram英语Epigram (programming language)相似。

Idris语言具备堪与Coq媲美的交互式定理证明能力,自带tactics,而其设计目标侧重于通用系统编程更甚于辅助证明。Idris的其他设计目标还包括“可观的”代码性能,对副作用的控制,以及对于实现嵌入式领域特定语言(Embedded Domain Specific Language,EDSL)的支持。

Idris通过一个依赖类型的核心语言TT生成C语言的中间代码并编译到本地机器码,并利用了一个基于Cheney算法垃圾收集器实现。Idris亦拥有 JavaScriptJavaLLVM的编译器后端。[4]

Idris的名字来自于20世纪70年代的英国儿童动画片《火车头艾弗英语Ivor_the_Engine#Idris_the_Dragon》里,一条会唱歌的[5]

语言特性

依赖类型

Idris 支持对依赖类型)的定义。如下定义了,即元素类型 -元组类型:

data Nat = O | S Nat
infixr 5 ::

data Vect : Type -> Nat -> Type where
    VNil : Vect a O
  | (::) : a -> Vect a k -> Vect a (S k)

嵌入式领域特定语言(EDSL)

Idris 对嵌入式领域特定语言的支持主要包括以下方面[6]

  1. 编译期间求值。
  2. 重载的语法。
  3. 与C语言库的接口,以及高效的代码生成

类型提供器(Type Provider)

Idris 拥有与 F# 相似的类型提供器,它允许编译器在编译期间根据所执行代码的需求而生成新的类型信息。这使得静态类型系统更具可扩展性。[7]

示例

语法

Idris 的语法与 Haskell 有许多相似之处。一个最简单的 Hello World 程序如下:

module Main

main : IO ()
main = putStrLn "Hello, World!"

该程序与 Haskell 的等效写法仅有两点不同:类型签名使用单个冒号“:”而不是双冒号“::”;开头的模块声明中不必使用 where 从句。

Idris 亦支持 where 从句、let 表达式、with 规则、简单的 case 表达式和模式匹配等。

依赖类型

一个在 Idris 中使用依赖类型的示例:

total
append : Vect n a -> Vect m a -> Vect (n + m) a
append Nil       ys = ys
append (x :: xs) ys = x :: append xs ys

该函数将一个包含 m 个类型 a 的元素的 vector 连接到一个包含 n 个类型 a 的元素的 vector 之后。由于输入 vector 的确切类型依赖于它的值,故在编译(类型检查)时即可保证输出的 vector 必将包含 (n + m) 个类型 a 的元素。

关键字“total”将会执行函数的完整性(totality)检查。若函数定义未涵盖所有可能的情形(partial function),则检查器会报错。

另一个使用依赖类型的示例:

total
pairAdd : Num a => Vect n a -> Vect n a -> Vect n a
pairAdd Nil       Nil       = Nil
pairAdd (x :: xs) (y :: ys) = x + y :: pairAdd xs ys

Num a 标志着类型 a 属于 Type class英语Type class Num。注意在这里,该函数被认为是完整的(total),尽管并未定义一个参数是 Nil 而另一个参数非 Nil 的模式。原因在于两个作为参数的 vector 只能具备相同的长度,这一点通过依赖类型系统得到了保证,因此在编译时两者长度不同的情形绝无可能发生。这使得该函数定义仍然是完整的。

求值策略

Idris 默认采取及早求值(Eager evaluation),而非 Haskell 的惰性求值(Lazy evaluation)方式。Idris 支持使用 Lazy 关键字显式地指定惰性求值:

data Lazy : Type -> Type where
  Delay : (val : a) -> Lazy a

Force : Lazy a -> a

boolCase : Bool -> Lazy a -> Lazy a -> a;
boolCase True t e = t;
boolCase False t e = e;

参考文献

  1. ^ Brady, Edwin. Index of /~eb/darcs/Idris. University of St Andrews School of Computer Science. 2007-12-12. (原始内容存档于2008-03-20). 
  2. ^ Release 1.3.3. 2020年5月23日 [2020年5月24日]. 
  3. ^ Release 1.3.3. [2020-05-25]. (原始内容存档于2021-02-04). 
  4. ^ Idris - News. [2013-12-24]. (原始内容存档于2013-12-24). 
  5. ^ Idris - FAQ. [2013-12-24]. (原始内容存档于2012-03-11). 
  6. ^ Slides from Systems Programming with Dependent Types at DTP11 (PDF). [永久失效連結]
  7. ^ Christiansen, David. Dependent type providers (PDF). 2013 [2014-08-26]. (原始内容 (PDF)存档于2017-08-09). 

外部链接

Read other articles:

Il 3-4-2-1 è un modulo di gioco del calcio. Consiste nello schierare 3 difensori centrali, 4 centrocampisti (i due esterni sono chiamati tornanti perché in grado sia di attaccare che di difendere) e 2 fantasisti (o trequartisti) alle spalle di una prima punta. Indice 1 Il modulo 1.1 Fase difensiva 1.2 Fase offensiva 2 Squadre che hanno utilizzato il 3-4-2-1 3 Note 4 Bibliografia 5 Voci correlate Il modulo Fase difensiva In fase di non possesso, i due tornanti si abbassano in difesa per aiut...

 

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Penerbangan larut malam – berita · surat kabar · buku · cendekiawan · JSTOR Penerbangan larut malam (dalam bahasa Inggris dikenal red-eye flight atau diterjemahkan menjadi penerbangan mata merah) adalah ...

 

Chris LilleyLahirChristopher Daniel Lilley10 November 1974 (umur 49)Sydney, New South Wales, AustraliaPekerjaanAktorKomedianTahun aktif2003–kini Christopher Daniel Lilley (lahir 10 November 1974) adalah komedian, produser televisi, aktor, musisi dan penulis asal Australia. Dia dikenal karena penciptaan dan penggambaran beberapa karakter dalam mockumentar serial televisinya We Can Be Heroes: Finding The Australian of the Year, Summer Heights High, Angry Boys dan Ja'mie: Private Sc...

Bandar Udara SupadioSupadio Airport IATA: PNKICAO: WIOOWMO: 96581InformasiJenisPublik / MiliterPemilikPT Aviasi Pariwisata Indonesia (Persero)PengelolaPT Angkasa Pura IIMelayaniPontianakLokasiKabupaten Kubu Raya, Kalimantan Barat, IndonesiaZona waktuWIB (UTC+07:00)Ketinggian dpl3 mdplKoordinat00°09′02″S 109°24′14″E / 0.15056°S 109.40389°E / -0.15056; 109.40389Situs websupadio-airport.co.idPetaKalimantan daerah di Indonesia PNK /WIOOLokasi bandara ...

 

Basilika Santo Nikolaus di Amsterdam merupakan ikon keagamaan paling populer di pusat kota. Ini adalah daftar lengkap Basilika di Belanda. Basilika adalah gelar yang diberikan kepada beberapa gereja Katolik. Berdasarkan hukum kanonik tidak ada gereja Katolik yang dapat dihormati dengan gelar basilika kecuali mendapatkan hibah apostolik atau berdasarkan kebiasaan dahulu kala.[1] Gelar ini diberikan kepada gereja-gereja besar yang penting sebagai tempat ziarah atau untuk pengabdian tert...

 

Semarang TimurKecamatanPeta lokasi Kecamatan Semarang TimurNegara IndonesiaProvinsiJawa TengahKotaSemarangPemerintahan • Camat-Populasi • Total73.491 jiwaKode Kemendagri33.74.03 Kode BPS3374110 Luas7,70 km²Desa/kelurahan10 Semarang Timur (Jawa: ꦱꦼꦩꦫꦁ​​ꦮꦺꦠꦤ꧀, translit. Semarang Wétan) adalah sebuah kecamatan di Kota Semarang, Provinsi Jawa Tengah, Indonesia. Pranala luar (Indonesia) Keputusan Menteri Dalam Negeri Nomor 050-145 Tah...

العلاقات الألبانية اللبنانية ألبانيا لبنان   ألبانيا   لبنان تعديل مصدري - تعديل   العلاقات الألبانية اللبنانية هي العلاقات الثنائية التي تجمع بين ألبانيا ولبنان.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (نوفمبر 2019) كأس ملك إسبانيا 1928   تفاصيل الموسم كأس ملك إسبانيا  النسخة 26  البلد إسبانيا  المنظم الاتحاد الم�...

 

Éliminatoires de la coupe du monde 1990 Généralités Sport Football Organisateur(s) FIFA Édition 14e Coupe du monde13e pour les éliminatoires Date 1988 - 1989 Participants 114 inscrits104 effectifs2 qualifiés d'office Navigation Éliminatoires 1986 Éliminatoires 1994 modifier Cette page vous présente les différents tours préliminaires à la Coupe du monde 1990. C'est la 13e édition des éliminatoires depuis 1934. Pour la première fois depuis 1950, le total d'inscription est infé...

Questa voce o sezione sull'argomento governi non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Governo Fortis I Stato Italia Presidente del ConsiglioAlessandro Fortis(Sinistra storica) CoalizioneSinistra storica LegislaturaXXII Giuramento28 marzo 1905 Dimissioni18 dicembre 1905 Governo successivoFortis II24 dicembre 1905 Tittoni Fortis II Il Governo F...

 

Curling pada Olimpiade Musim Dingin 2010LokasiPusat Olimpiade/Paralimpiade VancouverVancouverTanggal16–27 Februari 2010Jumlah disiplin2Peserta100 dari 12 negara← 20062014 → Pertandingan curling pada Olimpiade Musim Dingin 2010 dilangsungkan di Vancouver Olympic/Paralympic Centre, Vancouver. Sebelumnya curling sudah empat kali dipertandingkan di Olimpiade Musim Dingin, 1924, 1998, 2002, dan 2006. Kompetisi dilakukan mengikuti format yang sama seperti di O...

 

Association football club in England Football clubNewquay AFCFull nameNewquay Association Football ClubNickname(s)The Peppermints, Towns ClubFounded1890GroundMount Wise Stadium, NewquayChairmanSteve RichManagerShaun MiddletonLeagueSouth West Peninsula League Premier Division West2022–23South West Peninsula League Premier Division West, 6th of 16 Home colours Away colours Newquay Association Football Club is a football club based in Newquay, Cornwall, England. Nicknamed The Peppermints, they...

博里萨夫·约维奇攝於2009年 南斯拉夫社會主義聯邦共和國第12任總統任期1990年5月15日—1991年5月15日总理安特·马尔科维奇前任亚内兹·德尔诺夫舍克继任塞吉多·巴伊拉莫维奇(英语:Sejdo Bajramović) (代任)第12任不结盟运动秘书长任期1990年5月15日—1991年5月15日前任亚内兹·德尔诺夫舍克继任斯捷潘·梅西奇第3任塞尔维亚常驻南斯拉夫社会主义联邦共和国主席团代表任�...

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

 

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

Artikel ini bukan mengenai Jalan Tol Lingkar Luar Jakarta. Jalur Jalan Raya Bintaro - Taman Mini merupkan salah satu jalur jalan raya utama di wilayah Provinsi DKI Jakarta, Indonesia yang memiliki panjang 12,11 km. Jalan ini terbagi menjadi dua bagian, yakni Jalan TB Simatupang dan Jalan RA Kartini. Jalan raya ini menghubungkan kawasan perumahan elit Pondok Indah di wilayah Kelurahan Pondok Pinang, Kebayoran Lama, Jakarta Selatan dengan Terminal Bus Kampung Rambutan dan Taman Mini Indonesia I...

 

Halaman ini berisi artikel tentang menara di Minato, Tokyo, Jepang. Untuk menara dengan nama yang sama, lihat Menara Tokyo (disambiguasi). Tokyo Tower東京タワーInformasi umumStatusSelesaiJenisMenara komunikasiMenara observasiLokasi4-2-8 Shiba-koen, Minato, Tokyo 105-0011Mulai dibangunJuni 1957Rampung1958Pembukaan23 Desember 1958Biaya¥2,8 miliar(AS$8,4 juta pada 1958)PemilikNihon Denpatō(Nippon Television City Corp.)TinggiMenara antena333 m (1.093 ft)[1]Desain dan kons...

 

Branch of neuroscience The examples and perspective in this article may not represent a full view of the subject. Please improve this article and discuss the issue on the talk page. (August 2018) Clinical neuroscience is a branch of neuroscience that focuses on the scientific study of fundamental mechanisms that underlie diseases and disorders of the brain and central nervous system.[1] It seeks to develop new ways of conceptualizing and diagnosing such disorders and ultimately of dev...

History and regulations of Italian citizenship New rules on citizenshipNuove norme sulla cittadinanzaItalian ParliamentCitationLaw No. 91 of 1992Territorial extentItalyEnacted byX LegislatureEnacted5 February 1992Commenced5 February 1992Administered byMinistry of the InteriorStatus: Amended Certificate of Italian nationality issued to Benzion Venezia in 1943 by the Italian consulate in Thessaloniki, German-occupied Greece Italian nationality law is the law of Italy governing the acq...

 

Rebelión de las Germanías De izquierda a derecha y de arriba abajo: La paz de las Germanías, por Marcelino de Unceta; Batalla de Gandía, por J. Donon; El pueblo saca de la cárcel a Odón Colom, por J. Donon y Els agermanats de José Benlliure.Fecha 1519-1523(4 años)Lugar Reino de Valencia y Reino de MallorcaResultado Victoria realista.Consecuencias Nombramiento de Germana de Foix como virreina de ValenciaBeligerantes Agermanados1519-1523:Corona de Aragón• Reino de Valencia Realistas1...