-## Idris2: Advancing Functional Programming with Dependent Types
-Idris2 is the evolution of the [Idris](/wiki/idris) programming language, designed specifically for general-purpose [functional programming](/wiki/functional_programming) while enhancing the guarantees and reliability of the code developers write. This next-generation language is notable for its **full support of [dependent types](/wiki/dependent_types)**, a powerful feature that allows programmers to specify and verify precise properties of their programs directly within the [type system](/wiki/type_system). It aims to combine the expressiveness of functional programming with the strong guarantees typically found in [proof assistants](/wiki/proof_assistant).
-### **Key Features of Idris2**
-#### Full Support for Dependent Types
-[Dependent types](/wiki/dependent_types) enable types to depend on values, which means that types can be more expressive and can capture more complex invariants about the data. This feature allows programmers to encode logical assertions about their code, making bugs significantly less likely and ensuring correctness in various scenarios. For instance, one can define a type for a list that is guaranteed to have a certain length, or a function that is only callable with valid, pre-validated inputs. This level of precision goes beyond traditional [static typing](/wiki/static_typing) by integrating program logic directly into the type system itself, helping to prevent common errors like off-by-one errors or invalid state transitions by catching them at [compile time](/wiki/compile_time)rather than [runtime](/wiki/runtime).
+## Idris2: Advancing Functional Programming with Dependent Types
+Idris2 is the evolution of the [Idris](/wiki/idris) programming language, designed specifically for general-purpose [functional programming](/wiki/functional_programming) while enhancing the guarantees and reliability of the code developers write. This next-generation language is notable for its **full support of [dependent types](/wiki/dependent_types)**, a powerful feature that allows programmers to specify and verify precise properties of their programs directly within the [type system](/wiki/type_system). It aims to combine the expressiveness of functional programming with the strong guarantees typically found in [proof assistants](/wiki/proof_assistant).
+### History and Motivation
+Idris2 emerged from the experience gained with its predecessor, [Idris](/wiki/idris). While Idris 1 successfully pioneered the use of [dependent types](/wiki/dependent_types) in a practical [functional programming](/wiki/functional_programming) language, its implementation, initially in [Haskell](/wiki/haskell), presented several challenges. Developers encountered issues with compilation speed, the complexity of the compiler's codebase, and limitations in optimizing generated code. The decision to completely re-implement the language, or "bootstrapping" it in Idris itself, was a significant driving force behind Idris2. This process allowed the language designers to simplify the core [language design](/wiki/language_design), improve internal consistency, and achieve substantial performance gains. The goal was to create a more robust, faster, and easier-to-maintain system, while retaining and enhancing the powerful features of [type-driven development](/wiki/type_driven_development) and formal verification that made Idris 1 unique. By building Idris2 with Idris, the development team could dogfood the language, ensuring that the improvements served the needs of real-world Idris programmers.
+### **Key Features of Idris2**
... 48 more lines