
Martin Hofmann wrote:
I've already posted this mail on haskell-cafe, but apparently the subject suggested a too simple question, so I try it here again. I am picking up a discussion with the same topic from haskell-users on 8th November.
Note that you have been sending to haskell-cafe again. Your recipient name says haskell-beginners, but the address is haskell-cafe. Anyway, <<loop>> really means a loop in evalutation order, not some statebased deadlock (see below).
Thunks with reference on themselves was mentioned as main reason for <<loop>>.
A safe recursive definition would be let x = Foo (x+1) However, if you leave out the constructor, let x = x + 1 you get a <<loop>> (or a deadlock).
Are there any other reasons?
I am trying to debug monadic code which stores state information in a record maintaining several Data.Maps, but in vain so far. A state is modified/changed in several steps by a compound function i.e.
changeA $ changeB $ changeC state
Could this also lead to a deadlock?
I don't think so. At least not in a way that leads to <<loop>>. If you get <<loop>> then you really have some infinite recursion in your program. Maybe you can track it down with Debug.Trace.trace. If so, can I prevent this using CPS? -- Dr. Janis Voigtlaender http://wwwtcs.inf.tu-dresden.de/~voigt/ mailto:voigt@tcs.inf.tu-dresden.de