<div dir="ltr">Hello,<div><br></div><div>I'm having some trouble with cyclic dependency.</div><div><br></div><div>My simplified version of hierarchy:<div><br></div><div>    module A where</div><div><br></div><div>    import MyState</div><div><br></div><div>    data A a = A (StateT MyState IO a) deriving (...)</div><div><br></div><div>Now there is a module MyState:</div><div><br></div><div>    module MyState where</div><div><br></div><div>    import SomeType</div><div><br></div><div>    data MyState = MyState { st :: SomeType, ... }</div><div><br></div><div>Finally the module that introduces cyclic dependency:</div><div><br></div><div>    module SomeType where</div><div><br></div><div>    import A</div><div><br></div><div>    data SomeType = SomeType { f :: A (), ... }</div><div><br></div><div>I have been suggested to move the types into one module and then import it wherever needed. But the problem is that even if I put them into one file those three data types still form a cyclic dependency and compiler throws errors saying "i don't know about this"</div><div><br></div><div>So if I have a single module:</div><div><br></div><div>    data A a = A (StateT MyState IO a) deriving (...)</div><div>    data MyState = MyState { st :: SomeType, ... }</div><div>    data SomeType = SomeType { f :: A (), ... }</div><div><br></div><div>With this setup the compiler is gonna tell us it doesn't know about MyState. And no matter how we shuffle these types within a file we are still getting some "unknowns"</div><div><br></div><div>How would one approach such a problem? </div><div><br></div><div>Best regards,</div><div>Konstantin</div></div></div>