I am confused about why Scala is complaining about this code. I have two classes which depend on each other. When I try to create a new instance of A without a type
You can specify the type of y specifically and it will compile:
val y : A = new A(new B(y))
To infer the type of y, the compiler must first determine the type of value on the right side of assignment. While evaluating right hand's type, it encounters reference to variable y which is (at this moment) still of unknown type. Thus the compiler detects a cycle "type of y dependes on type of y" and fails.
In the second example, this situation doesn't occur because when evaluating type of new A(new B(y)), it already knows the type of y and succeeds.
Edit: when the type of recursively used variable y needs to include a mixed-in trait, it can be declared like this:
val y : A with Mixin = new A(new B(y)) with Mixin