The nice thing about Idris is that it's specifically created with such "practical" issues in mind: it gives you powerful tools, but there's absolutely no obligation to use them. If you want to, you can avoid checking certain (or all) parts of a program. You need to define enough types to represent your computation/data, but not to prove its correctness; e.g. you can over-represent your domain using a bunch of sum types, stick infinite loops in the branches you know/think are unreachable, then turn off totality checking.
If we compare this to, say, Coq or Agda, not only must you prove everything-you-write-in-those-languages, you must also prove everything-you-write in those languages! (i.e. everything you write must be proved, and only proofs written in Coq/Agda will be accepted). You can assert axioms, but not their computational/runtime meaning, which is problematic when using them as a programming language.
On doing that in Idris (which is my dream language - the only reason I don't use it is its JS compiler is too slow), would it be possible to randomly generate elements of any data type, or would we have to write an `Arbitrary` instance for every type you want to test? I don't know/remember much about generics on Idris, would love to learn more.
(Seriously, though, why is the JS compiler still so slow? Again - I'm willing to put substantial money into funding a better one...)