anchor.diff:  %% Each row is converted through `decode_cells/1`, and the list
   %% of ldbvalue() is converted to a tuple of ldbvalue().
   %% @end
  --spec decode_rows([#tsrow{}]) -> list(tuple()).
  +-spec decode_rows([#tsrow{}]) -> [{ldbvalue()}].
   decode_rows(Rows) ->
       [list_to_tuple(decode_cells(Cells)) || #tsrow{cells = Cells} <- Rows].
   
  --spec encode_cells(list({tscolumntype(), ldbvalue()})) -> [#tscell{}].
  +-spec encode_cells([{tscolumntype(), ldbvalue()}]) -> [#tscell{}].
   encode_cells(Cells) ->
       [encode_cell(C) || C <- Cells].
   
   %% @doc Decode a list of timeseries #tscell{} to a list of ldbvalue().
  --spec decode_cells([#tscell{}]) -> list(ldbvalue()).
  +-spec decode_cells([#tscell{}]) -> [ldbvalue()].
   decode_cells(Cells) ->
       decode_cells(Cells, []).
   
  
positive.code: %% local functions
  %% ---------------------------------------
  
  -spec encode_row(list(tscolumntype()), list(ldbvalue()) | tuple(ldbvalue())) -> #tsrow{}.
  encode_row(ColumnTypes, RowCells) when is_tuple(RowCells) ->
      encode_row(ColumnTypes, tuple_to_list(RowCells));
  encode_row(ColumnTypes, RowCells) when is_list(RowCells), length(ColumnTypes) =:= length(RowCells) ->
  
negative.code:             #tsrow{cells = [#tscell{varchar_value = <<"Baz">>}, #tscell{sint64_value = 90}, #tscell{boolean_value = false}]}])).
  
  -endif.
  