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

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

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

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

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

  @for $i from 1 through $desired-length {
    $matrix: set-entry($matrix, $i $index, nth($column, $i));
  }

  @return $matrix;
}
