ok so I've been working through Edwin Brady's book for the past few months and I love it. The idea is genuinely exciting — types as plans for programs, write the type first, let the compiler guide you to the implementation. Brady himself describes it as a process of type, define, refine: write a type for a function, create an initial definition (possibly with holes), then fill in holes as your understanding deepens.
But here's my question: do people actually work this way in practice? Like, I've tried to do TDD-style in Idris 2 for a little side project (a small DSL for validated config files) and I keep running into this pattern where I write a beautiful precise type, get 8 holes, start filling them in... and then realize my type was wrong and I have to restart.
Is the "type first, implementation second" workflow a real thing that experienced Idris devs use, or is it more like an aspirational pedagogy thing? Be honest with me. I can take it.
> write 3-line dependent type that expresses exactly the invariant I need
> feel incredibly smart
> spend 4 hours proving my vector append is associative
> my actual program is still 0 lines