← New search

Other meanings of Idris (programming language)

Programming Languages

Idris (programming language)

Idris is a dependently typed functional programming language created by Edwin Brady at the University of St Andrews. It combines Haskell-like syntax with full dependent types, enabling types to depend on values, which allows for highly expressive specifications and compile-time verification of program properties. Idris is designed for general-purpose programming, with a focus on theorem proving and formal verification, and it has influenced other languages such as Agda and Coq.

2011
First public release
Year
2.0
Current major version
Version
BSD-3-Clause
License
License
Edwin Brady
Creator
Creator
1

Core features and design

Idris's defining feature is full dependent types, meaning types can be parameterized by values, such as the length of a list or the size of a matrix. This allows the type system to express and enforce invariants at compile time, catching errors that would otherwise surface at runtime. The language supports inductive families, pattern matching, and a tactic-based elaborator that aids in constructing proofs. Idris also features a unique erasure mechanism, where parts of the program marked as irrelevant to computation are removed during compilation, improving efficiency. Its syntax is closely modeled on Haskell, making it accessible to functional programmers, but it adds a dependent type system that goes beyond Haskell's capabilities.

2

Development and ecosystem

Idris was first released in 2011 and has since evolved through several versions, with Idris 2 being a complete rewrite that uses a custom compiler backend and supports linear types. The language is developed openly on GitHub, with contributions from a community of researchers and enthusiasts. The standard library provides a rich set of data structures and proofs, and the package manager IdrisPack facilitates dependency management. Idris has been used in research projects, including formal verification of network protocols and embedded systems, and it serves as a teaching tool for dependent types in universities. Despite its niche status, it has a dedicated following and continues to influence language design.

3

Applications and impact

Idris is particularly suited for safety-critical software, where compile-time guarantees reduce the risk of runtime failures. For example, it has been used to implement verified parsers, network protocols, and even a small operating system kernel. The language's ability to express protocols as types enables the compiler to check that implementations adhere to the protocol's state machine. Idris has also inspired other languages, such as Liquid Haskell and F*, which incorporate dependent typing ideas. In education, Idris is used to teach formal methods and type theory, with textbooks like Type-Driven Development with Idris by Edwin Brady providing a practical introduction.

4

Lesser-known aspects

One lesser-known feature is Idris's support for elaborator reflection, which allows programmers to write metaprograms that generate proofs or code at compile time, a powerful tool for automation. Another is its linear types in Idris 2, which enable resource management and safe in-place updates, a feature rare in functional languages. Idris also has a foreign function interface that allows calling C code, but with type-level guarantees about memory safety. The language's name is derived from the mythical dragon Idris, a nod to its Welsh creator's heritage. Additionally, Idris has been used to implement a verified compiler for a subset of itself, demonstrating its capability for self-hosting and formal verification.

Glossary

Dependent types
A type system where types can depend on values, allowing for precise specification of program properties.
Inductive families
A collection of types defined recursively, often used to represent data structures with invariants.
Elaborator reflection
A metaprogramming feature that allows writing code to generate proofs or terms at compile time.
Linear types
A type system feature ensuring that certain values are used exactly once, enabling safe resource management.

Idris is named after the Welsh dragon, reflecting its creator's heritage.