/// Set `$row` at `$index` in `$matrix`
/// @group setters
/// @param {Matrix} $matrix - matrix
/// @param {Number} $index - index
/// @param {List} $row (()) - row
/// @return {Matrix}
/// @require {function} columns
/// @require {function} rows
@function set-row($matrix, $index, $row: ()) {
  $desired-length: columns($matrix);

  @if type-of($index) != "number" {
    @warn "Invalid row index.";
    @return false;
  }

  @if abs($index) > rows($matrix) {
    @warn "Out of bound row index.";
    @return false;
  }

  @if $row == () {
    @for $i from 1 through $desired-length {
      $row: append($row, 0);
    }
  }

  @if length($row) != $desired-length {
    @warn "Wrong length for new row; should be #{$desired-length}.";
    @return false;
  }

  @return set-nth($matrix, $index, $row);
}
