# Awesome Idris

> An auxiliary list of awesome Idris resources.

Idris is a general purpose pure functional programming language with dependent types. Dependent types allow types to be predicated on values, meaning that some aspects of a program’s behaviour can be specified precisely in the type. It is compiled, with eager evaluation. Its features are influenced by Haskell and ML.

## Contents

- Official resources
- Articles
- Books
- Papers
- Presentations
- Projects

### Official resources

- Official website
- Official repo

### Articles

- 10 things Idris improved over Haskell
- Meet Idris, a language that will change the way you think about programming
- Tests vs. Types

### Books

- Type Driven Development With Idris - Most important book published so far.
- Type Theory and Functional Programming
- Programming in Martin-Löf’s Type Theory
- Software Foundations - Repo is here.
- Gentle Introduction to Dependent Types with Idris

### Papers

- Elaborator Reflection: Extending Idris in Idris - David Christiansen and Edwin Brady, 2016.
- Cross-platform Compilers for Functional Languages - Edwin Brady, 2015.
- Programming and Reasoning with Side-Effects in Idris - Edwin Brady, 2014.
- Idris, a General Purpose Dependently Typed Programming Language: Design and Implementation - Edwin Brady, 2013.
- Programming and Reasoning with Algebraic Effects and Dependent Types - Edwin Brady, 2013.
- Sequential decision problems, dependently typed solutions - Nicola Botta, Cezar Ionescu and Edwin Brady, 2013.
- Programming in Idris: a tutorial - Edwin Brady, 2012.
- Idris — Systems Programming Meets Full Dependent Types - Edwin Brady, 2011.
- Scrapping your Inefficient Engine: using Partial Evaluation to Improve Domain-Specific Language Implementation - Edwin Brady and Kevin Hammond, 2010.
- Correct-by-Construction Concurrency: using Dependent Types to Verify Implementations of Effectful Resource Usage Protocols - Edwin Brady and Kevin Hammond, 2010.
- Domain Specific Languages (DSLs) for Network Protocols - Saleem Bhatti, Edwin Brady, Kevin Hammond and James McKinna, 2009.
- Lightweight Invariants with Full Dependent Types - Edwin Brady, Christoph Herrmann and Kevin Hammond, 2008.

### Presentations

- Idris: General Purpose Programming with Dependent Types - Presentation by Edwin Brady, Idris’ creator.

### Projects

- GitHub’s trending Idris repos
- iridium - xmonad with the X11 abstracted and configured with Idris.
- lightyear - Parser combinators for Idris.
- quantities Type-safe physical computations and unit conversions in Idris.
- idris-type-providers - Type provider library for Idris.
- IdrisScript - FFI Bindings to interact with the unsafe world of JavaScript.
- idris-containers - Various data structures for use in the Idris Language.
- IdrisSqlite - Effectful bindings for SQLite.
- idris-http - HTTP library for Idris.
- RingIdris - Ring solver for Idris.
- specdris - Test framework for Idris.
- idris-config - Parsers for various configuration files written in Idris.
- probability - Probabilistic computation in Idris.
- idris-protobuf - Partial implementation of Protocol Buffers in Idris.
- idris-free - Free Monads and useful constructions to work with them.
- idris-ct - Formally verified category theory library
- typedefs - Programming language-agnostic, algebraic data type definition language

### Backends

- idris-jvm - JVM bytecode backend for Idris.
- idris-llvm - LLVM backend.
- idris-erlang - Erlang backend.
- idris-malfunction - Experimental Malfunction (OCaml internal representation) backend.

### Build tools | Package managers

- Idris Rules - Idris rules for Bazel
- Ikan - A package manager for idris, in idris
- Elba - A package manager for Idris
- idream - A simple build system for Idris

### Community

- Mailing list
- IRC: #idris on freenode.net
- GitHub organization
- Community Standards

## License