# E0243

`?` in a function (or closure) that does not return the same kind: an `Option` in a function returning `Result` (convert with `.ok_or(err)?`), a `Result` in one returning `Option`, or either in one returning neither. Spans the `?` expression.

**Machine-applicable fix:** none.

## Example

This program fails with `E0243`.

```oska
fn double(x: Option<Int>) -> Result<Int, String> {
    let n = x?
    Ok(n * 2)
}
```

## Fixed

The same program, fixed.

```oska
fn double(x: Option<Int>) -> Result<Int, String> {
    let n = x.ok_or("missing")?
    Ok(n * 2)
}
```

Listed in the [checker notes](/checker.md#e0243). `oskac explain E0243` prints this entry offline.