anchor.diff:      safe_sum(Vs, Acc + Value).
   
   
  +safe_length(Vs) ->
  +    safe_length(Vs, 0).
  +
  +safe_length([], Len) -> Len;
  +safe_length([null | Xs], Len) ->
  +    safe_length(Xs, Len);
  +safe_length([{_TS, null} | Xs], Len) ->
  +    safe_length(Xs, Len);
  +safe_length([_ | Xs], Len) ->
  +    safe_length(Xs, Len + 1).
  +
  +
   safe_multiply([]) -> null;
   safe_multiply([{_TS, V} | Vs]) ->
       safe_multiply(Vs, V);
  
positive.code:     square_sum(Vs, Avg, Sum + Square, Len + 1).
  
  
  median(Values) ->
      percentile(Values, 50, true).
  
  
negative.code:                               % there is no metrics handler already meaning
                                % there is nothing cached to be merged
                                % -> just read from fs directly instead
                                % XXX: handle non-existing file more gracefully?
                                File = statser_metric_handler:get_whisper_file(Path),
                                Result = statser_whisper:fetch(File, From, Until, Now),
                                Result#series{target=Path};
  