- The Idris 2 Programming Langauge
- Core Language Features
- 1. Introduction
- 1.1. About The Idris Programming Language
- 1.2. Using the REPL
- 1.3. A First Idris Program
- 1.4. The Shape of an Idris Definition
- 1.5. Where to Get Help
- 1.6. Conclusion
- 2. Introduction To Functions
- 2.1. Functions With More Than One Argument
- 2.2. Function Composition
- 2.3. Higher Order Functions
- 2.4. Currying
- 2.5. Anonymous Functions
- 2.6. Operators
- 2.7. Introductory Function Exercises
- 2.8. Conclusion
- 3. Algebraic Data Types
- 3.1. Enumerations
- 3.2. Exercises
- 3.3. Sum Types
- 3.4. Exercises
- 3.5. Records
- 3.6. Exercises
- 3.7. Generic Data Types
- 3.8. Exercises
- 3.9. Alternative Syntax for Data Definitions
- 3.10. Conclusion
- 4. Interfaces
- 4.1. Interface Basics
- 4.2. Exercises
- 4.3. More About Interfaces
- 4.4. Exercises
- 4.5. Interfaces in the Prelude
- 4.6. Exercises
- 4.7. Conclusion
- 5. Functions Part 2
- 5.1. Let Bindings and Local Definitions
- 5.2. Exercises
- 5.3. The Truth about Function Arguments
- 5.4. Programming with Holes
- 5.5. Conclusion
- 6. Dependent Types
- 6.1. Length-Indexed Lists
- 6.2. Exercises
- 6.3. Fin: Safe Indexing Into Vectors
- 6.4. Exercises
- 6.5. Compile-Time Computations
- 6.6. Exercises
- 6.7. Conclusion
- 7. IO: Programming with Side Effects
- 7.1. Pure Side Effects?
- 7.2. Exercises
- 7.3. Do Blocks, Desugared
- 7.4. Exercises
- 7.5. Working With Files
- 7.6. Exercises
- 7.7. How IO is Implemented
- 7.8. Conclusion
- 8. Functor and Friends
- 8.1. Functor
- 8.2. Exercises
- 8.3. Applicative
- 8.4. Exercises
- 8.5. Monad
- 8.6. Exercises
- 8.7. Background and further Reading
- 8.8. Conclusion
- 9. Recursion and Folds
- 9.1. Recursion
- 9.2. Exercises
- 9.3. Notes on Totality Checking
- 9.4. Exercises
- 9.5. Interface Foldable
- 9.6. Exercises
- 9.7. Conclusion
- 10. Effectful Traversals
- 10.1. Reading CSV Tables
- 10.2. Exercises
- 10.3. Programming with State
- 10.4. Exercises
- 10.5. The Power of Composition
- 10.6. Exercises
- 10.7. Conclusion
- 11. Sigma Types
- 11.1. Dependent Pairs
- 11.2. Exercises
- 11.3. Use Case: Nucleic Acids
- 11.4. Exercises
- 11.5. Use Case: CSV Files with a Schema
- 11.6. Exercises
- 11.7. Conclusion
- 12. Propositional Equality
- 12.1. Equality as a Type
- 12.2. Exercises
- 12.3. Programs as Proofs
- 12.4. Exercises
- 12.5. Into the Void
- 12.6. Exercises
- 12.7. Rewrite Rules
- 12.8. Exercises
- 12.9. Conclusion
- 13. Predicates and Proof Search
- 13.1. Preconditions
- 13.2. Exercises
- 13.3. Contracts between Values
- 13.4. Exercises
- 13.5. Use Case: Flexible Error Handling
- 13.6. Exercises
- 13.7. The Truth about Interfaces
- 13.8. Conclusion
- 14. Primitives
- 14.1. How Primitives are Implemented
- 14.2. Working with Strings
- 14.3. Exercises
- 14.4. Integers
- 14.5. Exercises
- 14.6. Refined Primitives
- 14.7. Exercises
- Appendices
- 15. Getting Started with pack and Idris 2
- 16. Interactive Editing in Neovim
- 17. Structuring Idris Projects
- 18. A Deep Dive into Quantitative Type Theory
- Exercise Solutions
- 19. Introductory Function Exercises
- 20. Algebraic Data Types
- 21. Interfaces
- 22. Functions Part 2
- 23. Dependent Types
- 24. IO: Programming with Side Effects
- 25. Functor and Friends
- 26. Recursion and Folds
- 27. Effectful Traversals
- 28. Sigma Types
- 29. Propositional Equality
- 30. Predicates and Proof Search
- 31. Primitives