anchor.diff:  %% @doc Evaluate `Body', replacing occurrences of `{call,M,F,A}' and `{var,N}'.
   %% Occurrences of `{call,M,F,A}' is replaced by `erlang:apply(M,F,A)', and
   %% `{var,Name}' is replaced by the value with key `Name' in `PropList'.
  -%% If `Name' is unbound i.e., `Name' does not appear in `PropList', 
  -%% `{var,Name}' is unchanged.
  +%%
  +%% Exceptions happening when calling `erlang:apply/3' are not caught.
  +%% If `Name' is unbound i.e., `Name' does not appear in `PropList' or if
  +%% `Name' is not an atom, `{var,Name}' is unchanged.
  +%%
  +%% This is a plain function, not a compile_transform or anything like that,
  +%% so nested functions are not traversed in the substitution.  However, nested
  +%% occurrences of `{call,M,F,A}' are substituted as one would think: 
  +%% depth first, left-to-right.
   %%
   %% @spec eval(PropList::[{atom(),any()}], Body::any()) -> any()
   %% @end
  
positive.code: -record(resize,{size, dom}).
  -record(bind,  {dom, body}).
  -record(sized, {body}).
  -record(return,{value}).
  -record(suchthat,{dom,pred}).
  -record(bound_domain,{dom1,val1,dom2,fun2,size}).
  -record(choose,{min,max}).
  
negative.code: %% finally, if the generator is the value itself, it simplifies to itself
  shrink(Any,Any) -> {Any,Any}.
  
  %% @doc
  %% support functions for the generic shrinking
  %% @private
  %% @end
  
  -spec shrink_pair([domain(H)|domain(T)], [H|T], non_neg_integer()) -> 
      {[domain(H)|domain(T)],[H|T]}.
  