anchor.diff:    | FilterBy(op, conds) ->
         objs |> Seq.filter (fun o ->
           let f = match op with And -> Seq.forall | Or -> Seq.exists
  -        conds |> f (fun (fld, eq, value) ->
  -          match pickField fld o with
  -          | String v -> if eq then v = value else v <> value
  -          | Number n -> if eq then n = decimal value else n <> decimal value))
  +        conds |> f (fun (op, fld, value) -> evalCondition op (pickField fld o) value))
     | GroupBy(flds, aggs) ->
         let aggs = List.rev aggs
         objs 
  
positive.code:   | Number d1, Number d2 -> reverse * compare d1 d2
    | String s1, String s2 -> reverse * compare s1 s2
    | _ -> failwith "Cannot compare values"
  
  let transformData (objs:seq<(string * Value)[]>) = function
    | Empty -> objs
  
negative.code:   | Take of int
    | Skip of int
    
  type FilterOperator = 
    | And | Or
  
  type RelationalOperator = 
    | Equals 
    | NotEquals 
    | LessThan
    | GreaterThan 
    | InRange
  
  type FilterCondition = RelationalOperator * string * string
  
  type Transformation = 
    | DropColumns of string list
    | SortBy of (string * SortDirection) list
    | GroupBy of string list * Aggregation list
    | FilterBy of FilterOperator * FilterCondition list
    | Paging of Paging list
    | Empty
  
  