title: SmallCheck generate data satisfying invariants
body: <p>I want to use SmallCheck to test my code. I managed to generate arbitrary lists of pairs of ints, but that's not what my type should contain. The list represents a set of ranges, where <code>[1,3),[4,6)</code> would be encoded/stored as <code>[(1,3),(4,6)]</code>. </p>
  
  <p>These are the invariants for the normalized form of my ranges:</p>
  
  <pre><code>fst a &lt; snd a 
  snd a &lt; fst b where a is before b in the list
  </code></pre>
  
  <p>I would like to communicate this to SmallCheck so that it doesn't generate loads of values that I throw away, because they aren't satisfying my invariants, but maybe that's not possible. </p>
  
  <p>How can I generate lists satisfying my invariants?</p>