anchor.diff:      %%
       RemIdx = random:uniform(Len),    
       Elm = lists:nth(RemIdx, List),
  -
  -    NextList = 
  -	case shrink(ElemDom,Elm) of
  -	    {_,Elm} -> 
  -		List;
  -	    {_,SElm} ->
  -		lists:sublist(List,RemIdx-1) ++ [SElm] ++ lists:sublist(List,RemIdx+1,Len)
  -	end,
  -
  -    shrink_list_members_generic(ElemDom, NextList, Len, HowMany-1).
  -
  +    %% io:format("shrinking elem ~p (~p) of ~p~n", [RemIdx,Elm,List]),
  +
  +    case shrink(ElemDom,Elm) of
  +	{_,Elm} -> 
  +	    shrink_list_N(ElemDom, List, Len, N-1);
  +	{_,SElm} ->
  +	    lists:sublist(List,RemIdx-1) ++ [SElm] ++ lists:sublist(List,RemIdx+1,Len)
  +    end.
  +
  +%%
  +%% simple loop to try N shrinks until value is shrunken.
  +%%
  +try_shrink(Dom,Val,0) -> { Dom,Val };
  +try_shrink(Dom,Val,N) ->
  +    case shrink(Dom,Val) of
  +	{_,Val} ->
  +	    io:format("shrink {~p,~p} failed~n", [Dom,Val]),
  +	    try_shrink(Dom,Val,N-1);
  +	Shrunk -> Shrunk
  +    end.
  +    
       
   
   
  
positive.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
  
negative.code: %% @spec return(Value::Type) -> domain(Type)
  -spec return(Value::Type) -> domain(Type).
  return(Val) -> 
      domain(return,
  	   fun(Self,_) -> {Self,Val} end,
  	   fun(Self,Val) -> {Self,Val} end).
  %    #?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)
  