Organizing types/namespaces within tree
type Node


I agree with you that this is too weakly typed.



type Lvl1
and Lvl2
and Lvl3


I don't like the naming here. The name Lvl2 doesn't really say much. Better names would be something like Namespace, Type and Member (or maybe TypeMember).



Choice&lt;Lvl2, Lvl3, Constructor&gt;


I think that constructor is logically a type member, just like a property or function. So I would make Constructor another case in the Lvl3 (or Member) union. I think making the model simpler is worth having the possibility of a constructor in an interface.

With that change, struct, class and interface look exactly the same, so I would refactor it further by combining the three cases into one (called something like ComplexType), and distinguishing between them by an additional field (something like ComplexTypeKind).

Also, I would encode the possibility of a nested type by adding a case to Lvl3 (a.k.a. Member). But if you keep your current design, you should remove Lvl2 from the Interface case, because interfaces can't have nested types.



System.Reflection.PropertyInfo


There is no need to repeat the namespace name, you can open it.



Property of string * System.Reflection.PropertyInfo


Why do you keep the name, when it's already accessible through the PropertyInfo? This question applies to most of your cases.