anchor.diff:  function TValueHelper.IsInteger: Boolean;
   begin
     Result := TypeInfo = System.TypeInfo(Integer);
  +end;
  +
  +function TValueHelper.IsInterface: Boolean;
  +begin
  +  Result := Kind = tkInterface;
   end;
   
   function TValueHelper.IsNumeric: Boolean;
  
positive.code:     function IsVariant: Boolean;
      function IsWord: Boolean;
    	function IsGuid: Boolean;
      function AsDouble: Double;
      function AsFloat: Extended;
      function AsSingle: Single;
  
negative.code: uses
    SysUtils,
    Math,
    TypInfo,
    Variants,
    StrUtils;
  
  var
    Context : TRttiContext;
  
  //adapted from Spring4D
  
  function CompareValue(const Left, Right: TValue): Integer;
  const
    EmptyResults: array[Boolean, Boolean] of Integer = ((0, -1), (1, 0));
  var
    leftIsEmpty, rightIsEmpty: Boolean;
  begin
    leftIsEmpty := left.IsEmpty;
    rightIsEmpty := right.IsEmpty;
    if leftIsEmpty or rightIsEmpty then
      Result := EmptyResults[leftIsEmpty, rightIsEmpty]
    else if left.IsOrdinal and right.IsOrdinal then
      Result := Math.CompareValue(left.AsOrdinal, right.AsOrdinal)
    else if left.IsFloat and right.IsFloat then
      Result := Math.CompareValue(left.AsExtended, right.AsExtended)
    else if left.IsString and right.IsString then
      Result := SysUtils.AnsiCompareStr(left.AsString, right.AsString)
    else if left.IsObject and right.IsObject then
      Result := NativeInt(left.AsObject) - NativeInt(right.AsObject) // TODO: instance comparer
    else if Left.IsInterface and Right.IsInterface then
      Result := NativeInt(left.AsInterface) - NativeInt(right.AsInterface) // TODO: instance comparer
    else if left.IsVariant and right.IsVariant then
    begin
      case VarCompareValue(left.AsVariant, right.AsVariant) of
        vrEqual: Result := 0;
        vrLessThan: Result := -1;
        vrGreaterThan: Result := 1;
        vrNotEqual: Result := -1;
      else
        Result := 0;
      end;
    end else
      Result := 0;
  end;
  
  function SameValue(const Left, Right: TValue): Boolean;
  begin
    if Left.IsGuid and Right.IsGuid then
      Result := IsEqualGuid( Left.AsType<TGUID>, Right.AsType<TGUID> )
    else
      result := CompareValue(left, right) = 0;
  end;
  
  { TValueHelper }
  