Okay I need to be direct here because this thread has been going in circles for 3 pages.
My thesis: dependent types cannot be productively taught to undergraduates. And I don't mean "it's hard" โ I mean the cost/benefit ratio is negative for the vast majority of CS programs.
Think about what a typical undergrad curriculum looks like. You're fighting to get them to understand:
• What a type is at all
• Why immutability matters
• Basic algebraic data types
• Polymorphism and generics
• Monads (lol) โ wait, no, nobody teaches that, that's the problem
And someone in this thread wants to throw Vec A (suc n) at them? Seriously? The cognitive overhead of understanding why your type-level natural number increments when you cons an element is enormous. The tooling feedback is confusing. The error messages look like mathematical notation from a textbook they haven't read. Half the time the typechecker just says the goal is โค and you're supposed to feel good about that.
I've taught intro PL courses. I've watched students' eyes glaze over at GADTs in Haskell. Dependent types would be a full massacre. The juice is not worth the squeeze unless you're specifically training type-theorists โ which most of us are NOT doing.
The industry doesn't use Agda. The industry barely uses Haskell. Let's be real.