Idris: A Language for Type-Driven Development
Idris is a programming language designed to encourage Type-Driven Development.
In type-driven development, types are tools for constructing programs. We treat the type as the plan for a program, and use the compiler and type checker as our assistant, guiding us to a complete program that satisfies the type. The more expressive the type is that we give up front, the more confidence we can have that the resulting program will be correct.
In Idris, types are first-class constructs in the langauge. This means types can be passed as arguments to functions, and returned from functions just like any other value, such as numbers, strings, or lists. This is a small but powerful idea, enabling:
- relationships to be expressed between values; for example, that two lists have the same length.
- assumptions to be made explicit and checked by the compiler. For example, if you assume that a list is non-empty, Idris can ensure this assumption always holds before the program is run.
- if desired, properties of program behaviour to be formally stated and proven.
- Mailing list
- Long-form discussion happens on the mailing list.
- The Idris source is available from our repository. Tools and code by the wider Idris community are available in a GitHub organisation.
- There is an Idris community on Discord with several channels for learning, help and different aspects of development. You can get an invitation to join here This is currently probably the most active place for interactive discussion of Idris.
- There is also an irc channel #idris on libera. Point your irc client to irc.libera.chat then /join #idris. For a web interface, you can try IRCCloud.
- There is an active #idris channel on the Functional Programming Slack.
All participants in these forums are requested to abide by the community standards.
Idris development is led by Edwin Brady at the School of Computer Science, University of St Andrews.
Many thanks to Heath Johns for designing the logo.
Idris has been generously supported by the following EPSRC grants:
- Type-driven Verification of Communicating Systems
- Programming as Conversation: Type-Driven Development in Action
We are also grateful for the continuing support of SICSA, the Scottish Informatics and Computer Science Alliance