# XO0604: cyclic module imports

Modules may not import each other in a cycle, so every module can be checked and built after its dependencies. Move the shared declarations into a third module that both import, or merge the two modules. See core 4.1.

## Example

```xo
// a/a.xo
use example.com/app/b

pub fn fa() -> Int { b.fb() }

// b/b.xo
use example.com/app/a

pub fn fb() -> Int { 1 }
pub fn g() -> Int { a.fa() }
```

## Fix

```xo
// a/a.xo
use example.com/app/b

pub fn fa() -> Int { b.fb() }

// b/b.xo (no longer imports a)
pub fn fb() -> Int { 1 }
```

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

