How do you work with nested modules?

Ok. I still count three declarations. Shrug. I think that when I was a beginner a lot of that stuff would have be super confusing, starting with what does it mean for a module to be nested (I remember being mind blown when I learned you could do that). The aliasing rules are also implicit and not entirely obvious (the state module becomes MyModule.State and is implicitly aliased as State, but only in the scope of MyModule). Already OP in this thread has made that mistake…

There also isn’t a way for the type declaration to accidentally drift away from the defstruct.

This is compile-time checked by elixir.