
Hi Martin,
Seems reasonable to me. It's a common dependency-breaking technique, akin
to introducing an interface in OO-land. Did you also introduce a typeclass
constraint on the type 'r' so you can call some methods on it too? If not
then Process doesn't really depend on System at all.
Another thing to look for is that perhaps your System module splits into
two bits, one low-level (defining types and so on) and one high-level
(making use of everything in System and Process and Runner) and the two
bits live at opposite ends of the dependency graph. I've found that quite a
common situation to be in when splitting things up into modules too.
HTH,
David
On 25 October 2015 at 08:36, martin
Hello all,
I just split up a program I'm working on into several source files and ran into the following difficulty:
module Process implements Process which has a field Runner. Runner is a basically a function which alters a 'System' state. So Process needs Runner, Runner needs System and thus Process needs System.
module System implements among others a collection of Processes (because Processes can alter their states). So System needs Process.
Eh voila, I have a loop.
What I did was to leave the type of the Runner unspecified in Process, i.e. I now have (Process r) where r is the type of the Runner. Thus Process no longer needs to know about System.
This does work, but it feels strange and I'm a bit worried that this is an indication for a design flaw, but I cannot see it. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe