anchor.diff:  
   
   %% @doc Support function for the `?LET(Vars,Dom1,Dom2)' macro.
  +%% @private
   %% @spec bind(domain(T), fun( (T) -> domain(D) )) -> domain(D)
   -spec bind(domain(T::any()), 
   	   fun( (T::any()) -> domain(D) )) -> domain(D).
  
positive.code: %% @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.
  %%
  %% @spec eval(PropList::[{atom(),any()}], Body::any()) -> any()
  %% @end
  
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]}.
  