A formalization in Coq of the Haskell pipes library
github.com
github.com
> So in all it took 1.5 years to learn Coq well enough and to find the right abstraction, and 2 weeks to do the actual work.
That matches what other people have told me about Coq: the learning curve can be brutal, but you can be surprisingly productive once you get over it. (To be fair, this sort of problem also feels like a really good fit for Coq—proving theorems in more developed sub-field of mathematics is much harder.)
A pretty cool project all around!
I know people talk about it as a theorem-prover, but how do I actually _use_ that? This might be due to my general lack of exposure to theorem provers in general, but I can't wrap my head around how I can use this to make my programs better in a practical environment (despite my total buy-in to the concept)
[0]: http://www.cis.upenn.edu/~bcpierce/sf/current/index.html
Notation "f <~ g" := (f ~> g) (at level 70).
Seems likely to cause confusion... what's the reasoning/explanation behind this? I might imagine a law such as Notation "f <~ g" := (g ~> f), but...?It's been too long since I wrote some Coq! Gotta get back into it :)