# E4168

Compiler diagnostic name: `error_poly_unsupported`.

Error polymorphism is not supported in this position.

The `raise?` annotation means that a function is error-polymorphic: it can
propagate the error behavior of a callback or another polymorphic operation.
MoonBit only supports this form in specific function positions. It is not a
general-purpose type annotation that can be used anywhere a function type is
written.

## Erroneous example

The following toplevel value uses `raise?` in a function type annotation:

```{literalinclude} /sources/error_codes/4168_error/top.mbt
:language: moonbit
```

MoonBit will report an error.

## Suggestion

Use a non-raising function type when the callback cannot raise, or use an
ordinary concrete `raise` annotation in a supported function declaration when
the function may raise:

```{literalinclude} /sources/error_codes/4168_fixed/top.mbt
:language: moonbit
```
