Please consider making circular dependent types possible.
I have largely abandoned Nim as my primary language because I always run into the same problem when my projects grow larger than a handful of files: I need to put all my types into a single type block in a single file. This simple does not scale and breaks abstractions.