anchor.diff:  -spec eval([proplists:property()], [script_expr()], worker_state(), worker_env(), module())
       -> {script_value(), worker_state()}.
   eval(LoopSpec, Body, State, Env, WorkerProvider) ->
  +    % Evaluator returns fun for evaluation of specific expression
  +    % For example:
  +    %     F = Evaluator(Expr),
  +    %     {Res1, State2} = F(State1), % evaluates expression Expr
  +    %     {Res2, State3} = F(State2)  % evaluates expression Expr again
  +
       Evaluator =
           fun (Expr) ->
               fun (S) ->
  
positive.code:                 end
              end
          end,
      ArgEvaluator =
          fun (Name, Spec, Default) ->
              case lists:keyfind(Name, #operation.name, Spec) of
  
negative.code: eval_rates(#linear_rate{from_fun = FFun, to_fun = ToFun, from = OldF, to = OldT} = RateState, Done, CurTime, Time, State) ->
      {F, State1} = FFun(State),
      {T, State2} = ToFun(State1),
      % If rate changes we have to change number of "done" iterations accordingly
      NewDone =
          case {F, T} of
              {OldF, OldT} -> Done;
              {_, _} when OldF == undefined -> Done;
              {_, _} ->
                  % Calculating areas under new and old ramp graphs (which are trapeziums)
                  % Kinematic equations also could be used (S = v0*t + a*t^2/2)
                  A = F + (T - F) * CurTime / (2 * Time),
                  B = OldF + (OldT - OldF) * CurTime / (2 * Time),
                  round(Done *  A / B)
          end,
      {RateState#linear_rate{from = F, to = T}, NewDone, State2}.
  