On the circular imports issue, I'm coming from f#, where the lack of circular imports is seen as a feature rather than a bug. It encourages (even forces) a good onion design with the pure code at the centre of the project and the impure code (files/databases/networks) on the periphery.
Given that f# is mainly used for large, complex projects in the finance industry, it's clear that there's no reason why circular dependencies can't be refactored out of a project. It should be all the better for it. This is well explained here by the admirable Scott Wlaschin: <https://fsharpforfunandprofit.com/posts/recipe-part3>/