# XO0209: the result of a call that only computes a value is discarded

Values are not changed in place: `xs.reverse()`, `xs.sort()`, `s.trim()`, `xs.map(f)` and the like return a new value and leave the receiver as it was. As a statement such a call does nothing. XO0209 reports an expression statement whose call performs no effect (section 6), mutates no `var` receiver or argument, and reaches no handle, interface, or function value through its receiver or arguments (an `Atomic.add`, a channel receive, or a spawn is not reported). The fix assigns the result back (`xs = xs.reverse()`) when the receiver is a `var` binding of the same type; write `let _ = f()` to discard a result on purpose. A `defer` statement's call is not reported, and `xo check --wip` reports it as a warning while the code is still being written. See core 2.6 and decision 0258.

## Example

```xo
fn f() -> List[Int] {
  var xs = [3, 1, 2]
  xs.sort()
  xs
}
```

## Fix

```xo
fn f() -> List[Int] {
  var xs = [3, 1, 2]
  xs = xs.sort()
  xs
}
```

Run `xo explain XO0209` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

