anchor.diff:        let chunks = List.ofArray (if explicit then chunks.[0 .. chunks.Length - 2] else chunks)
         { Transformations = List.map parseTransform chunks; Action = action }    
   
  -
   // ----------------------------------------------------------------------------
   // Evaluate query
   // ----------------------------------------------------------------------------
  
positive.code:   | Take of int
    | Skip of int
    
  type Transformation = 
    | DropColumns of string list
    | SortBy of (string * SortDirection) list
    | GroupBy of string list * Aggregation list
    | FilterBy of (string * bool * string) list
    | Paging of Paging list
    | Empty
  
  
negative.code:         if col.EndsWith(" asc") then trimIdent (col.Substring(0, col.Length-4)), Ascending
          elif col.EndsWith(" desc") then trimIdent (col.Substring(0, col.Length-5)), Descending
          else trimIdent col, Ascending))
      | "filter", "and"::conds -> FilterBy(And, List.map parseCondition conds)
      | "filter", "or"::conds -> FilterBy(Or, List.map parseCondition conds)
      | "filter", conds -> FilterBy(And, List.map parseCondition conds)
      | "groupby", ops ->
          let keys = ops |> List.takeWhile (fun s -> s.StartsWith "by ") |> List.map (fun s -> trimIdent (s.Substring(3)))
          let aggs = ops |> List.skipWhile (fun s -> s.StartsWith "by ") |> List.map parseAggOp
  