type t = string
module type U = sig val f : unit -> unit end
module type S = sig val f : int -> int end
module A : S
module B : S
neither t, U, S, A and B will not show up in the dead code analysis even if none of them are used.
I suspect anything type-related is probably harder to detect, but at the very least submodules should show up.
Moved from #16 (comment)