anchor.diff:  -module(wallaroo_validators).
   -export([succeed/2, compose/1, pcompose/1]).
   
  +-type validator_result() :: ('ok' | {'fail', _}).
  +-type validator() :: fun((gb_tree(), module()) -> validator_result()).
  +-export_type([validator_result/0, validator/0]).
  +
   succeed(_Tree, _StoreMod) ->
       ok.
   
  +-spec compose([validator()]) -> validator().		     
   compose(Validators) when is_list(Validators) ->
       Srotadilav = lists:reverse(Validators),
       lists:foldl(fun compose_once/2, fun succeed/2, Srotadilav).
   
  +-spec compose_once(validator(), validator()) -> validator().		     
   compose_once(Fun, AccFun) when is_function(Fun, 2), is_function(AccFun, 2) ->
       fun(Tree, StoreMod) ->
   	    case Fun(Tree, StoreMod) of
  
positive.code: 	    pcompose_loop(ordsets:from_list(Pids))
      end.
  
  pcompose_loop([]) ->
      ok;
  pcompose_loop(Pids) ->
      receive
  	{result_for, Pid, is, ok} ->
  	    NewPidSet = ordsets:del_element(Pid, Pids),
  	    pcompose_loop(NewPidSet);
  	{result_for, _, is, {fail, _}=Failure} ->
  	    lists:map(fun(P) -> exit(P, kill) end, Pids),
  	    Failure;
  	X ->
  
negative.code: 	    end
      end.
  
  -spec pcompose([validator()]) -> validator().		     
  pcompose(Validators) when is_list(Validators) ->
      fun(Tree, StoreMod) ->
  	    Self = self(),
  