4. Split modules at least into a package of with at least 2 parts:- Meta (traits) - constraints, type definitions etc. - API - functions, globals and other "meat" of the module.
Yes, yes, yes. This could also help with encapsulation, since private works across module boundaries. The type listing only has minimal functions for its interface, then other functions are used, with UFCS, from the meat module.
