type A = struct { data B b data C c } type D = struct { int x data C c } type F = struct { int x } type H = int type B = struct { ref A ap int x } type C = struct { data F f data G g data H h data I i } type E = struct { data A a data C c } type G = struct { int x } type I = int