anchor.diff:      Dom = lists:nth(random:uniform(Length), DomList),
       pick(Dom, SampleSize).
   
  -%% @doc Returns the doamin of Val.
  --spec return(Val::Type) -> domain(Type).
  +%% @doc Returns the domain containing exactly `Value'.  
  +%% Triq uses internally records of type `@'; and so to avoid
  +%% interpretation of such values you can wrap it with this.  This would
  +%% be the case if you have constants in your domains contain the atom `@'.
  +%% I.e., the following would break because Triq tries to interpret the `@':
  +%%<pre>?FORALL(X, [int(), {'@', 4}], 
  +%%   [IntVal, {'@', 4}] = X
  +%%)</pre>
  +%%To fix it, do like this:
  +%%<pre>?FORALL(X, [int(), return({'@', 4})], 
  +%%   [IntVal, {'@', 4}] = X
  +%%)</pre>
  +%% @spec return(Value::Type) -> domain(Type)
  +-spec return(Value::Type) -> domain(Type).
   return(Val) -> 
       #?DOM{kind=#return{value=Val},
   	 pick  = fun(#?DOM{kind=#return{value=V}}=Dom,_) -> {Dom,V} end,
   	 shrink  = fun(Dom,V) -> {Dom,V} end
   	}.
   
  +%% @doc Support function for the ?SIZED macro.
  +%% @spec sized( fun((integer()) -> domain(T)) ) -> domain(T)
   -spec(sized( fun((integer()) -> domain(T)) ) -> domain(T)).	     
   sized(Fun) ->
       #?DOM{kind=#sized{body=Fun},
  
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:     Dom#?DOM{empty_ok=false}.
  
  
  %% @doc Support function for the `?LET(Vars,Dom1,Dom2)' macro.
  %% @spec bind(domain(T), fun( (T) -> domain(D) )) -> domain(D)
  -spec bind(domain(T::any()), 
  	   fun( (T::any()) -> domain(D) )) -> domain(D).
  bind(Gen1,FG2) -> 
  