
On Tue, 2007-10-09 at 17:40 +0200, Johan Tibell wrote:
On 10/9/07, David Benbennick
wrote: On 10/9/07, Johan Tibell
wrote: data Rope = Empty | Leaf | Node !Rope !Rope
The point is that Empty can only appear at the top by construction
How about indicating this in your data type? I.e.,
data Rope = Empty | NonEmptyRope data NonEmptyRope = Leaf | Node !NonEmptyRope !NonEmptyRope
That would be an idea. What are the performance effects of this? I'm trying to not have too many layers of indirection (I will spend quite some time reading -ddumpsimpl to optimize this library so anything that makes that simpler is a Good Thing.)
Another approach would be to define your invariant as a QuickCheck property. If you run your test suite often enough you will still find errors quickly. W.r.t. performance, note that allocating data on the C-stack might be slow, so make sure you also measure this. / Thomas