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
Thunks with reference on themselves was mentioned as main reason for
> 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? If so, can I prevent this using CPS?
If the state transformation is the main purpose/computation of the monad
at all, is it better to use CPS? Is code using mtl, records or Data.Map
more prone to <<loop>> or does this not matter at all. How can I
identify self-referencing thunks more easily? Is there any rule of thumb
to prevent <<loop>>? Are there any less obvious newbie mistakes causing
<<loop> then the one above?
Sorry, a lot of questions at once, but I am kind of helpless because I
can't find any reason of my <<loop>>, so any comments, experience, and
tips are highly appreciated.