# E4038

Trait object for the type is not allowed.

## Erroneous Example

```moonbit
fn main {
  let a = 3 as &Eq
}
```

The example above tries to create an object of the `Eq` trait.
This is not allowed, as the trait is not object safe.

The `Eq` trait is defined as follows:

```moonbit
pub(open) trait Eq {
  op_equal(Self, Self) -> Bool
}
```

... which is why the following error is given on line 2:

```
Trait object for Eq is not allowed: `Self` occur multiple times in the type of method op_equal
```

## Suggestion

Use an object-safe trait to create a trait object.

For a trait to be object-safe, its dispatchable functions must use and only use the `Self`
type as the first parameter. For example, `Show` is such a trait:

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