anchor.diff:      end.
   
   
  +%% @doc Support function for the ?SUCHTHAT macro.
  +%% @spec suchthat(domain(T),fun((T) -> boolean())) -> domain(T)
   -spec suchthat(domain(T),fun((T) -> boolean())) -> domain(T).
   	     
  -suchthat(Dom,Fun) ->
  -    #?DOM{kind=#suchthat{dom=Dom,pred=Fun},
  +suchthat(Dom,Predicate) ->
  +    #?DOM{kind=#suchthat{dom=Dom,pred=Predicate},
   	 pick=fun(#?DOM{kind=#suchthat{dom=Dom1,pred=Fun1}},SampleSize) -> 
   		      suchthat_loop(?SUCHTHAT_LOOPS,Dom1,Fun1,SampleSize) 
   	      end
  
positive.code: 
  -define(BOX,'@box').
  -record(?BOX, {dom :: domain(T), value :: T}).
  -type box(T) :: {?BOX, domain(T), T}.
  
  
  %% @type domain(T). 
  %% 
  -type domain(T) :: domrec(T) |  T.
  		     
  
negative.code: %% How many times we try pick a value in order to satisfy a ?SUCHTHAT property.
  -define(SUCHTHAT_LOOPS,100).
  
  %% @type pick_fun(T). Picks members of the `domain(T)'.
  %% Return pair of `{domain(T),T}'; the "output domain" is what will
  %% be used for shrinking the value.
  -type pick_fun(T)   :: fun( (domain(T),integer()) -> {domain(T),T} | no_return() ).
  
  %% @type shrink_fun(T). Shrinks members of the `domain(T)'.
  %% Return pair of `{domain(T),T}'; the "output domain" is what will
  %% be used for further shrinking the value.
  -type shrink_fun(T) :: fun( (domain(T),T)         -> {domain(T),T} | no_return() ).
  -type domrec(T) :: {?DOM, 
  		    atom() | tuple(),
  