okay so I've been thinking about this a lot lately. I use Agda for most of my type theory fiddling and proof-adjacent programming, but a colleague keeps pushing me toward Idris 2 for "real" work. The question I keep coming back to: is the philosophical difference between these two languages actually meaningful when you sit down to write code day-to-day?
Let me lay out my current mental model:
Agda feels like it started from mathematics and is pulling toward programming. The Agda project was "more starting from the direction of 'what kind of things can we express in the type system, what kind of interesting things can we prove.'" It's genuinely amazing for formalisation. Agda is based on intuitionistic type theory, a foundational system for constructive mathematics developed by Per Martin-Löf.
Idris 2 on the other hand: Idris has been designed from the start to emphasise general purpose programming rather than theorem proving. And Idris 2 specifically deepens this with a new self-hosted version of the language which deeply integrates a linear type system, based on quantitative type theory.
So like... are these differences actually felt in practice? If I want to write an actual program that happens to be verified, which one do I reach for? Discuss.
-- The classic Agda Vec example data Vec : ℕ → Set → Set where [] : Vec zero A _∷_ : A → Vec n A → Vec (suc n) A
vs
-- Idris 2 data Vect : Nat → Type → Type where Nil : Vect 0 a (::) : a → Vect n a → Vect (n + 1) a
Syntactically similar, philosophically different. The unicode usage alone in Agda tells you something about its intended audience.