let b:int=5

module D = struct
  let c:int=4
end

module A(B : sig val c : int end) (C : sig val c : int end) = struct
  module B = struct
    let c:int = C.c
    let d:unit = ()
  end
  let a:unit = B.d
end

module G = A(D)
module F = G(D)

module E = struct
  let a:int=b
  let c:unit=F.a
end
