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: shrinkable_list(ListDom, List, 1, false) ->
      {ListDom, List};
  
  shrinkable_list(ListDom, List, Len, EmptyOK) ->
      ?assert(length(List) == length(ListDom)),
      ?assert(length(List) == Len),
  
negative.code: shrink_list_samesize(ListDom,List,Length,NAttempts) when is_list(List) ->
      ?assert(length(ListDom) == length(List)),
  
      HowManyToShrink = shrink_members(Length),
      case shrink_list_members(ListDom, List, Length, HowManyToShrink) of
  
  	% it did not shrink, try again
  