Is the reason F# doesn’t support nested classes technical, stylistic, arbitrary?
Glancing over the BCL in Reflector, nested classes are used for enumerators, DynamicMetaObjects, and probably a few other things.
That piqued my curiosity about F# not having this feature. I’m aware that there are other ways to do the same thing. I’m mostly curious.
I suppose nested classes were not a core feature of the .NET object model and it was simply dropped to save the resources. There may be some technical difficulties (i.e. with visibility or with recursive type definitions), but I don’t think that would be a major problem.
For many cases where one would use nested classes in C#, such as iterators, you can nicely use object expressions, so I guess they are in some ways replacement for nested classes:
Although this is quite similar to nested classes, it isn’t compiled as nested class
and the body of an object expression cannot access private members ofCollection. I guess supporting this would complicate compilation of expressions a bit, because object expressions can appear outside of a class context…Actually, it is possible to access
privatemembers from object expression, although the code still isn’t compiled as a nested class. See comments for details.